溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何快速搞定Jpa

發(fā)布時(shí)間:2021-10-23 17:15:26 來源:億速云 閱讀:143 作者:iii 欄目:web開發(fā)

本篇內(nèi)容主要講解“如何快速搞定Jpa”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何快速搞定Jpa”吧!

數(shù)據(jù)準(zhǔn)備

數(shù)據(jù)庫使用的數(shù)據(jù)表設(shè)計(jì)如下

如何快速搞定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  填寫包名,項(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 接口,需要注意

  1. 使用 @Repository 注解

  2. 繼承 JPARepository

  3. 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í)!

向AI問一下細(xì)節(jié)

免責(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)容。

jpa
AI