日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JPA结合querydsl使用

發布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JPA结合querydsl使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

依賴

配置連接數據庫

寫實體類

如果出現Cannot resolve table 'XXX'

?Repository層

控制層?

不使用分頁

?使用分頁

?增

通過save更改

自己寫sql語句

聯表查詢

自動生成(增加,修改)日期

整合querydsl

依賴

生成Q類

?Repository繼承qsl

實例


依賴

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>

配置連接數據庫

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

寫實體類

因為屬于嚴格ORM,所以一定要一一對應。

目前先這樣,后邊會進行聯表查詢、時間自動寫入。

/*** @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; }

如果出現Cannot resolve table 'XXX'

只需要先用idea連接數據庫選擇數據源就可以了

?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執行");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);

聯表查詢

把上邊實體類的userid更換

// // @Column(name = "user_id") // private int userId;@ManyToOne@JoinColumn(name = "user_id")private Muser muser;

?之后就可以測試查詢,就能成功

自動生成(增加,修改)日期

修改上邊實體

// @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;

在實體類上加注解@EntityListeners(AuditingEntityListener.class)

在啟動類上加注解@EnableJpaAuditing

阿里規范每個表都要有創建時間和更新時間,所以我們可以把時間提取出來一個抽象類,讓實體去繼承

@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>{}

實例

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

如有疑問可私信

總結

以上是生活随笔為你收集整理的JPA结合querydsl使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。