您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“如何快速搞定Jpa”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何快速搞定Jpa”吧!
數(shù)據(jù)準(zhǔn)備
數(shù)據(jù)庫使用的數(shù)據(jù)表設(shè)計(jì)如下
建表語句如下
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 填寫包名,項(xiàng)目名,選擇下一步。選擇依賴,Spring web starter 前面打鉤,sql 選項(xiàng)為 Spring Data Jpa,MySql 項(xiàng)目名任意
引入 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: #通用的數(shù)據(jù)源配置 datasource: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/demo_test?useSSL=false&useUnicode=true&characterEncoding=utf8 username: root password: 123 jpa: #這個參數(shù)是在建表的時(shí)候,將默認(rèn)的存儲引擎切換為 InnoDB 用的 database-platform: org.hibernate.dialect.MySQL5InnoDBDialect #配置在日志中打印出執(zhí)行的 SQL 語句信息。 show-sql: true hibernate: #配置指明在程序啟動的時(shí)候要刪除并且創(chuàng)建實(shí)體類對應(yīng)的表 ddl-auto: create
編寫示例代碼
新建實(shí)體對象 UserDao.java
實(shí)體類,需要使用 @Entity 注解標(biāo)注 需要對實(shí)體類的屬性進(jìn)行標(biāo)注,使用 @Id 標(biāo)注組件 使用 @Column 標(biāo)注非主鍵
/** * 用戶實(shí)體類 * */ @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 接口,需要注意
使用 @Repository 注解
繼承 JPARepository
UserRepository 不需要編寫任何代碼,即可實(shí)現(xiàn)增刪查改
@Repository public interface UserRepository extends JPARepository<UserDO,Integer> { }
編寫測試用例
在
src/test/java/com/fishpro/jpa/
下,新增加
UserRepositoryTest.java
使用
@RunWith(SpringRunner.class)
和
@SpringBootTest
注解標(biāo)注類。
@RunWith(SpringRunner.class) @SpringBootTest public class UserRepositoryTest{ }
新增加用戶數(shù)據(jù)
/** * 初始化一個對象 UserDO 測試Insert過程 * */ @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); }
查詢單個用戶數(shù)據(jù)
@Test public void testFind(){ Optional<UserDO> optionalUserDO=userRepository.findById(1); if(optionalUserDO.isPresent()){ UserDO userDO=optionalUserDO.get(); System.out.println("testFind user"+userDO.getUserName()); } }
查詢多個數(shù)據(jù)
@Test public void testFindAll(){ List<UserDO> list=userRepository.findAll(); for (UserDO user:list ) { System.out.println("user_name:"+user.getUserName()); } }
更新數(shù)據(jù)
@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()); } }
刪除數(shù)據(jù)
@After public void after(){ userRepository.deleteById(1); userRepository.deleteById(2); userRepository.deleteById(3); }
聯(lián)合主鍵
例如定義表中userId,roleId 都是主鍵,此時(shí)這樣設(shè)置
1.定義一個主鍵類
public class UserRoleKey implements Serializable { private Integer userId; private Integer roleId; }
2.定義實(shí)體類
@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”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。