值不值 | 三分钟搞定Jpa?值不值!

开发 前端
实体类,需要使用 @Entity 注解标注 需要对实体类的属性进行标注,使用 @Id 标注组件 使用 @Column 标注非主键。

[[353188]]

本文转载自微信公众号「小明菜市场」,作者+小明菜市场。转载本文请联系小明菜市场公众号。

数据准备

数据库使用的数据表设计如下

建表语句如下

  1. SET NAMES utf8mb4; 
  2. SET FOREIGN_KEY_CHECKS = 0; 
  3.  
  4. -- ---------------------------- 
  5. -- Table structure for t_user 
  6. -- ---------------------------- 
  7. DROP TABLE IF EXISTS `t_user`; 
  8. CREATE TABLE `t_user` ( 
  9.   `id` int(11) NOT NULL AUTO_INCREMENT, 
  10.   `user_name` varchar(255) DEFAULT NULL
  11.   `passwordvarchar(255) DEFAULT NULL
  12.   `last_login_time` datetime DEFAULT NULL
  13.   `sex` tinyint(4) DEFAULT NULL
  14.   PRIMARY KEY (`id`) 
  15. ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=armscii8; 
  16.  
  17. -- ---------------------------- 
  18. -- Records of t_user 
  19. -- ---------------------------- 
  20. BEGIN
  21. INSERT INTO `t_user` VALUES (1, 'json''123''2019-07-27 16:01:21', 1); 
  22. INSERT INTO `t_user` VALUES (2, 'jack jo''123''2019-07-24 16:01:37', 1); 
  23. INSERT INTO `t_user` VALUES (3, 'manistal''123''2019-07-24 16:01:37', 1); 
  24. INSERT INTO `t_user` VALUES (4, 'landengdeng''123''2019-07-24 16:01:37', 1); 
  25. INSERT INTO `t_user` VALUES (5, 'max''123''2019-07-24 16:01:37', 1); 
  26. COMMIT
  27.  
  28. SET FOREIGN_KEY_CHECKS = 1; 

新建 Spring Boot 工程

选择 File -> New -> Project 选择 Spring Initializr,选择 next 填写包名,项目名,选择下一步。选择依赖,Spring web starter 前面打钩,sql 选项为 Spring Data Jpa,MySql 项目名任意

引入 Pom配置

  1. <dependencies> 
  2.         <dependency> 
  3.             <groupId>org.springframework.boot</groupId> 
  4.             <artifactId>spring-boot-starter-data-jpa</artifactId> 
  5.         </dependency> 
  6.         <dependency> 
  7.             <groupId>org.springframework.boot</groupId> 
  8.             <artifactId>spring-boot-starter-webflux</artifactId> 
  9.         </dependency> 
  10.  
  11.         <dependency> 
  12.             <groupId>mysql</groupId> 
  13.             <artifactId>mysql-connector-java</artifactId> 
  14.             <scope>runtime</scope> 
  15.         </dependency> 
  16.         <dependency> 
  17.             <groupId>org.springframework.boot</groupId> 
  18.             <artifactId>spring-boot-starter-test</artifactId> 
  19.             <scope>test</scope> 
  20.         </dependency> 
  21.         <dependency> 
  22.             <groupId>io.projectreactor</groupId> 
  23.             <artifactId>reactor-test</artifactId> 
  24.             <scope>test</scope> 
  25.         </dependency> 
  26.     </dependencies> 

编写配置文件 application.yml

  1. server: 
  2.   port: 8086 
  3. spring: 
  4.   #通用的数据源配置 
  5.   datasource: 
  6.     driverClassName: com.mysql.jdbc.Driver 
  7.     url: jdbc:mysql://localhost:3306/demo_test?useSSL=false&useUnicode=true&characterEncoding=utf8 
  8.     username: root 
  9.     password: 123 
  10.   jpa: 
  11.     #这个参数是在建表的时候,将默认的存储引擎切换为 InnoDB 用的 
  12.     database-platform: org.hibernate.dialect.MySQL5InnoDBDialect 
  13.     #配置在日志中打印出执行的 SQL 语句信息。 
  14.     show-sql: true 
  15.     hibernate: 
  16.       #配置指明在程序启动的时候要删除并且创建实体类对应的表 
  17.       ddl-auto: create 

编写示例代码

新建实体对象 UserDao.java

实体类,需要使用 @Entity 注解标注 需要对实体类的属性进行标注,使用 @Id 标注组件 使用 @Column 标注非主键

  1. /** 
  2.  * 用户实体类 
  3.  * */ 
  4. @Entity 
  5. @Table(name="t_user"
  6. public class UserDO { 
  7.     @Id 
  8.     private Integer id; 
  9.     @Column(name="user_name",length = 200) 
  10.     private String userName; 
  11.     @Column(name="password",length = 200) 
  12.     private String password
  13.     @Column(name="sex"
  14.     private Integer sex; 
  15.     @Column(name="last_login_time"
  16.     private Date lastLoginTime; 
  17.  
  18.     public Integer getId() { 
  19.         return id; 
  20.     } 
  21.  
  22.     public void setId(Integer id) { 
  23.         this.id = id; 
  24.     } 
  25.  
  26.     public String getUserName() { 
  27.         return userName; 
  28.     } 
  29.  
  30.     public void setUserName(String userName) { 
  31.         this.userName = userName; 
  32.     } 
  33.  
  34.     public String getPassword() { 
  35.         return password
  36.     } 
  37.  
  38.     public void setPassword(String password) { 
  39.         this.password = password
  40.     } 
  41.  
  42.     public Integer getSex() { 
  43.         return sex; 
  44.     } 
  45.  
  46.     public void setSex(Integer sex) { 
  47.         this.sex = sex; 
  48.     } 
  49.  
  50.     public Date getLastLoginTime() { 
  51.         return lastLoginTime; 
  52.     } 
  53.  
  54.     public void setLastLoginTime(Date lastLoginTime) { 
  55.         this.lastLoginTime = lastLoginTime; 
  56.     } 

新建仓库接口类 UserRepository

仓库接口类,UserRepository 是我们常用的 Dao 接口,需要注意

  1. 使用 @Repository 注解
  2. 继承 JPARepository
  3. UserRepository 不需要编写任何代码,即可实现增删查改
  1. @Repository 
  2. public interface UserRepository extends JPARepository<UserDO,Integer> { 
  3.  

编写测试用例

  1. src/test/java/com/fishpro/jpa/ 

下,新增加

  1. UserRepositoryTest.java 

使用

  1. @RunWith(SpringRunner.class) 

  1. @SpringBootTest 

注解标注类。

  1. @RunWith(SpringRunner.class) 
  2. @SpringBootTest 
  3. public class UserRepositoryTest{ 
  4.  

新增加用户数据

  1. /** 
  2.      * 初始化一个对象 UserDO 测试Insert过程 
  3.      * */ 
  4.     @Before 
  5.     public void before(){ 
  6.         UserDO userDO=new UserDO(); 
  7.         userDO.setId(1); 
  8.         userDO.setUserName("fishpro"); 
  9.         userDO.setSex(1); 
  10.         userDO.setLastLoginTime(new Date()); 
  11.         userDO.setPassword("passWord"); 
  12.         userRepository.save(userDO); 
  13.     } 

查询单个用户数据

  1. @Test 
  2.     public void testFind(){ 
  3.         Optional<UserDO> optionalUserDO=userRepository.findById(1); 
  4.         if(optionalUserDO.isPresent()){ 
  5.             UserDO userDO=optionalUserDO.get(); 
  6.             System.out.println("testFind user"+userDO.getUserName()); 
  7.         } 
  8.  
  9.     } 

查询多个数据

  1. @Test 
  2.     public void testFindAll(){ 
  3.         List<UserDO> list=userRepository.findAll(); 
  4.         for (UserDO user:list 
  5.              ) { 
  6.             System.out.println("user_name:"+user.getUserName()); 
  7.         } 
  8.     } 

更新数据

  1. @Test 
  2.     public void testUpdate(){ 
  3.         Optional<UserDO> optionalUserDO=userRepository.findById(1); 
  4.         if(optionalUserDO.isPresent()){ 
  5.             UserDO userDO=optionalUserDO.get(); 
  6.             userDO.setUserName("fishpro001"); 
  7.             userRepository.save(userDO); 
  8.             System.out.println("testFind user"+userDO.getUserName()); 
  9.         } 
  10.  
  11.     } 

删除数据

  1. @After 
  2.     public void after(){ 
  3.         userRepository.deleteById(1); 
  4.         userRepository.deleteById(2); 
  5.         userRepository.deleteById(3); 
  6.     } 

联合主键

例如定义表中userId,roleId 都是主键,此时这样设置

1.定义一个主键类

  1. public class UserRoleKey implements Serializable { 
  2.     private Integer userId; 
  3.     private Integer roleId; 

2.定义实体类

  1. @Entity 
  2. @Table(name="t_user_role"
  3. @IdClass(UserRoleKey.class) //注意这里是引入了 定义的符合主键类 
  4. public class UserRoleDO { 
  5.     @Id 
  6.     private Integer userId; 
  7.     @Id 
  8.     private Integer roleId; 
  9.  
  10.     public Integer getUserId() { 
  11.         return userId; 
  12.     } 
  13.  
  14.     public void setUserId(Integer userId) { 
  15.         this.userId = userId; 
  16.     } 
  17.  
  18.     public Integer getRoleId() { 
  19.         return roleId; 
  20.     } 
  21.  
  22.     public void setRoleId(Integer roleId) { 
  23.         this.roleId = roleId; 
  24.     } 

 

责任编辑:武晓燕 来源: 小明菜市场
相关推荐

2012-07-26 16:33:30

苹果山狮OS X 10.8

2009-11-05 16:04:19

Oracle用户表

2021-06-09 07:14:32

数据分析互联网运营大数据

2022-01-05 18:18:01

Flink 数仓连接器

2015-08-14 13:12:20

4G

2024-05-16 11:13:16

Helm工具release

2022-02-16 19:42:25

Spring配置开发

2009-11-09 12:55:43

WCF事务

2023-02-13 13:50:48

研究offer

2009-11-12 09:16:15

ADO.NET数据库连

2021-04-20 13:59:37

云计算

2023-12-27 08:15:47

Java虚拟线程

2024-08-30 08:50:00

2022-02-17 09:24:11

TypeScript编程语言javaScrip

2024-01-16 07:46:14

FutureTask接口用法

2013-09-09 13:57:12

互联网周刊

2020-06-30 10:45:28

Web开发工具

2013-06-28 14:30:26

棱镜计划棱镜棱镜监控项目

2020-11-02 16:36:03

机器学习人工智能计算机

2011-08-16 09:25:36

点赞
收藏

51CTO技术栈公众号