文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何快速搞定Jpa

2024-04-02 19:55

关注

本篇内容主要讲解“如何快速搞定Jpa”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何快速搞定Jpa”吧!

数据准备

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

如何快速搞定Jpa

建表语句如下

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

新建 Spring Boot 工程

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

引入 Pom配置

<dependencies>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-data-jpa</artifactId>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-webflux</artifactId>         </dependency>          <dependency>             <groupId>mysql</groupId>             <artifactId>mysql-connector-java</artifactId>             <scope>runtime</scope>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-test</artifactId>             <scope>test</scope>         </dependency>         <dependency>             <groupId>io.projectreactor</groupId>             <artifactId>reactor-test</artifactId>             <scope>test</scope>         </dependency>     </dependencies>

编写配置文件 application.yml

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

编写示例代码

新建实体对象 UserDao.java

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

 @Entity @Table(name="t_user") public class UserDO {     @Id     private Integer id;     @Column(name="user_name",length = 200)     private String userName;     @Column(name="password",length = 200)     private String password;     @Column(name="sex")     private Integer sex;     @Column(name="last_login_time")     private Date lastLoginTime;      public Integer getId() {         return id;     }      public void setId(Integer id) {         this.id = id;     }      public String getUserName() {         return userName;     }      public void setUserName(String userName) {         this.userName = userName;     }      public String getPassword() {         return password;     }      public void setPassword(String password) {         this.password = password;     }      public Integer getSex() {         return sex;     }      public void setSex(Integer sex) {         this.sex = sex;     }      public Date getLastLoginTime() {         return lastLoginTime;     }      public void setLastLoginTime(Date lastLoginTime) {         this.lastLoginTime = lastLoginTime;     } }

新建仓库接口类 UserRepository

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

  1. 使用 @Repository 注解

  2. 继承 JPARepository

  3. UserRepository 不需要编写任何代码,即可实现增删查改

@Repository public interface UserRepository extends JPARepository<UserDO,Integer> {  }

编写测试用例

src/test/java/com/fishpro/jpa/

下,新增加

UserRepositoryTest.java

使用

@RunWith(SpringRunner.class)

@SpringBootTest

注解标注类。

@RunWith(SpringRunner.class) @SpringBootTest public class UserRepositoryTest{  }

新增加用户数据

     @Before     public void before(){         UserDO userDO=new UserDO();         userDO.setId(1);         userDO.setUserName("fishpro");         userDO.setSex(1);         userDO.setLastLoginTime(new Date());         userDO.setPassword("passWord");         userRepository.save(userDO);     }

查询单个用户数据

@Test     public void testFind(){         Optional<UserDO> optionalUserDO=userRepository.findById(1);         if(optionalUserDO.isPresent()){             UserDO userDO=optionalUserDO.get();             System.out.println("testFind user"+userDO.getUserName());         }      }

查询多个数据

@Test     public void testFindAll(){         List<UserDO> list=userRepository.findAll();         for (UserDO user:list              ) {             System.out.println("user_name:"+user.getUserName());         }     }

更新数据

@Test     public void testUpdate(){         Optional<UserDO> optionalUserDO=userRepository.findById(1);         if(optionalUserDO.isPresent()){             UserDO userDO=optionalUserDO.get();             userDO.setUserName("fishpro001");             userRepository.save(userDO);             System.out.println("testFind user"+userDO.getUserName());         }      }

删除数据

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

联合主键

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

1.定义一个主键类

public class UserRoleKey implements Serializable {     private Integer userId;     private Integer roleId; }

2.定义实体类

@Entity @Table(name="t_user_role") @IdClass(UserRoleKey.class) //注意这里是引入了 定义的符合主键类 public class UserRoleDO {     @Id     private Integer userId;     @Id     private Integer roleId;      public Integer getUserId() {         return userId;     }      public void setUserId(Integer userId) {         this.userId = userId;     }      public Integer getRoleId() {         return roleId;     }      public void setRoleId(Integer roleId) {         this.roleId = roleId;     } }

到此,相信大家对“如何快速搞定Jpa”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯