JPA结合querydsl使用
生活随笔
收集整理的這篇文章主要介紹了
JPA结合querydsl使用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
依賴
配置連接數(shù)據(jù)庫
寫實(shí)體類
如果出現(xiàn)Cannot resolve table 'XXX'
?Repository層
控制層?
查
不使用分頁
?使用分頁
?增
刪
改
通過save更改
自己寫sql語句
聯(lián)表查詢
自動生成(增加,修改)日期
整合querydsl
依賴
生成Q類
?Repository繼承qsl
實(shí)例
依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>配置連接數(shù)據(jù)庫
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/vueblog?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8 spring.datasource.username=**** spring.datasource.password=**** spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver寫實(shí)體類
因?yàn)閷儆趪?yán)格ORM,所以一定要一一對應(yīng)。
目前先這樣,后邊會進(jìn)行聯(lián)表查詢、時間自動寫入。
/*** @author 劉通* @date 2022年01月15日 20:44*/ @Entity @Table(name = "m_blog") @Data @AllArgsConstructor @NoArgsConstructor @ToString public class Mblog {@Id@GeneratedValue(strategy = GenerationType.AUTO)private Integer id;@Column(name = "user_id")private int userId;@Column(name = "title")private String title;@Column(name = "description")private String description;@Column(name = "content")private String content;@Column(name = "created")private Date created;@Column(name = "status")private int status; }/*** @author 劉通* @date 2022年01月15日 20:25*/ @Entity @Table(name = "m_user") @Data @AllArgsConstructor @NoArgsConstructor @ToString public class Muser {@Id@GeneratedValue(strategy = GenerationType.AUTO)private Integer id;@Column(name = "username")private String username;@Column(name = "avatar")private String avatar;@Column(name = "email")private String email;@Column(name = "password")private String password;@Column(name = "status")private int status;@Column(name = "created")private Date created;@Column(name = "last_login")private Date lastLogin; }如果出現(xiàn)Cannot resolve table 'XXX'
只需要先用idea連接數(shù)據(jù)庫,選擇數(shù)據(jù)源就可以了
?Repository層
/*** @author 劉通* @date 2021年09月17日 19:27*/ public interface TestUserRepository extends JpaRepository<Muser,Integer>, PagingAndSortingRepository<Muser,Integer>, JpaSpecificationExecutor<Muser>{}控制層?
查
不使用分頁
@AutowiredTestUserRepository testUserRepository;@GetMapping("getList")public List<Muser> a(){List<Muser> all = testUserRepository.findAll();return all;}?使用分頁
@GetMapping("get")public Page<Muser> a(@PageableDefault(size = 10) Pageable page){System.out.println("test執(zhí)行");Page<Muser> all = testUserRepository.findAll(page);return all;}?請求案例:
? 注意:page從0開始
localhost:8080/get?page=0&size=5
?增
@PostMapping("add")public Muser add(@RequestBody Muser muser){testUserRepository.save(muser);return muser;}刪
@PostMapping("delete/{id}")public String add(@PathVariable int id){testUserRepository.deleteById(id);return "刪除成功";}改
通過save更改
id要吻合
@PostMapping("update")public Muser update(@RequestBody Muser muser){testUserRepository.save(muser);return muser;}自己寫sql語句
// 在刪除/更改語句中要用@Modifying @Modifying // 用sql語句就要開啟nativeQuery @Query(nativeQuery = true,value = "xxxxxxxxx") public void updateById(int id);聯(lián)表查詢
把上邊實(shí)體類的userid更換
// // @Column(name = "user_id") // private int userId;@ManyToOne@JoinColumn(name = "user_id")private Muser muser;?之后就可以測試查詢,就能成功
自動生成(增加,修改)日期
修改上邊實(shí)體
// @Column(name = "created")// private Date created;// @Column(name = "last_login")// private Date lastLogin;@Column(name = "created")@CreatedDate@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date created;@Column(name = "last_login")@LastModifiedDate@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date lastLogin;在實(shí)體類上加注解@EntityListeners(AuditingEntityListener.class)
在啟動類上加注解@EnableJpaAuditing
阿里規(guī)范每個表都要有創(chuàng)建時間和更新時間,所以我們可以把時間提取出來一個抽象類,讓實(shí)體去繼承
@MappedSuperclass @EntityListeners(AuditingEntityListener.class) @Data public abstract class AbDao {@Column(name = "created") //自定義通用就好@CreatedDate@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")private Date created;@Column(name = "last_login")//自定義通用就好@LastModifiedDate@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")private Date lastLogin; }整合querydsl
依賴
<dependency><groupId>com.querydsl</groupId><artifactId>querydsl-jpa</artifactId><scope>provided</scope></dependency><dependency><groupId>com.querydsl</groupId><artifactId>querydsl-apt</artifactId><scope>provided</scope></dependency><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>com.mysema.maven</groupId><artifactId>apt-maven-plugin</artifactId><version>1.1.3</version><executions><execution><goals><goal>process</goal></goals><configuration>//輸出目錄<outputDirectory>target/generated-sources/java</outputDirectory><processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor></configuration></execution></executions></plugin></plugins></build>生成Q類
直接clean+compile
或者?
?Repository繼承qsl
public interface TestUserRepository extends JpaRepository<Muser,Integer>, PagingAndSortingRepository<Muser,Integer>, JpaSpecificationExecutor<Muser>,QuerydslPredicateExecutor<Muser>{}實(shí)例
public Predicate getContion(){QMuser muser = QMuser.muser;BooleanExpression between = muser.id.between(0, 5);BooleanExpression sd = muser.username.contains("sd").and(between);return sd;}@GetMapping("getList")public List<Muser> a(){List<Muser> all = (List<Muser>) testUserRepository.findAll(getContion());return all;}如有疑問可私信
總結(jié)
以上是生活随笔為你收集整理的JPA结合querydsl使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ 1001 狼捉兔子
- 下一篇: Unity中文乱码的解决方法