常用注解
@TableName(“employee”) //当实体类名与数据库表名不一致时,进行关系映射
@TableId(type = IdType.AUTO) //使用数据库id自增
@TableField(“name”) //当实体类属性和数据库中字段不一致时,进行关系映射
@TableField(exist = false) //数据库中不存在该字段,解除字段与列映射
@TableName(“employee”) //当实体类名与数据库表名不一致时,进行关系映射
public class Employee {
@TableId(type = IdType.AUTO) //使用数据库id自增
private Long id;
@TableField("name") //当实体类属性和数据库中字段不一致时,进行关系映射
private String name;
private String password;
private String email;
private int age;
@TableField(exist = false) //数据库中不存在该字段,解除字段与列映射
private int admin;
private Long deptId;
}
自动封装的方法
1、employeeMapper.updateById(employee); 会将实体类中属性为 null 的字段忽略,不为 null 的字段拼接 update sql 语句。
实体类中使用 int 类型不赋值时默认是 0 ,更新时会将 0 更新到数据库中,而使用 integer 类型不赋值时默认是 null,就不会拼接sql 语句而更新。
解决方法:
- 将实体类中 int 类型改为 integer 封装类型
- 使用 updateWrapper 条件构建
UpdateWrapper<Employee> wrapper = new UpdateWrapper<>();
wrapper.eq("id",1L);
wrapper.set("name","dada");
employeeMapper.update(null,wrapper);
分页查询
1.配置 mybatisPlus 分页拦截器
//配置mybatisPlus 分页拦截器
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
interceptor.addInnerInterceptor(paginationInnerInterceptor);
return interceptor;
}
2.编写分页查询代码
@Test
public void test(){
QueryWrapper<Employee> wrapper = new QueryWrapper<>();
//查询第一页十条数据
Page<Employee> page = new Page<>(1,10);
//查询到的数据封装到 page 对象中
employeeMapper.selectPage(page,wrapper);
System.out.println(page.getRecords()); //输出查询到的数据
}
条件构造器
UpdateWrapper :
eq 表示 update sql 语句 where 后面条件, set 表示更新的字段(第一个参数 boolean 类型表示是否拼接改字段,可以实现动态 sql)
LambdaUpdateWrapper:
与updateWrapper 相比,列名使用方法引用,防止自己列明写错
QueryWrapper:
LambdaQueryWrapper:
列名使用方法引用,防止自己列明写错
wrappers 工具类
wrappers 工具类可以创建各种类型的 wrapper
高级查询
select
# 1.挑选要查询的列
QueryWrapper<Employee> wrapper = Wrappers.query();
wrapper.select("id","name"); // id 和 name 是需要查询的列
order by
group by
having
条件语句
通用 Service 接口
mapper 接口(继承 BaseMapper<实体类名> 接口)
public interface EmployeeMapper extends BaseMapper<Employee> {
List<Employee> getAllEmployee();
}
service 接口(继承 IService<实体类名> 接口)
public interface IEmployeeService extends IService<Employee> {
}
service 实现类(继承 ServiceImpl<xxxMapper,实体类名> 类)
@Service
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper,Employee> implements IEmployeeService {
}