一. 引入
1.1 作用:替我们生成常用增删改查操作的SQL语句。
1.2 代码官方发布地址
https://gitee.com/free/
https://gitee.com/free/Mapper/wikis/pages
1.3 前置知识
Mybatis
Spring
1.4 Java实体类
需要使用包装类型,不能使用基本数据类型。
由于基本类型都有默认值,会导致Mabatis在执行相关操作的时候很难判断当前字段是否为null,所以MyBatis环境下尽量不要使用基本数据类型。
int默认0,double默认0.0 .....
二.创建步骤
1.创建Employee实体类,service以及serviceImpl
2.创建Mapper接口并继承通用Mapper
public interface EmployeeMapper extends Mapper<Employee>{
}
//ServiceImpl
@AutoWired
private EmployeeMapper employeeMapper;
public Employee findOne(Employee emp){
return employeeMapper.selectOne(emp);
}
3.创建测试类
//测试类
Employee emp = new Employee(id,"Tom",sex); //查询条件
Employee findEmp = employeeService.findOne(emp); //查询结果
System.out.println(findEmp);//查看结果
三.常见注解
1.@Table注解
作用:建立实体类和数据库表之间的对应关系
默认规则:实体类类名首字母小写作为表名,Employee类 -->employee表
用法:在@Table注解的name属性上对应数据库的表名。
2.@Column注解
作用:建立实体类与数据库表中字段之间的对应关系
默认规则:实体类字段:驼峰式命名
数据库字段:使用“_”区分各个单词
用法:在@Column注解中的name属性指定目标字段的字段名
3.@Id:设置实体类的字段为数据库表对应的主键字段
注:使用selectByPrimaryKey(),必须标明主键字段
4.@GeneratedValue注解
作用:让通用Mapper在执行insert操作之后,将数据库自动生成的主键值回写到实体类对象中。
自增主键用法:
@GeneratedValue(strategy = GenerationType.IDENTITY)
序列主键用法(Oracle):
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "select SEQ_ID.nextval from dual")
应用场景:购物车结账
生成订单数据 ->封装到Order对象中->保存Order对象->数据库自动生成主键值->会写到实体类Order对象中
->生成一系列订单详情数据->封装到List<OrderItem> ->在OrderItem中设置Order对象的主键值作为外键->批量保存List<OrderItem>
5.@Trnsient注解
对于数据库中不存在的字段,但是实体类有,使用该注解,使通用Mapper忽略该字段
@Table(name="tab_emp")
public class Employee{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer empId;
@Column(name="emp_name")
private String name;
}
四、常用方法
1.selectOne方法:查询一条数据
通用Mapper根据传进去的实体类自动生成sql语句,并将查询条件传入。
实体类封装查询条件生成where子句的规则:
a.使用非空的值生成WHERE子句
b.在条件表达式中使用的都是“=”进行比较
2.selectByPrimaryKey():通过主键查询数据,但必须要使用@Id标明实体类
中的某一个字段为数据库中的主键,
通用Mapper默认所有的字段都是联合主键。
3.existsWithPrimaryKey(不常用):通过查询主键判断数据是否存在