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

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

创新互联建站主营井冈山网站建设的网络公司,主营网站建设方案,App定制开发,井冈山h5小程序定制开发搭建,井冈山网站营销推广欢迎井冈山等地区企业咨询

数据准备

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

建表语句如下

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

新建 Spring Boot 工程

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

引入 Pom配置

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

编写配置文件 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.     public Integer getId() {
  18.         return id;
  19.     }
  20.     public void setId(Integer id) {
  21.         this.id = id;
  22.     }
  23.     public String getUserName() {
  24.         return userName;
  25.     }
  26.     public void setUserName(String userName) {
  27.         this.userName = userName;
  28.     }
  29.     public String getPassword() {
  30.         return password;
  31.     }
  32.     public void setPassword(String password) {
  33.         this.password = password;
  34.     }
  35.     public Integer getSex() {
  36.         return sex;
  37.     }
  38.     public void setSex(Integer sex) {
  39.         this.sex = sex;
  40.     }
  41.     public Date getLastLoginTime() {
  42.         return lastLoginTime;
  43.     }
  44.     public void setLastLoginTime(Date lastLoginTime) {
  45.         this.lastLoginTime = lastLoginTime;
  46.     }
  47. }

新建仓库接口类 UserRepository

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

  1. 使用 @Repository 注解
  2. 继承 JPARepository
  3. UserRepository 不需要编写任何代码,即可实现增删查改
 
 
 
 
  1. @Repository
  2. public interface UserRepository extends JPARepository {
  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 optionalUserDO=userRepository.findById(1);
  4.         if(optionalUserDO.isPresent()){
  5.             UserDO userDO=optionalUserDO.get();
  6.             System.out.println("testFind user"+userDO.getUserName());
  7.         }
  8.     }

查询多个数据

 
 
 
 
  1. @Test
  2.     public void testFindAll(){
  3.         List 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 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.     }

删除数据

 
 
 
 
  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;
  4. }

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.     public Integer getUserId() {
  10.         return userId;
  11.     }
  12.     public void setUserId(Integer userId) {
  13.         this.userId = userId;
  14.     }
  15.     public Integer getRoleId() {
  16.         return roleId;
  17.     }
  18.     public void setRoleId(Integer roleId) {
  19.         this.roleId = roleId;
  20.     }
  21. }

分享标题:值不值|三分钟搞定Jpa?值不值!
文章网址:http://www.shufengxianlan.com/qtweb/news12/75862.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联