前言
Hi 我是来自西部大嫖客杰西。
这篇文章主要是讲述如何使用 Spring Boot 快速搭建 JPA 进行数据库操作。
Spring JPA 其实类似于 Mybatis 的数据访问层的实现。其目的是通过优化减少代码量,实现更加轻易地对数据库的访问。
在开始搭建 demo 之前,极力推荐大家遇到困难首先查看官方文档,官档的描述非常清楚。 官档地址
搭建步骤
- 初始项目
- 初始数据库
- 导入依赖
application.yml添加数据库配置- 编写
UserEntity.java - 编写
SysUserRepository.java - 编写
UserController.java
初始项目
初始化方法我一般用以下两种
- 通过 start.spring.io 自定义项目,然后下载/导入。
- 通过 IDEA 来新建
Spring Boot项目。
然后项目目录基本以下
+- java
+- com.jc.jpa-demo
+- domain
+- repository
+- service (暂时不写 service 层代码)
+- controller
+- resources
+- application.yml
初始数据库
CREATE TABLE "sys_user" (
"id" bigint(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
"username" varchar(50) NOT NULL COMMENT '用户名',
"password" varchar(100) DEFAULT NULL COMMENT '密码',
"salt" varchar(50) DEFAULT NULL COMMENT '',
"state" varchar(50) DEFAULT NULL COMMENT '',
PRIMARY KEY ("id") USING BTREE,
UNIQUE KEY "username" ("username") USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='系统用户表';
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
注意,我是用的 Spring Boot 为 2.2.2.RELEASE。
ps:引入 web 依赖是为了直接通过 url 来调试程序。
application.yml 添加数据库配置
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.1.12:3306/test?characterEncoding=utf8
username: root
password: root
jpa:
properties:
hibernate:
show_sql: true
format_sql: true
ps:这里需要更改成你实际情况的数据库信息。
编写简单的分页工具 SysUser.java
domain/UserEntity.java
@Entity
@Table(name = "sys_user")
public class UserEntity implements Serializable {
@Id //表明主键
@GeneratedValue(strategy = GenerationType.IDENTITY) //表示自增长方式
@Column(name = "id") //表示对应的表product_的字段名
private int id;
private String username;
private String password;
private String salt;
private String state;
// 省略了 getter setter
}
ps:@Table 和 @Column 注解会在 IDEA 环境下报错,但是并不妨碍用运行。可自行百度如何配置 IDEA。
编写 SysUserRepository.java
repository/UserRepository.java
@Transactional
public interface UserRepository extends JpaRepository<UserEntity, Long> {
@Query(value = "select * from sys_user where id = ?1",nativeQuery = true)
public List<UserEntity> nativeQuery(int age);
}
编写 UserController.java
controller/SysUserController.java
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserRepository userRepository;
@RequestMapping(value = "/list")
public List<UserEntity> list()
{
return userRepository.findAll();
}
@RequestMapping(value = "/add")
public String add()
{
UserEntity userEntity = new UserEntity();
userEntity.setUsername("admin1");
userEntity.setPassword("admin");
userEntity.setSalt("21");
userRepository.save(userEntity);
return "用户信息添加成功";
}
@RequestMapping(value = "/delete/{id}")
public String delete(@PathVariable("id") int userId)
{
UserEntity userEntity = new UserEntity();
userEntity.setId(userId);
userRepository.delete(userEntity);
return "用户信息删除成功";
}
@RequestMapping(value = "/{id}")
public List<UserEntity> age(@PathVariable("id") int userId){
return userRepository.nativeQuery(userId);
}
}
启动测试
- http://localhost:8080/user/list 查询所有用户
- http://localhost:8080/user/add 添加一个用户(注意,不能重复添加,这个字段数据库做了限制,而我又为了方便将 username 写死。你可以改成参数传进去)
- http://localhost:8080/user/delete/5 删除 id = 5 的用户
- http://localhost:8080/user/5 查找 id = 5 的用户