当前位置: 首页 > news >正文

做网站app优惠活动的爱链网买链接

做网站app优惠活动的,爱链网买链接,企业网组建,网站后台清空戳蓝字“CSDN云计算”关注我们哦#xff01;简书ID#xff1a;我没有三颗心脏 github#xff1a;wmyskxz 欢迎关注公众微信号#xff1a;wmyskxz前言#xff1a;由于之前没有接触过Hibernate框架#xff0c;但是最近看一些博客深深被它的“效率”所吸引#xff0c;所以… 戳蓝字“CSDN云计算”关注我们哦简书ID我没有三颗心脏  githubwmyskxz  欢迎关注公众微信号wmyskxz前言由于之前没有接触过Hibernate框架但是最近看一些博客深深被它的“效率”所吸引所以这就来跟大家一起就着一个简单的例子来尝尝Spring全家桶里自带的JPA的鲜Spring-DATA-JPA 简介JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合ORM技术结束现在HibernateTopLinkJDO等ORM框架各自为营的局面。值得注意的是JPA是在充分吸收了现有HibernateTopLinkJDO等ORM框架的基础上发展而来的具有易于使用伸缩性强等优点。从目前的开发社区的反应上看JPA受到了极大的支持和赞扬其中就包括了Spring与EJB3.0的开发团队。注意JPA是一套规范不是一套产品那么像Hibernate,TopLink,JDO他们是一套产品如果说这些产品实现了这个JPA规范那么我们就可以叫他们为JPA的实现产品。Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能且易于扩展学习并使用 Spring Data JPA 可以极大提高开发效率spring data jpa让我们解脱了DAO层的操作基本上所有CRUD都可以依赖于它来实现摘自springboot(五)spring data jpa的使用——纯洁的微笑Hibernate 和 MyBatis 简单对比由于JPA底层干活的仍然是Hibernate框架而我们之前学习的只有MyBatis相关的东西所以在尝鲜之前还是有必要简单了解一下两者的区别Hibernate的优势Hibernate的DAO层开发比MyBatis简单Mybatis需要维护SQL和结果映射。Hibernate对对象的维护和缓存要比MyBatis好对增删改查的对象的维护要方便。Hibernate数据库移植性很好MyBatis的数据库移植性不好不同的数据库需要写不同SQL。Hibernate有更好的二级缓存机制可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。MyBatis的优势MyBatis可以进行更为细致的SQL优化可以减少查询字段。MyBatis容易掌握而Hibernate门槛较高。简单总结MyBatis小巧、方便、高效、简单、直接、半自动化Hibernate强大、方便、高效、复杂、间接、全自动化引用自【持久化框架】Mybatis与Hibernate的详细对比——高亮CRUD 分页后台实例下面我们来快速搭建一个使用Spring-DATA-JPA的CRUD分页后台实例并且我们会直接使用到RESTful API不熟悉的同学[戳这里]()第一步新建SpringBoot项目打开IDEA新建一个SpringBoot项目不熟悉SpringBoot的同学请右转【传送门】然后在pom.xml中添加以下依赖!-- mysql--dependency    groupIdmysql/groupId    artifactIdmysql-connector-java/artifactId    version5.1.21/version/dependency!-- jpa--dependency    groupIdorg.springframework.boot/groupId    artifactIdspring-boot-starter-data-jpa/artifactId/dependency然后把application.properties弄成这个样子#数据库spring.datasource.urljdbc:mysql://127.0.0.1:3306/testdb?useUnicodetruecharacterEncodingutf-8spring.datasource.usernamerootspring.datasource.password123456spring.datasource.driver-class-namecom.mysql.jdbc.Driverspring.jpa.properties.hibernate.hbm2ddl.autoupdate#显示SQL语句spring.jpa.show-sqltrue#不加下面这句则默认创建MyISAM引擎的数据库spring.jpa.database-platformorg.hibernate.dialect.MySQL5InnoDBDialect#自己重写的配置类默认使用utf8编码spring.jpa.properties.hibernate.dialectcom.wmyskxz.demo.config.MySQLConfigspring.jpa.properties.hibernate.hbm2ddl.auto是hibernate的配置属性其主要作用是自动创建、更新、验证数据库表结构。该参数的几种配置如下create每次加载hibernate时都会删除上一次的生成的表然后根据你的model类再重新来生成新表哪怕两次没有任何改变也要这样执行这就是导致数据库表数据丢失的一个重要原因。create-drop每次加载hibernate时根据model类生成表但是sessionFactory一关闭,表就自动删除。update最常用的属性第一次加载hibernate时根据model类会自动建立起表的结构前提是先建立好数据库以后加载hibernate时根据model类自动更新表结构即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后表结构是不会被马上建立起来的是要等应用第一次运行起来后才会。validate每次加载hibernate时验证创建数据库表结构只会和数据库中的表进行比较不会创建新表但是会插入新值。然后新建一个【config】包创建一个【MySQLConfig】类上面的spring.jpa.properties.hibernate.dialect属性就要配置这里的类全路径package com.wmyskxz.demo.config;import org.hibernate.dialect.MySQL5InnoDBDialect;public class MySQLConfig extends MySQL5InnoDBDialect {    Override    public String getTableTypeString() {        return ENGINEInnoDB DEFAULT CHARSETutf8;    }}第二步创建好需要的数据库打开SQL服务建表语句也很简单啦create database testdb;第三步创建实体类实体类映射的实际上是数据库表的结构在适当的包目录下例如【entity】下创建好实体类package com.wmyskxz.demo.entity;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;Entity // 表明这是个实体类public class User {    Id // 表明这个属性是主键    GeneratedValue // 自增长    private long id;    Column(nullable  false, unique  true)    // 不允许为空属性唯一    private String username;    Column(nullable  false)   // 不允许为空    private String password;    // getter and setter}第四步DAO层新建一个【repository】包然后新建一个【UserRepository】接口并继承JpaRepository类package com.wmyskxz.demo.repository;import com.wmyskxz.demo.entity.User;import org.springframework.data.jpa.repository.JpaRepository;public interface UserRepository extends JpaRepositoryUser, Long {}继承JpaRepository需要传入两个参数一个是实体类User一个是主键的类型Long而凡是继承了JpaRepository类的就会自动实现很多内置的方法包括增删改查以及使用默认支持的Pageable对象来进行分页默认的方法大致如下public interface JpaRepositoryT, ID extends PagingAndSortingRepositoryT, ID, QueryByExampleExecutorT {    ListT findAll();    ListT findAll(Sort var1);    ListT findAllById(IterableID var1);    S extends T ListS saveAll(IterableS var1);    void flush();    S extends T S saveAndFlush(S var1);    void deleteInBatch(IterableT var1);    void deleteAllInBatch();    T getOne(ID var1);    S extends T ListS findAll(ExampleS var1);    S extends T ListS findAll(ExampleS var1, Sort var2);}第五步Controller层新建【controller】包新建一个【UserController】类编写简单的增删改查代码package com.wmyskxz.demo.controoler;import com.wmyskxz.demo.entity.User;import com.wmyskxz.demo.repository.UserRepository;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.domain.PageRequest;import org.springframework.data.domain.Sort;import org.springframework.web.bind.annotation.*;import java.util.Optional;RestController // 表明这是一个Controller并返回JSON格式public class UserController {    Autowired    private UserRepository userRepository;    GetMapping(/getOne)    public OptionalUser getOneUserById(RequestParam long id) {        return userRepository.findById(id);    }    GetMapping(/all)    public IterableUser getAllUsers(RequestParam(value  page, defaultValue  0) int page,                                      RequestParam(value  size, defaultValue  5) int size) {        page  page  0 ? 0 : page;// 如果page为负数则修改为0防止在首页点击上一页发生错误        Sort sort  new Sort(Sort.Direction.DESC, id);// 按id倒叙排列        return userRepository.findAll(new PageRequest(page, size, sort));    }    PostMapping(/add)    public String addUser(RequestParam String username,                          RequestParam String password) {        User user  new User();        user.setUsername(username);        user.setPassword(password);        userRepository.save(user);// 注意这里是save        return Saved;    }    DeleteMapping(/delete)    public String deleteUserById(RequestParam long id) {        userRepository.deleteById(id);        return Deleted;    }    PutMapping(/update)    public String updateUser(User user) {//        User user  new User();//        user.setId(id);//        user.setUsername(username);//        user.setPassword(password);        userRepository.save(user);        return Updated;    }}上面就直接使用Autowired自动引入了继承了JpaRepository的UserRepository接口我们使用它默认的方法已经足够完成我们的基础功能了值得一提的是我们的getAllUsers(...)方法它往findAll()方法里传入了一个Pageable对象这是Spring Data库中定义的一个接口是所有分页相关信息的一个抽象通过该接口我们可以得到和分页相关的所有信息例如pageNumber、pageSize等这样Jpa就能够通过Pageable参数来得到一个带分页信息的Sql语句。当然上面我们是通过自己创建了一个Pageable对象Spring也支持直接获取Pageable对象可以把上面的getAllUsers(...)方法改写成下面这样GetMapping(/all)public IterableUser getAllUsers(PageableDefault(value  5, sort  {id}, direction  Sort.Direction.DESC)                                               Pageable pageable) {    return userRepository.findAll(pageable);}默认从第0页开始也可以自己传入一个page参数跟上面的是一样的。第六步运行项目上面我们就快速搭建起来了一个基于Spring Boot和JPA的REST风格的后台增删改查实例我们把项目跑起来可以看到数据库自动创建了一些表JPA帮我们创建的user表的创建SQL如下CREATE TABLE user (  id bigint(20) NOT NULL,  password varchar(255) NOT NULL,  username varchar(255) NOT NULL,  PRIMARY KEY (id),  UNIQUE KEY UK_sb8bbouer5wak8vyiiy4pf2bx (username)) ENGINEInnoDB DEFAULT CHARSETutf8;使用REST测试工具测试完全符合我们的要求然后我们使用一些REST的测试工具来测试上面的功能是否都能正确运行比如我这里使用的【Restlet Client】在Chrome商店就可以下载到。/all地址测试首先先来测试一下http://localhost:8080/all地址由于现在数据库还是空的所以可以看到返回如下{    content: [    ],    pageable: {        sort: {            sorted: true,            unsorted: false,            empty: false        },        offset: 0,        pageNumber: 0,        pageSize: 5,        unpaged: false,        paged: true    },    totalElements: 0,    last: true,    totalPages: 0,    number: 0,    size: 5,    sort: {        sorted: true,        unsorted: false,        empty: false    },    numberOfElements: 0,    first: true,    empty: true}添加用户测试然后我们使用http://localhost:8080/add?usernamewmyskxzpassword123地址添加几个类似的用户信息可以看到返回正确的Saved信息/getOne地址测试我们就直接使用http://localhost:8080/getOne?id1来获取刚才添加的用户可以看到返回正确的数据{    id: 1,    username: wmyskxz,    password: 123}修改用户测试然后我们使用http://localhost:8080/update?id1usernamewmyskxzpassword123456来模拟进行用户密码的修改可以看到正确的更新信息Updated再次查询用户也能看到正确的数据{    id: 1,    username: wmyskxz,    password: 123456}分页测试我们使用添加功能为数据库添加5条以上的数据然后进行一次查询/all可以看到能够按照id倒叙排列后返回5条数据数据库的情况返回的JSON数据如下{    content: [        {            id: 10,            username: wmyskxz8,            password: 123        },        {            id: 9,            username: wmyskxz7,            password: 123        },        {            id: 8,            username: wmyskxz6,            password: 123        },        {            id: 7,            username: wmyskxz5,            password: 123        },        {            id: 6,            username: wmyskxz4,            password: 123        }    ],    pageable: {        sort: {            sorted: true,            unsorted: false,            empty: false        },        offset: 0,        pageNumber: 0,        pageSize: 5,        unpaged: false,        paged: true    },    totalElements: 9,    last: false,    totalPages: 2,    number: 0,    size: 5,    sort: {        sorted: true,        unsorted: false,        empty: false    },    numberOfElements: 5,    first: true,    empty: false}删除用户测试使用地址http://localhost:8080/delete?id1来删除ID为1的用户能正确看到Deleted信息并查看数据能够看到数据已经被删除了。以上我们就快速搭建好了一个CRUD分页的后台实例还用了比较流行的RESTful风格粗略的感受了一下JPA的方便还是挺爽的..没有复杂的Mapper文件不用自动生成实体甚至不用管SQL只需要专注在逻辑上就行了其实简单使用的话以上的东西也能应付一些常见的场景了后期再深入了解了解吧参考资料springboot(五)spring data jpa的使用——纯洁的微笑springboot(十五)springbootjpathymeleaf增删改查示例——纯洁的微笑Spring Boot中使用Spring-data-jpa让数据访问更简单、更优雅——程序猿DD推荐阅读5G大规模商用来临之前你必须知道的几个知识点“离开360时它只给了我一块钱”AI找Bug一键快速预测原子互换一统公链江湖的神来之笔春晚鬼畜 B 站日排行最高赵本山我的时代还没有结束PDF翻译神器再也不担心读不懂英文Paper了新闻联播也可以拿来做数据分析高晓松侃5G2019开年大讲揭示运营商的秘密1.微信群添加小编微信color_ld备注“进群姓名公司职位”即可加入【云计算学习交流群】和志同道合的朋友们共同打卡学习2.征稿投稿邮箱liudancsdn.net微信号color_ld。请备注投稿姓名公司职位。喜欢就点击“好看”吧
http://www.zqtcl.cn/news/963105/

相关文章:

  • 网站资质优化网站备案密码使用
  • 廊坊营销网站团队网站推广报告
  • 商品网站模板多语言企业网站模板
  • 佛山网页制作设计东莞seo推广机构帖子
  • 公司网站开发费用如何入账网站开发与设计实训总结两千字
  • 生物网站模板在线crm厂商
  • 在线制作动画网站ps切图做网站
  • 西安企业网站建设公司虚拟主机可以做视频网站嘛
  • 做淘客网站用什么程序今天杭州新闻最新消息
  • 东莞专业建网站网站制作方案相信乐云seo
  • 网站分页符素材怎么解决
  • 行远金华网站建设公司合肥公司做网站
  • 餐厅类网站模板中国电建市政建设集团有限公司网站
  • 格力网站建设首页六盘水遵义网站建设怎么做
  • 建设工程企业资质工作网站创建网站怎么赚钱的
  • 三水网站建设流感吃什么药最好
  • 洛阳市住房和城乡建设局网站怎么查询企业注册信息
  • 商业摄影网站源码wordpress文章作者
  • 昆明企业网站模板建站漳浦建设局网站更新
  • 企业网站建设策划书微信开发者工具是干嘛的
  • 泵 品牌网站建设WordPress头像不能本地化
  • vue快速建站网站开发法律
  • 家居行业网站开发百度竞价推广账户
  • 粉色大气妇科医院网站源码百度网址大全网址
  • wordpress 留言墙插件优化网站搭建
  • 优秀设计师网站芯片设计公司
  • 铜陵网站建设公司wordpress密码访问插件
  • 一个公司做2个产品网站怎么做的wordpress网站怎么百度的到
  • 邓州做网站做网站seo怎么赚钱
  • 微信小程序开发步骤图长沙百度seo