1 数据库准备

使用MySQL数据库。

1.1 创建名为learnsql的数据库

建库语句

create datebase learnsql;

使用刚刚创建的learnsql数据库

use learnsql;

1.2 建表

数据表使用常用的职员信息表,分别为:

部门表:dept

职员表: emp

薪水等级表: salgrade

1.2.1 创建部门表

DROP TABLE IF EXISTS `dept`;

CREATE TABLE `dept` (

`deptno` int(10) NOT NULL,

`dname` varchar(14) DEFAULT NULL,

`loc` varchar(13) DEFAULT NULL,

PRIMARY KEY (`deptno`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

LOCK TABLES `dept` WRITE;

INSERT INTO `dept` VALUES (10,'ACCOUNTING','NEW YORK'),(20,'RESEARCHING','DALLAS'),(30,'SALES','CHICAGO'),(40,'OPERATIONS','BOSTON');

UNLOCK TABLES;

1.2.2 创建职员表

DROP TABLE IF EXISTS `emp`;

CREATE TABLE `emp` (

`empno` int(4) NOT NULL,

`ename` varchar(10) DEFAULT NULL,

`job` varchar(9) DEFAULT NULL,

`mgr` int(4) DEFAULT NULL,

`hiredate` date DEFAULT NULL,

`sal` double(7,2) DEFAULT NULL,

`comm` double(7,2) DEFAULT NULL,

`deptno` int(2) DEFAULT NULL,

PRIMARY KEY (`empno`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

LOCK TABLES `emp` WRITE;

INSERT INTO `emp` VALUES (7369,'SIMITH','CLERK',7902,'1980-12-17',800.00,NULL,20),(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600.00,300.00,30),(7521,'WARD','SALESMAN',7698,'1981-02-22',1250.00,500.00,30),(7566,'JONES','MANAGER',7839,'1981-04-02',2975.00,NULL,20),(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250.00,1400.00,30),(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850.00,NULL,30),(7782,'CLARK','MANAGER',7839,'1981-06-09',2450.00,NULL,10),(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000.00,NULL,20),(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000.00,NULL,10),(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500.00,NULL,30),(7876,'ADAMS','CLERK',7788,'1987-05-23',1100.00,NULL,20),(7900,'JAMES','CLERK',7698,'1981-12-03',950.00,NULL,30),(7902,'FORD','ANALYST',7566,'1981-12-03',3000.00,NULL,20),(7934,'MILLER','CLERK',7782,'1982-01-23',1300.00,NULL,10);

UNLOCK TABLES;

1.2.3 创建薪水等级表

DROP TABLE IF EXISTS `salgrade`;

CREATE TABLE `salgrade` (

`grade` int(11) DEFAULT NULL,

`losal` int(11) DEFAULT NULL,

`hisal` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

LOCK TABLES `salgrade` WRITE;

INSERT INTO `salgrade` VALUES (1,700,1200),(2,1201,1400),(3,1401,2000),(4,2001,3000),(5,3001,5000);

UNLOCK TABLES;

2 编写Java代码

2.1 配置文件

#数据源地址

spring.datasource.url=jdbc:mysql://localhost:3306/learnsql?characterEncoding=utf8

#用户名

spring.datasource.username=root

#密码

spring.datasource.password=123456

spring.jpa.show-sql=true

spring.jpa.hibernate.ddl-auto=update

#端口

server.port=8089

2.2 创建实体

首先创建与数据表对应的实体。

2.2.1 部门表实体

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.Table;

import lombok.Data;

@Entity

@Table(name="dept")

public @Data class Dept {

@Id

@Column(name="deptno")

private Long deptno;

@Column(name="dname")

private String dname;

@Column(name="loc")

private String loc;

}

2.2.2 职员表实体

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.Table;

import lombok.Data;

@Entity

@Table(name="emp")

public @Data class Emp {

@Id

@Column(name="empno")

@GeneratedValue(strategy=GenerationType.IDENTITY)

private Long empno;

@Column(name="ename")

private String ename;

@Column(name="job")

private String job;

@Column(name="mgr")

private String mgr;

@Column(name="hiredate")

private Date hireDate;

@Column(name="sal")

private Double sal;

@Column(name="comm")

private Double comm;

@Column(name="deptno")

private Long deptno;

}

2.2.3 薪水等级表实体

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.Table;

@Entity

@Table(name="salgrade")

public class SalGrade {

@Id

@Column(name="grade")

private Long grade;

@Column(name="losal")

private Long losal;

@Column(name="hisal")

private Long hisal;

}

2.3 创建repository

要使用Querydsl在创建repository时,一定要继承QueryDslPredicateExecutor接口。

2.3.1 部门表对应的repository

import org.springframework.data.jpa.repository.JpaRepository;

import org.springframework.data.querydsl.QueryDslPredicateExecutor;

import com.cha.querydsl.entity.Dept;

public interface DeptRepository extends JpaRepository, QueryDslPredicateExecutor{

}

2.3.2 职员表对应的repository

import org.springframework.data.jpa.repository.JpaRepository;

import org.springframework.data.querydsl.QueryDslPredicateExecutor;

import com.cha.querydsl.entity.Emp;

public interface EmpRepository extends JpaRepository,QueryDslPredicateExecutor{

}

2.3.3 薪水等级表对应的repository

import org.springframework.data.jpa.repository.JpaRepository;

import org.springframework.data.querydsl.QueryDslPredicateExecutor;

import com.cha.querydsl.entity.SalGrade;

public interface SalGradeRepository extends JpaRepository, QueryDslPredicateExecutor{

}

2.4 创建service

import javax.annotation.PostConstruct;

import javax.persistence.EntityManager;

import javax.persistence.PersistenceContext;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.EnableAspectJAutoProxy;

import org.springframework.stereotype.Service;

import com.cha.querydsl.entity.Emp;

import com.cha.querydsl.repository.DeptRepository;

import com.cha.querydsl.repository.EmpRepository;

import com.cha.querydsl.repository.SalGradeRepository;

import com.cha.querydsl.entity.QEmp;

import com.querydsl.core.types.Predicate;

import com.querydsl.jpa.impl.JPAQueryFactory;

@Service

public class DESService {

@Autowired

private DeptRepository deptRepository;

@Autowired

private EmpRepository empRepository;

@Autowired

private SalGradeRepository salGradeRepository;

@PersistenceContext

private EntityManager entityManager;

private JPAQueryFactory queryFactory;

@PostConstruct

public void init() {

queryFactory = new JPAQueryFactory(entityManager);

}

public Emp findEmp(String userName) {

QEmp qEmp = QEmp.emp;

//这一句是核心

return queryFactory.selectFrom(qEmp).where(qEmp.ename.eq(userName)).fetchOne();

}

}

2.5 创建controller

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import com.cha.querydsl.entity.Emp;

import com.cha.querydsl.service.DESService;

@RestController

@RequestMapping("/index")

public class DESController {

@Autowired

private DESService service;

@RequestMapping("/sal")

public Emp findEmp() {

String userName = "KING";

Emp emp = service.findEmp(userName);

return emp;

}

}

2.6 在浏览器调用接口

在浏览器中输入

http://localhost:8089/index/sal

浏览器显示如下图

querydsl.PNG

dsl mysql_极简Querydsl入门相关推荐

  1. 合适学习人工智能的小白的一本书《极简AI入门:一本书读懂人工智能思维与应用》

    今天看了一本书<极简AI入门:一本书读懂人工智能思维与应用> 对于初学人工智能的小白来说,应该是非常容易看得懂的,书里罗列了人工智能需要学习的各个技能,可以把这本书当作学习人工智能的目录( ...

  2. Underscore源码阅读极简版入门

    看了网上的一些资料,发现大家都写得太复杂,让新手难以入门.于是写了这个极简版的Underscore源码阅读. 源码: github.com/hanzichi/un- 一.架构的实现 1.1:架构 (f ...

  3. Linux极简快速入门|Linux操作系统(四)

    Linux操作系统(四) 目录 Putty的使用 进程相关命令 Linux系统管理命令 passwd.shadow文件内容介绍 一.Putty的使用 putty是支持Telnet.SSH.rlogin ...

  4. PaperNotes(15)-图神经网络、PyG极简版入门笔记

    图神经网络概况 1.GNN,GCN,GE的区别 2.图卷积的通式--矩阵该如何作用 2.1实现1 2.2实现2 2.3实现3 3.PyTorch geometric 3.1 PyG内置数据集 3.1. ...

  5. c++ 使用nacos_想自学Maven?推荐Maven极简高速入门及常规使用

    [Java实战技术]原创,专注分享Java基础原理分析.实战技术.微服务架构.分布式系统构建,诚邀点赞关注! 前言 笔者的工作经历中使用过Ant.Maven和Gradle,如果让笔者选择,笔者会首选G ...

  6. getway极简落地入门

    在spring cloud netflix时使用zuul作为官网,但是随着zuul2.0的多次跳票和getway异军突起.getway已经是一款主流的产品了,同时springcloud alibaba ...

  7. Apache SkyWalking Window系统极简搭建入门和IDEA配置agent

    文章目录 1. 搭建OAP 1.1 下载软件包 1.2 解压并启动前后端服务 1.3 打开网站 2. IDEA项目配置Agent 2.1 下载软件包 2.2 解压 2.3 IDEA配置 简要介绍在Wi ...

  8. 《MongoDB极简教程》第一章 NoSQL简史 amp; MongoDB安装amp;环境配置

    MongoDB 是一款开源的文档数据库,并且是业内领先的 NoSQL 数据库,用 C++ 编写而成. NoSQL (NoSQL = Not Only SQL ),意即"不仅仅是SQL&quo ...

  9. 《MongoDB极简教程》第一章 NoSQL简史 MongoDB安装环境配置

    MongoDB 是一款开源的文档数据库,并且是业内领先的 NoSQL 数据库,用 C++ 编写而成. NoSQL (NoSQL = Not Only SQL ),意即"不仅仅是SQL&quo ...

最新文章

  1. 根据keyName(如:result.data.name),无限深度遍历获取keyValue
  2. Electron的代码调试
  3. 号称能自动编程60年,“进化计算”究竟进化到哪一步了?
  4. sharepoint指定的人可以看到列表项
  5. 决策树模型组合之随机森林与GBDT
  6. MVC基础知识-View
  7. leetcode 224. 基本计算器(栈)
  8. 除夕快乐 | 2月11日 星期四 | B站发文回应热搜风波;美团上线“团好货”独立App;国内首家自动驾驶企业获网约车运营许可...
  9. 关于网站备案的44个问题
  10. paip.程序不报错自动退出的解决
  11. 卡塞格林光学系统_卡塞格林红外光学系统装调技术研究
  12. ui设计师必须了解的13中移动app界面设计的基础知识
  13. 网络劫持问题都应该如何解决?
  14. 计算网路地址,广播地址,第一位和最后一位可用地址,可用的IP地址
  15. 微信消息记录如何恢复
  16. 深圳买房负担全球第一:记得在泡沫破灭前把房子卖掉
  17. Spring Boot【定制化】~ AOP统一结果处理以及异常拦截
  18. 什么软件可以修改服务器数据,恢复是服务器数据有什么软件好?
  19. 【无人驾驶系列九】无人驾驶系统安全
  20. Revit二开——Revit族“连接件说明“参数的获取

热门文章

  1. 计算机程序设计员理论试题答案,计算机程序设计员理论试题库.doc
  2. C语言程序设计谭浩强(第四版)部分课后习题作答——第七章——7.8,7.10,7.16
  3. 使用Smooth Navigational Menu实现动态菜单
  4. 基于java前行国家公务员模拟笔试系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  5. 测试小白基于java的selenium自动化测试环境搭建
  6. C# 条码打印的几种方式
  7. Android Dialog中加载GIF
  8. lammps输出MSD(均方根位移)详解及示例教程
  9. 使用JDBC操作数据库(入门介绍)
  10. 【Allegro 17.4软件操作保姆级教程六】布线操作基础之一