MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生.
支持跨数据库的开发
将数据库的 增删改查 封装成 对象
以面向对象的方式操作数据库
由框架动态生成SQL
语句
实现了 跨数据库 操作
首先进行导入MyBatisPlus
包
<!--spring整合mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
需要将MyBatis
的包删除掉
否则会 冲突
使用
数据库里每张表与每个对象进行关联
使用@TableName
注解
让 对象与表名 映射关系
标识主键 并进行自增
@TableId
@Data
@Accessors(chain = true)
@TableName("user") // 让对象与表名 一一映射 关系
public class User extends BasePojo{
@TableId(type = IdType.AUTO) //标识 主键 type = IdType.AUTO 主键自增
private Integer id;
// 如果 数据库的表 字段 与对象字段 一致(包含驼峰规则) 可以不写 @TableField
private String username;
private String password;
private String phone;
private String email;
private Boolean status;
// @TableField(exist = false) //表示 该属性不存在
}
该属性不存在
@TableField(exist = false)
编辑Mapper
层
继承公共的接口
Mapper 继承该接口后,无需编写 mapper.xml 文件,即可获得CRUD功能
继承时 必须添加泛型 泛型必须与 表 进行关联
// 继承时 必须添加泛型 泛型必须与表进行关联
public interface UserMapper extends BaseMapper<User> {
}
编辑yml文件
将mybatis 替换成 mybatis-plus
mybatis-plus:
type-aliases-package: com.jt.pojo
# mapper-locations xml的配置文件存放路径
mapper-locations: classpath:/mappers/*.xml
#开启驼峰映射
configuration:
map-underscore-to-camel-case: true
最后进行使用
新增
//这个user是 需要添加进去的 用户信息
int insert = userMapper.insert(user);
其他属性查询
需要条件构造器
用来封装where
条件
// 如果查询出的结果 绝对有一个 使用 selectOne
User one = userMapper.selectOne(null);
// 查询出的结果 有多个
List<User> userList = userMapper.selectList(null);
创建条件构造器
User temp = new User();
temp.setUsername("狗蛋狗蛋");
//利用对象封装数据 根据对象中不为null的元素动态拼接Sql
QueryWrapper<User> queryWrapper = new QueryWrapper<>(temp);
// 如果查询出的结果 绝对有一个 使用 selectOne
User user = userMapper.selectOne(queryWrapper);
条件限制查询
使用到转义字符
符号 | 转义字符 |
---|---|
> | gt |
< | lt |
= | eq |
>= | ge |
<= | le |
!= | ne |
如id
大于等于5
/**
* 条件限制查询
* id > 5
*
* 转义字符 > gt < lt = eq
* >= ge <= le != ne
* */
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 使用 gt 代表大于等于 第一个参数代表 表字段
queryWrapper.gt("id", 5);
// 查询出的结果 有多个 selectList
List<User> userList = userMapper.selectList(queryWrapper);
System.out.println(userList);
模糊查询
使用like方法
like 方法代表 左右都有百分号 "%admin%"
likeLeft 代表 左边有百分号 "%admin"
likeRight 代表 右边有百分号 "admin%"
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
// 模糊查询
queryWrapper.like("username", "admin");
List<User> userList = userMapper.selectList(queryWrapper);
System.out.println(userList);
使用降序 或 升序 排列
// 查询出来的数据 根据 id 进行降序排列
queryWrapper.like("username", "admin").orderByDesc("id");
多值查询
使用in
方法
使用是传入包装类型的数组
Integer[] ids = {1,2,23,24};// 一定使用int 的包装类型
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.in("id", ids);
List<User> userList = userMapper.selectList(queryWrapper);
System.out.println(userList);
方法二使用提供的API
Integer[] ids = {1, 2, 23, 24};
// Arrays.asList(ids) 数组转换成集合
List<User> userList = userMapper.selectBatchIds(Arrays.asList(ids));
System.out.println(userList);
动态查询
如果查询的数据为空
则不添加为空的条件
String phone = "15566332255";
String email = "1199@qq.com";
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.eq(phone != null, "phone", phone).eq(email != null, "email", email);
List<User> userList = userMapper.selectList(queryWrapper);
或者
判断不为空字符串和不为null
// Spring 提供的一个工具包 判断当前字符串是否为空串 或 为 null
StringUtils.hasLength(phone)
获取所有的主键
// 获取主键信息 Objs
List<Object> objects = userMapper.selectObjs(null);
System.out.println(objects);
更改
将password
等于123456
的数据phone
改为111111111
User user = new User();
// 进行更新的值
user.setPhone("1008611").setEmail("qweqwe@qq.com");
UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
// 查询数据的条件 password = 123456 的数据
userUpdateWrapper.eq("password", "123456");
// 第一个参数: 是进行 更新的值
// 第二个参数: 是进行 查询的值
userMapper.update(user,userUpdateWrapper);