SSM 框架整合之mybatis查询的两个例子
1 准备工作
1.1 创建查询工作所需要的实体类Emp
package com. entity ;
import lombok. AllArgsConstructor ;
import lombok. Data ;
import lombok. NoArgsConstructor ;
import tk. mybatis. mapper. annotation. KeySql ;
import javax. persistence. Id ;
import java. io. Serializable ;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Emp {
@Id
@KeySql ( useGeneratedKeys = true )
private Integer empno;
private String ename;
private String mgr;
private String job;
private String hiredate;
private Double sal;
private Double comm;
private Integer deptno;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
1.2 创建接口EmpMapper并继承Mapper接口
package com. mapper ;
import com. entity. Emp ;
import tk. mybatis. mapper. common. Mapper ;
public interface EmpMapper extends Mapper < Emp > {
}
1.3 在测试类中通过@Autowired注解注入属性em(用于测试)
@Autowired
EmpMapper em;
2 使用通用mapper自带的方法查询
2.1 题目
查询部门编号为10或30部门 并且工资要大于2800的员工信息
2.2 测试方法
2.2.1 分析
查询的sql语句如下所示
SELECT * FROM emp WHERE (deptno=10 OR deptno=20) AND (sal>2800)
而通用mapper的条件查询中的一个Example.Criteria对象就是一个(),因此就会需要两个对象
他们两者之间是通过Example对象.and()方法拼接在一起的
2.2.2 创建一个Example对象(用于存放复杂的查询条件)
Example ex= new Example ( Emp . class ) ;
2.2.3 创建Example.Criteria c用于设置第一个括号里面的所需要的查询条件
Example. Criteria c= ex. createCriteria ( ) ;
c. andEqualTo ( "deptno" , 10 ) ;
c. orEqualTo ( "deptno" , 30 ) ;
2.2.4 创建Example.Criteria c用于设置员工薪水大于2000的条件
Example. Criteria c2= ex. createCriteria ( ) ;
c2. andGreaterThan ( "sal" , "2000" ) ;
2.2.5 通过Example对象将两个条件拼接起来
ex. and ( c2) ;
2.2.6 实体类对象使用条件构造器去查询并打印结果
List < Emp > list= em. selectByExample ( ex) ;
list. forEach ( System . out:: println ) ;
2.2.7 完整测试方法代码
public void t1 ( ) {
Example ex= new Example ( Emp . class ) ;
Example. Criteria c= ex. createCriteria ( ) ;
c. andEqualTo ( "deptno" , 10 ) ;
c. orEqualTo ( "deptno" , 30 ) ;
Example. Criteria c2= ex. createCriteria ( ) ;
c2. andGreaterThan ( "sal" , "2000" ) ;
ex. and ( c2) ;
List < Emp > list= em. selectByExample ( ex) ;
list. forEach ( System . out:: println ) ;
}
2.2.8 测试运行截图
3 自定义方法查询(需要用到mysql函数)
3.1 题目:使用year()函数查询指定入职年份的前三条员工数据
3.2 测试方法
3.2.1 分析
查询的sql语句如下所示
select * from emp where year ( hiredate) = 查询的年份
3.2.2 在接口EmpMapper中创建getByHiredate方法
List < Emp > getByHiredate ( String year) ;
3.2.3 在resource/mapper资源文件夹下创建EmpMapper.xml配置文件,并里面填写如下内容
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
< mapper namespace = " com.mapper.EmpMapper" >
< select id = " getByHiredate" resultType = " Emp" >
select * from emp where year(hiredate)=#{year}
select>
mapper>
3.2.4 使用pageHelper插件配置分页的开始页码和每页展示条数
PageHelper . startPage ( 1 , 3 ) ;
3.2.5 查询并打印结果
em. getByHiredate ( "1981" ) . forEach ( System . out:: println ) ;
3.2.6 完整的测试代码
public void a ( ) {
PageHelper . startPage ( 1 , 3 ) ;
em. getByHiredate ( "1981" ) . forEach ( System . out:: println ) ;
}
3.3 测试方法运行截图