通用Mapper — 快速入门
>>>上一系列我们介绍完了MybatisPlus的使用
>>>接下来我们来介绍一下Mybatis中的最后一个内容–>通用Mapper
***作用:
替我们生成常用增删改查操作的 SQL 语句。
***代码官方发布地址:
https://gitee.com/free
https://gitee.com/free/Mapper/wikis/1.1-java?parent=1.integration
***前置知识:
快速入门:
一丶创建表
二丶创建实体类
三丶加入依赖
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.0.0-beta3</version>
</dependency>
四丶修改 Spring 配置文件(其他配置内容和之前一致)
<!-- 整合通用Mapper所需要做的配置修改: -->
<!-- 原始全类名:org.mybatis.spring.mapper.MapperScannerConfigurer -->
<!-- 通用Mapper使用:tk.mybatis.spring.mapper.MapperScannerConfigurer -->
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="life.cbuc.mappers"/>
</bean>
五丶自定义的Mapper需要继承通用 Mapper 提供的核心接口:Mapper<Employee>
/**
* 具体操作数据库的Mapper接口,需要继承通用Mapper提供的核心接口:Mapper<Employee>
* 泛型类型就是实体类的类型
* @author Lenovo
*
*/
public interface EmployeeMapper extends Mapper<Employee> {}
六丶常用注解
1)@Table 注解
作用:建立实体类和数据库表之间的对应关系。
默认规则:实体类类名首字母小写作为表名。
Employee 类→employee 表。
用法:在@Table 注解的 name 属性中指定目标数据库表的表名
2)@Column 注解
作用:建立实体类字段和数据库表字段之间的对应关系。
默认规则:
实体类字段:驼峰式命名
数据库表字段:使用“_”区分各个单词用法:在@Column 注解的 name 属性中指定目标字段的字段名
3)@Id 注解
作用:明确标记和数据库表中主键字段对应的实体类字段。
4)@GeneratedValue 注解
作用:让通用 Mapper 在执行 insert 操作之后将数据库自动生成的主键值回写到实 体类对象中。
5)@Transient 主键
作用:用于标记不与数据库表字段对应的实体类字段。
七丶常用方法
1)selectOne 方法
@Test
public void testSelectOne() {
//1.创建封装查询条件的实体类对象
Employee employeeQueryCondition = new Employee(null, "cbuc", 5500, null);
//2.执行查询
Employee employeeQueryResult = employeeService.selectOne(employeeQueryCondition);
System.out.println(employeeQueryResult);
}
2)xxxByPrimaryKey 方法
@Test
public void testSelectByPrimaryKey() {
//1.提供id值
Integer empId = 3;
//2.执行根据主键进行的查询
Employee employee = employeeService.getEmployeeById(empId);
System.out.println(employee);
}
3)xxxSelective 方法
非主键字段如果为 null 值,则不加入到 SQL 语句中。
八丶QBC查询
@Test
public void testSelectByExample() {
//目标:WHERE (emp_salary>? AND emp_age<?) OR (emp_salary<? AND emp_age>?)
//1.创建Example对象
Example example = new Example(Employee.class);
//***********************
//i.设置排序信息
example.orderBy("empSalary").asc().orderBy("empAge").desc();
//ii.设置“去重”
example.setDistinct(true);
//iii.设置select字段
example.selectProperties("empName","empSalary");
//***********************
//2.通过Example对象创建Criteria对象
Criteria criteria01 = example.createCriteria();
Criteria criteria02 = example.createCriteria();
//3.在两个Criteria对象中分别设置查询条件
//property参数:实体类的属性名
//value参数:实体类的属性值
criteria01.andGreaterThan("empSalary", 3000)
.andLessThan("empAge", 25);
criteria02.andLessThan("empSalary", 5000)
.andGreaterThan("empAge", 30);
//4.使用OR关键词组装两个Criteria对象
example.or(criteria02);
//5.执行查询
List<Employee> empList = employeeService.getEmpListByExample(example);
for (Employee employee : empList) {
System.out.println(employee);
}
}