mybatis_plus
常用注解:
-
@TableName : 当表名跟实体类名字不一样时, 可以指定映射数据库那张表, 默认跟类名一致
-
@TableField : 映射表的列名, 也可以在合并sql的时候会自动扫描实体类的字段, 而当需求需要在实体类中创建一些表列名对应不上的字段时, 可以使用, TableField 有个exist属性, 指是否映射表列 false 不映射
-
@TableId : 主键注解, 一般使用type属性, AUTO 数据库ID自增
@TableName(value = "t_employee") //当表名跟实体类名字不一样时 @TableField(exist = false) @TableId(type = IdType.AUTO)
日志
//推荐用这种 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
条件构造器
根据输入的条件生成sql的where条件(但不适用于多表查询, 多表查询还是用xml.写)
有4个类
-
UpdateWrapper
-
LambdaUpdateWrapper
见名知意, 这两个都是用于跟新操作
-
QueryWrapper
-
LambdaQueryWrapper
两个普通两个Lambda 他们用法基本相同, 普通的条件需要手写, 有手误的可能, Lambda 采用字段, 手误的可能很少
里面的方法
eq = 等于
alleq = 都等于
ne != 不等于
gt > 大于
lt < 小于
ge >= 大于等于
le <= 小于等于
between 值1 and 值2
notBetween not值1 and 值2
like %值%
likeLeft : LIKE '%值'
likeRight : LIKE '值%'
or 可以用于拼接, 可以用于嵌套
and 默认用and连接, 可以用于嵌套
notLike not%值%
isNull 为NUll
isNotNull 不为空
in 值在里面
notIn 值不在里面
inSql 写intsql
notInsql 写notInSql
groupBy 分组
orderByAsc 正序
orderByDesc 降序
having 设置条件
//UpdateWrapper 和 LambdaUpdateWrapper
//更新name=dafei员工年龄为20岁
@Test
public void update2(){
/*UpdateWrapper<Employee> wrapper = new UpdateWrapper<>();*/
/*wrapper.eq("name","dafei").set("age",20);*/
LambdaUpdateWrapper<Employee> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(Employee::getName,"dafei").set(Employee::getAge,20);
employeeMapper.update(null,wrapper);
}
//QueryWrapper 和 LambdaQueryWrapper
//查询name=dafei, age=18的用户
@Test
public void queryWrapper(){
/*QueryWrapper<Employee> wrapper = new QueryWrapper<>();
wrapper.eq("name","dafei")
.eq("age",18);
employeeMapper.selectList(wrapper);*/
/*HashMap<String, Object> map = new HashMap<>();
map.put("name","dafei");
map.put("age",18);
employeeMapper.selectByMap(map);*/
LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Employee::getName,"dafei")
.eq(Employee::getAge,18);
employeeMapper.selectList(wrapper);
}
//书写顺序: • select->distinct->from->join->on->where->group by->having->order by->limit • 必须字段:select、from • 可选字段:distinct、join、on、where、group by、having、sum、count、max、avg、order by、limit //执行顺序 • from->on->join->where->group by(开始使用select中的别名,后面的语句中都可以使用别名)->sum、count、max、avg->having->select->distinct->order by->limit
高级查询
列投影 可以指定返回查询后的列
/*QueryWrapper<Employee> wrapper = new QueryWrapper<>();
wrapper.select("name","age");*/
LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
wrapper.select(Employee::getName,Employee::getAge);
/*QueryWrapper<Employee> wrapper = new QueryWrapper<>();*/
LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
wrapper.select(Employee.class,m->m.getProperty().startsWith("a"));
正序 orderByAsc
/*QueryWrapper<Employee> wrapper = new QueryWrapper<>();
wrapper.orderByAsc("age").orderByAsc("id");*/
LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>();
wrapper.orderByAsc(Employee::getAge).orderByAsc(Employee::getId);
分组groupBy
QueryWrapper<Employee> wrapper = new QueryWrapper<>();
wrapper.groupBy("dept_id")
.select("dept_id,count(*) count")
.having("count > 3");
or嵌套
QueryWrapper<Employee> wrapper = new QueryWrapper<>();
wrapper.like("name", "fei")
.or(wr -> wr.le("age", 30).ge("age", 18));
and嵌套
QueryWrapper<Employee> wrapper = new QueryWrapper<>();
wrapper.like("name", "fei")
.and(wr -> wr.le("age", 30)
.or()
.ge("age", 18));
MP多表查询
还是使用mapper.xml的方式, 清晰明了
Service接口
常用方法:
getBaseMapper() : 返回引用mapper对象
getOne(wrapper) : 按指定条件查询一个, 注意如果数据库有超过一个数据报错
list(wrapper) : 返回list集合
page(page, wrapper) : 分页
业务层接口继承 IService接口
public interface IEmployeeService extends IService<Employee> {
}
而业务层实现类 实现ServiceImpl这个类 这个类要传两个参数一个是mapper接口, 一个是对应的实体类
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements IEmployeeService {
}
分页
public IPage<Employee> queryPage(EmployeeQueryObject qo) {
IPage<Employee> page = new Page<>(qo.getCurrentPage(),qo.getPageSize());
QueryWrapper<Employee> wrapper = new QueryWrapper<>();
//判断是否有传参数
wrapper.like(StringUtils.hasLength(qo.getKeyword()),"name",qo.getKeyword());
//调用父类
return super.page(page,wrapper);
}
事务还是用以前贴注解的方式
@Transactional
不多废话,觉得有用点点赞三连
本文详细介绍了MyBatis Plus中的注解使用,如@TableName、@TableField和@TableId,以及如何进行日志配置。同时,讲解了条件构造器如UpdateWrapper和QueryWrapper的使用,包括各种条件表达式如eq、like和in等。此外,还涵盖了高级查询功能,如列投影、排序和分组。最后,展示了Service接口中的常用方法和事务管理。

1604

被折叠的 条评论
为什么被折叠?



