写点什么

Springboot 快速整合 JPA 实现增删查改,linux 系统架构和应用技巧

  • 2021 年 11 月 10 日
  • 本文字数:2431 字

    阅读完需:约 8 分钟

简单看看 JPA 依赖包的主要成分,可以看到里面有个熟悉的框架 hibernate:


![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWcyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTAwMTk5MC8yMDE4MTEvMTAwMTk5MC0yMDE4MTEwNDExNDcwNDk0MC0yMDcwNjcxNTk3LnBuZw?x-oss-process=image/format,p


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


ng)


不多说,直接开始整合。


这次快速整合示例的目录结构:



先创建一个 springboot 项目,在 pom.xml 中加入依赖:


<dependency>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-starter-web</artifactId>


</dependency>


<dependency>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-starter-test</artifactId>


<scope>test</scope>


</dependency>


<dependency>


<groupId>mysql</groupId>


<artifactId>mysql-connector-java</artifactId>


</dependency>


<dependency>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-starter-data-jpa</artifactId>


</dependency>


<dependency>


<groupId>org.projectlombok</groupId>


<artifactId>lombok</artifactId>


<version>1.16.10</version>


<scope>provided</scope>


</dependency>


接着是 application.yml 文件:


#服务端口


server:


port: 8055


spring:


datasource:


driver-class-name: com.mysql.cj.jdbc.Driver


url: jdbc:mysql://localhost:3306/testdemo?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull


hikari: # springboot 2.0 整合了 hikari ,据说这是目前性能最好的 java 数据库连接池


username: root


password: root


minimum-idle: 5 # 最小空闲连接数量


idle-timeout: 180000 # 空闲连接存活最大时间,默认 600000(10 分钟)


maximum-pool-size: 10 # 连接池最大连接数,默认是 10


auto-commit: true # 此属性控制从池返回的连接的默认自动提交行为,默认值:true


pool-name: MyHikariCP # 连接池名称


max-lifetime: 1800000 # 此属性控制池中连接的最长生命周期,值 0 表示无限生命周期,默认 1800000 即 30 分钟


connection-timeout: 30000 # 数据库连接超时时间,默认 30 秒,即 30000


connection-test-query: SELECT 1 #连接池每分配一条连接前执行的查询语句(如:SELECT 1),以验证该连接是否是有效的。如果你的驱动程序支持 JDBC4,HikariCP 强烈建议我们不要设置此属性


jpa:


hibernate:


ddl-auto: create # 第一次建表 create 后面用 update,要不然每次重启都会新建表


show-sql: true #打印执行的 sql 语句


database-platform: org.hibernate.dialect.MySQL5InnoDBDialect #设置数据库方言 记住必须要使用 MySQL5InnoDBDialect 指定数据库类型对应 InnoDB ;如果使用 MySQLDialect 则对应的是 MyISAM


上面的配置项,需要注意的是,


①数据库连接池,这次例子里面采用的是 springboot2.0 版本后默认整合的 hikari 连接池,想多了解的可以去网上额外了解下这个数据库连接池的优劣。


②ddl-auto,


  • create:每次运行程序时,都会重新创建表,故而数据会丢失

  • create-drop:每次运行程序时会先创建表结构,然后待程序结束时清空表

  • upadte:每次运行程序,没有表时会创建表,如果对象发生改变会更新表结构,原有数据不会清空,只会更新(推荐使用)

  • validate:运行程序会校验数据与数据库的字段类型是否相同,字段不同会报错

  • none: 禁用 DDL 处理


③database-platform,这项是配置对应连接数据库的方言,也就是语法、规则等等。 这里我们使用 mysql 数据库,方言项记得使用 MySQL5InnoDBDialect,这样才能对应起 InnoDB。


好,接下来创建 User.java(需要注意的是主键自增的设置项,IDENTITY):


import javax.persistence.Entity;


import javax.persistence.GeneratedValue;


import javax.persistence.GenerationType;


import javax.persistence.Id;


/**


  • @Author : JCccc

  • @CreateTime : 2019/10/12

  • @Description :


**/


@Data


@Entity // 该注解声明一个实体类,与数据库中的表对应


@ToString


public class User {


@Id // 表明 id


@GeneratedValue(strategy = GenerationType.IDENTITY) // 自动生成


private Long id ;


private String name ;


}


  • @Entity:标注在实体类上告诉 JPA 这是一个实体类

  • @Table:可以给表命名,也可以使用默认的,即实体类名就是表名

  • @Id:主键注解

  • @GeneratedValue(strategy = GenerationType.IDENTITY) //自增主键

  • @Column: 标注在字段上,可以指定字段名和长度 .


然后是 mapper 层,UserMapper.java:


import com.jc.gracedemo.pojo.User;


import org.springframework.data.jpa.repository.JpaRepository;


import org.springframework.stereotype.Component;


/**


  • @Author : JCccc

  • @CreateTime : 2019/10/12

  • @Description :


**/


@Component


public interface UserMapper extends JpaRepository<User,Long> {


/*


  • 我们在这里直接继承 JpaRepository

  • 这里面已经有很多现场的方法了,可以直接通过 UserMapper.xxx()直接使用

  • 这也是 JPA 的一大优点

  • */


}


在 mapper 层,因为我们使用的是 jpa,继承了 JpaRepository,里面基本的增删查改方法都是已经提供的,所以除了我们自己额外需要扩展的业务方法,基本不用写:



而且 JpaRepository 继承的分页 PagingAndSortingRepository:



而 PagingAndSortingRepository 继承了 CrudRepository:



所以非常多的方法都是可以直接使用,非常方便。


接下来是 service 层,UserService.java:


/**


  • @Author : JCccc

  • @CreateTime : 2019/10/12

  • @Description :


**/


public interface UserService {


List<User> findAll();


User getOne(Long id);


}


对应的 impl:


/**


  • @Author : JCccc

  • @CreateTime : 2019/10/12

  • @Description :


**/


@Service


public class UserServiceImpl implements UserService {


@Autowired


private UserMapper userMapper;


@Override


public List<User> findAll() {


// 这里我们就可以直接使用 findAll 方法 这个 findAll 方法来自 JpaRepository


return userMapper.findAll();

评论

发布
暂无评论
Springboot快速整合JPA实现增删查改,linux系统架构和应用技巧