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使用相关推荐
- Spring JPA整合QueryDSL
前言 Spring JPA是目前比较常用的ORM解决方案,但是其对于某些场景并不是特别的方便,例如查询部分字段,联表查询,子查询等. 而接下来我会介绍与JPA形成互补,同时也是与JPA兼容得很好的框架 ...
- springboot整合JPA+MYSQL+queryDSL数据增删改查
Spring Boot Jpa 是 Spring 基于 ORM 框架.Jpa 规范的基础上封装的一套 Jpa 应用框架,可使开发者用极简的代码即可实现对数据的访问和操作.它提供了包括增删改查等在内的常 ...
- Spring Data Jpa使用QueryDsl接口出现的一些问题
1.QuerydslPredicateExecutor当实现此接口时,如果出现什么什么类没有找到的时候,请确认相关的querydsl依赖是否已经添加到maven依赖中 <dependency&g ...
- Spring boot JPA+Gradle+QueryDSL 完美配置生成Q文件依赖
1. 环境(理论上不限) IDEA 2019.3.5 springboot 2.3.0 gradle 6.3 querydsl 4.2.1 JDK 1.8 2. 核心配置(build.gradle ) ...
- jpa整合querydsl实现简单查询以及左联查询
用意: 为了解决jpa复杂查询以及多表查询难以的问题,故找到该神器(querydsl),使用该框架后,可以使jpa像mybatis一样灵活,随心所欲.下面的代码只展示了常用的mysql操作,包含动态查 ...
- JPA 和 QueryDSL
querydsl极简入门 QueryDSL+gradle+idea spring boot-jpa整合QueryDSL 关于 QueryDSL 配置和使用(详细) querydls关联查询 query ...
- JPA 复杂查询 - Querydsl
添加依赖 <!--query dsl --> <dependency> <groupId>com.querydsl</groupId> <art ...
- Spring Data JPA REST Query QueryDSL
案例概述 在本教程中,我们将研究使用Spring Data JPA和Querydsl为REST API构建查询语言. 在本系列的前两篇文章中,我们使用JPA Criteria和Spring Data ...
- Spring Data JPA 实战
课程介绍 <Spring Data JPA 实战>内容是基于作者学习和工作中实践的总结和升华,有一句经典的话:"现在的开发人员是站在巨人的肩上,弯道超车".因现在框架越 ...
- java dsl框架_Spring Boot整合QueryDSL的实现示例
之前研究Jooq,今天来研究一下搭配JPA的QueryDSL吧. 简介 Querydsl是一个Java开源框架用于构建类型安全的SQL查询语句.它采用API代替拼凑字符串来构造查询语句.可跟 Hibe ...
最新文章
- nginx try_files的理解
- bzoj 1492: [NOI2007]货币兑换Cash
- 自己动手实现arm函数栈帧回溯【转】
- golang mysql update_golang mysql insert 和 update使用举例
- 无人驾驶的分级以及产品化后会带来的改善
- 浅评-我所用的输入法
- Python3 高级用法
- 技术员 Ghost Win10 x86 装机版/纯净版 201710
- 如何改变报表在页面显示的大小和位置?
- 基于ASP.NET的助学贷款管理系统_WEB管理系统_SQLServer数据库应用
- jupyter添加新的语言包
- leetcode 5390. 数青蛙(C++)
- 利用代码将网站预测蛋白稳定性突变自动化
- matlab中muw,matlab – 获取属于凸包的点
- 关于 nscd,nslcd 和 sssd 套件的综述
- python基础 多点坐标 绘制折线图 计算两点距离
- 免费的PDF在线合并工具,拿走不谢!
- 学习牛津书的免费网站
- Oracle数据库综合试题
- 转:美国我来了:飞去美国各个程序最全解读
热门文章
- 记一次SQLServer2019安装和卸载问题的解决过程
- 位图转矢量图工具,快和模糊图片说白白
- WIN7运行命令大全
- 超好用的两行java代码能获取几乎所有文件的contentType,返回前端能在浏览器上直接打开
- Visual studio2012密钥 vs2012密钥 本人亲测 真实有效
- 口袋妖怪c语言代码大全,口袋妖怪漆黑的魅影金手指代码 游戏代码大全分享
- Android: eoeAndroid ~
- 魔兽单机服务器设置文件,魔兽世界单机版局域网的架设方法-20210311142535.doc-原创力文档...
- 2021年9月再次更新-日立电梯,艾默生变频器维修图纸,原理图
- qq空间html倒计时,空间倒计时flash代码,有图