mybatis-plus

mybatis-plus插件的使用

这里只介绍简单使用, 更多详细信息请参考:

官网: https://mp.baomidou.com/

官方手册离线版: [点击下载]

狂神笔记: [点击下载笔记] 来源: 狂神说gitee

入门程序

1. 导入依赖

mybatis 和 mybatis-plus不能同时存在

maven地址:https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter

2. pojo对象

主要注解:

@TableName("表明") 将对象与表明关联, 参数为数据库表名

@TableId() 定义主键信息, 参数为枚举类型IdType

@TableField("") 标识字段与属性的映射关系(驼峰命名), 如果名字相同则可以省略

@Data
@TableName("user") // 将对象与表明关联, 参数为数据库表名
@Accessors(chain = true)
public class User {
	@TableId(type = IdType.AUTO) // 定义主键信息
	private Integer id;
	@TableField(value = "name") // 标识字段与属性的关联关系
	private String name;
	private Integer age;
	private String sex;
}

3. dao接口, 继承BaseMapper接口

如果启动类上有了mapper的自动扫描注解, 例如@MapperScan("com.jt.demo.mapper"), 可不写@Mapper注解

@Mapper
public interface UserMapper extends BaseMapper<User> {
	
}

4. YML的配置

其中数据源的配置是必不可少的, 其他可不写(看需求)

mybatis的配置前缀改为mybatis-plus, 如下:

spring:
  datasource:
    # driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: 123456

#切换为Mybatisplus的配置   
mybatis-plus:
  # 定义别名包
  type-aliases-package: com.jt.demo.pojo
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true
    
#引入sql日志输出
logging:
  level:
    com.jt.demo.mapper: debug 

5. 测试

@Autowired
private UserMapper userMapper;

@Test
public void select() {
    List<User> users = userMapper.selectList(null);
    System.out.println(users);
}

结果: 查询到了所有的user

核心API

insert

返回值 方法 说明
int insert(T entity); 插入一条记录

delete

返回值 方法 说明
int deleteById(Serializable id); 根据 ID 删除
int deleteByMap(Map<String, Object> columnMap); 根据 columnMap 条件,删除记录
int delete(Wrapper<T> wrapper); 根据 entity 条件,删除记录
wrapper为实体对象封装操作类
(可以为 null)
int deleteBatchIds(Collection idList); 删除(根据ID 批量删除)
参数为集合
idList 主键ID列表
(不能为 null 以及 empty)

update

返回值 方法 说明
int updateById( T entity); 根据 ID 修改
int update(@Param(T entity, Wrapper<T> updateWrapper); 根据 whereEntity 条件,
更新记录
updateWrapper为
实体对象封装操作类
(可以为 null,里面的 entity
用于生成 where 语句)

select

返回值 方法 说明
T (泛型) selectById(Serializable id); 根据 ID 查询
List selectBatchIds(Collection idList); 查询
(根据ID 批量查询)
参数为一个集合类型
List selectByMap(Map<String, Object> columnMap); 查询(
根据 columnMap 条件)
T (泛型) selectOne(Wrapper<T> queryWrapper); 根据 entity 条件,
查询一条记录
queryWrapper为实体对象
封装操作类
(可以为 null)
Integer selectCount(Wrapper<T> queryWrapper); 根据 Wrapper 条件,
查询总记录数
List selectList(Wrapper<T> queryWrapper); 根据 Wrapper条件,
查询全部记录
List<Map<String, Object>> selectMaps(Wrapper<T> queryWrapper); 根据 Wrapper 条件,
查询全部记录
List selectObjs(Wrapper<T> queryWrapper); 根据 Wrapper 条件,
查询全部记录
注意:
只返回第一个字段的值
IPage selectPage(IPage<T> page,Wrapper<T> queryWrapper); 根据 entity 条件,
查询全部记录(并翻页)
IPage<Map<String, Object>> selectMapsPage(IPage<T> page,Wrapper<T> queryWrapper); 根据 Wrapper 条件,查询全部记录(并翻页)
page为分页查询条件
queryWrapper为实体对象封装操作类

案例

用户入库操作

注意事项: MP操作时, 将对象中不为null的数据,当做执行要素

@Test
public void insert() {
    User user = new User();
    user.setName("特朗普");
    user.setAge(60);
    user.setSex("男");
    int rows = userMapper.insert(user);
    System.out.println(rows);
}

条件查询1

查询name="特朗普"的用户

@Test
public void select01() {
    // 定义条件构造器 动态拼接where条件之后的数据
    User user = new User();
    user.setName("特朗普");

    // where name = "xxxx"
    QueryWrapper<User> queryWrapper = new QueryWrapper<>(user);
    List<User> userList = userMapper.selectList(queryWrapper);
    System.out.println(userList);
}

条件查询2

查询sex="女" age > 200 的用户

@Test
public void select02() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("sex", "女");
    queryWrapper.gt("age", 200);
    List<User> userList = userMapper.selectList(queryWrapper);
    System.out.println(userList);
}

条件查询3

查询name中包含"精"的用户 like

@Test
public void select03() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.like("name", "精"); // "%精%" 包含精
    // queryWrapper.likeLeft("name", "精"); // "%精" 以精字结尾
    // queryWrapper.likeRight("name", "精"); // "%精" 以精字开头
    List<User> userList = userMapper.selectList(queryWrapper);
    System.out.println(userList);
}

条件查询4

查询age位于 18-30之间, 并且要求性别 "男"

@Test
public void select04() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.between("age", 18, 35).eq("sex", "男");
    List<User> userList = userMapper.selectList(queryWrapper);
    System.out.println(userList);
}

条件查询5

查询name不为空, 并且根据age降序排序,如果age相同则按照sex排序

@Test
public void select05() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.isNotNull("name").orderByDesc("age", "sex");
    List<User> userList = userMapper.selectList(queryWrapper);
    System.out.println(userList);
}

条件查询6

批量查询数据 要求查询id = 1, 3, 5, 8

@Test
public void select07() {
    // 1. idList 自己进行封装
    // List<Integer> idList = new ArrayList<>();
    //	idList.add(1);
    //	idList.add(3);
    //	idList.add(5);
    //	idList.add(8);

    // 2. Id的信息一般都是由前端进行传递, 所以一般都是竖着格式
    // 一般在定义数组格式时, 最好采用对象类型
    Integer[] ids = { 1, 3, 5, 8 };
    // 将数组转为集合
    List<Integer> idList = Arrays.asList(ids);
    List<User> userList = userMapper.selectBatchIds(idList); // in 语法
    System.out.println(userList);
}

条件查询7

查询记录总数 name不为空的记录总数

@Test
public void select08() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.isNotNull("name");
    int count = userMapper.selectCount(queryWrapper);
    System.out.println(count);
}

条件查询8

查询记录总数 name不为空的记录总数

@Test
public void delete() {
    userMapper.deleteById(null);
}

条件查询9

根据id查询

@Test
public void select06() {
    // 根据主键进行查询  返回值结果单个对象
    User user = userMapper.selectById(1);
    System.out.println(user);
}

根据id修改

@Test
public void update01() {
    // 根据主键更新, 要求对象中必须传递主键的信息
    User user = new User();
    user.setId(53);
    user.setName("奥巴马");
    user.setAge(66);
    user.setSex("男");
    userMapper.updateById(user);
}

根据条件修改

将name=null的用户信息name改为="测试案例" sex="男" age=1

@Test
public void update02() {
    User user = new User();
    user.setName("测试案例");
    user.setSex("男");
    user.setAge(1);
    UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
    updateWrapper.isNull("name");
    userMapper.update(user, updateWrapper);
}
上一篇:浅谈响应式网页设计


下一篇:mybayis-plus条件构造器