阅读前可先参考
https://blog.csdn.net/MinggeQingchun/article/details/126521908
一、配置Mybatis-Plus控制台输出日志
在application.yml 配置文件中添加如下配置
1
2
3
4
5#Mybatis-Plus输出日志 mybatis-plus: configuration: # 日志输出到控制台 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
查看控制台如下:
注:此配置只是将日志输出到控制台
二、CRUD用法
CRUD的操作是来自BaseMapper中的方法。BaseMapper 中共有19 个方法,CRUD操作都有多个不同参数的方法。继承BaseMapper就可以使用其中的方法
BaseMapper方法列表:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53public interface BaseMapper<T> extends Mapper<T> { int insert(T entity); int deleteById(Serializable id); int deleteById(T entity); int deleteByMap(@Param("cm") Map<String, Object> columnMap); int delete(@Param("ew") Wrapper<T> queryWrapper); int deleteBatchIds(@Param("coll") Collection<?> idList); int updateById(@Param("et") T entity); int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper); T selectById(Serializable id); List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList); List<T> selectByMap(@Param("cm") Map<String, Object> columnMap); default T selectOne(@Param("ew") Wrapper<T> queryWrapper) { List<T> ts = this.selectList(queryWrapper); if (CollectionUtils.isNotEmpty(ts)) { if (ts.size() != 1) { throw ExceptionUtils.mpe("One record is expected, but the query result is multiple records", new Object[0]); } else { return ts.get(0); } } else { return null; } } default boolean exists(Wrapper<T> queryWrapper) { Long count = this.selectCount(queryWrapper); return null != count && count > 0L; } Long selectCount(@Param("ew") Wrapper<T> queryWrapper); List<T> selectList(@Param("ew") Wrapper<T> queryWrapper); List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper); List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper); <P extends IPage<T>> P selectPage(P page, @Param("ew") Wrapper<T> queryWrapper); <P extends IPage<Map<String, Object>>> P selectMapsPage(P page, @Param("ew") Wrapper<T> queryWrapper); }
1、insert操作
insert()返回 int 值,表示数据插入成功的行数;且插入成功后可以获取到主键ID
1
2
3
4
5
6
7
8
9
10
11
12
13@Test void testInsert(){ User user = new User(); user.setName("wangwu"); user.setEmail("wangwu@163.com"); user.setAge(18); //调用UserMapper的方法, 也就是父接口BaseMapper中的提供的方法 //INSERT INTO user ( name, email, age ) VALUES ( ?, ?, ? ) int rows = userMapper.insert(user); //插入成功后会拿到主键ID int userId = user.getId(); System.out.println("insert 的结果:" + rows + "----userId:" + userId); }
2、update操作
1
2
3
4
5
6
7
8
9@Test void testUpdate(){ User user = new User(); user.setName("zhangsan22"); user.setId(1); //UPDATE user SET name=? WHERE id=? int rows = userMapper.updateById(user); System.out.println("update 的结果:" + rows); }
注:
字段值为 null 不进行更新
实体类中如果是Java的基本数据类型,即使不进行传参更新操作,也会将其更新为默认值,如 age = 0
1private int age; // 0
因此,可以将基本数据类型更改为包装类型,可以判断是否为null
1
2//实体类属性,推荐使用包装类型, 可以判断是否为 null private Integer age; // 0
3、select操作
(1)SelectById();根据主键ID查询
1
2
3
4
5
6
7//select @Test void testSelectById(){ //SELECT id,name,email,age FROM user WHERE id=? User user = userMapper.selectById(6); System.out.println("testSelectById 的结果:" + user); }
查询结果为空,不会报错
(2)selectBatchIds 根据主键ID批量查询
1
2
3
4
5
6
7
8
9
10//select @Test void testSelectBatchIds(){ List<Integer> ids = new ArrayList<>(); ids.add(1); ids.add(2); //SELECT id,name,email,age FROM user WHERE id IN ( ? , ? ) List<User> userList = userMapper.selectBatchIds(ids); System.out.println("testSelectBatchIds 的结果:" + userList.size()); }
(3)selectByMap() 根据Map查询
1
2
3
4
5
6
7
8
9
10
11//select @Test void testSelectByMap(){ Map<String ,Object> map = new HashMap<>(); //注:map中存放的 key 必须是数据库中对应的 列名字段,不然报错 map.put("name","zhangsan"); map.put("age",20); //SELECT id,name,email,age FROM user WHERE name = ? AND age = ? List<User> userList = userMapper.selectByMap(map); System.out.println("testSelectBatchIds 的结果:" + userList.size()); }
注:map中存放的 key 必须是数据库中对应的 列名字段,不然报错
4、delete操作
(1)deleteById();根据主键ID删除
1
2
3
4
5
6
7//delete @Test void testDeleteById(){ //DELETE FROM user WHERE id=? int rows = userMapper.deleteById(6); System.out.println("testDeleteById 的结果:" + rows); }
(2)deleteBatchIds();批量删除
1
2
3
4
5
6
7
8
9
10//delete @Test void testDeleteBatchIds(){ List<Integer> ids = new ArrayList<>(); ids.add(6); ids.add(8); //DELETE FROM user WHERE id IN ( ? , ? ) int rows = userMapper.deleteBatchIds(ids); System.out.println("testDeleteBatchIds 的结果:" + rows); }
(3)deleteByMap():根据map删除
1
2
3
4
5
6
7
8
9
10
11
12//delete @Test void testDeleteByMap(){ Map<String ,Object> map = new HashMap<>(); //注:map中存放的 key 必须是数据库中对应的 列名字段,不然报错 //SELECT id,name,email,age FROM user WHERE name = ? AND age = ? map.put("name","zhangsan"); map.put("age",28); //DELETE FROM user WHERE name = ? AND age = ? int rows = userMapper.deleteByMap(map); System.out.println("testDeleteByMap 的结果:" + rows); }
三、Active Record(AR)
AR模式是一种活动记录,领域模型模式
特点是一个模型类,对应关系型数据库中的一个表
模型类的一个实例,对应表中的一行记录
简单来说就是通过实体类对象,对表进行增删改查操作,方便开发
1、新建一张 dept 表
1
2
3
4
5
6
7
8
9DROP TABLE IF EXISTS dept; CREATE TABLE dept( id int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', name varchar(50) NULL DEFAULT NULL COMMENT '部门', mobile varchar(50) NULL DEFAULT NULL COMMENT '电话', manager int(11) NULL DEFAULT NULL COMMENT '主管ID', PRIMARY KEY (id) )ENGINE=InnoDB DEFAULT CHARSET=utf8;
ENGINE=InnoDB使用InnoDB引擎,InnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一
DEFAULT CHARSET=utf8 数据库默认编码为utf-8
2、新建 entity 实体类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/** * 使用AR,要求实体类需要继承MP中的Model * Model中提供了对数据库的CRUD的操作 */ @Data public class Dept extends Model<Dept> { //定义属性, 属性名和表的列名一样 //uuid @TableId(value = "id",type = IdType.AUTO) private String id; private String name; private String mobile; private Integer manager; }
注:
使用AR,实体类需要继承Mybatis-Plus中的Model,Model中提供了对数据库的CRUD的操作
3、 mapper类
1
2
3
4
5
6/** * DeptMapper是不需要使用的,MP需要使用DeptMapper获取到数据库的表的信息 * 如果不定义DeptMapper, MP会报错, 找不到表的定义信息 */ public interface DeptMapper extends BaseMapper<Dept> { }
注:
DeptMapper是不需要使用的,MP需要使用DeptMapper获取到数据库的表的信息
如果不定义DeptMapper, MP会报错, 找不到表的定义信息
com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: com.company.entity.Dept Not Found TableInfoCache.
1、AR之insert
1
2
3
4
5
6
7
8
9
10
11@Test public void testARInsert(){ Dept dept = new Dept(); dept.setName("人资行政部"); dept.setMobile("021-45646546"); dept.setManager(1); //INSERT INTO dept ( name, mobile, manager ) VALUES ( ?, ?, ? ) boolean result = dept.insert(); System.out.println("testARInsert 的结果:" + result); }
2、AR之update
字段值为 null 不进行更新
1
2
3
4
5
6
7
8
9
10@Test public void testARUpdate(){ Dept dept = new Dept(); dept.setName("人资部"); dept.setId(1); //UPDATE dept SET name=? WHERE id=? boolean result = dept.updateById(); System.out.println("testARUpdate 的结果:" + result); }
3、AR之select
1
2
3
4
5
6
7
8
9@Test public void testASelectById(){ Dept dept = new Dept(); dept.setId(1); //SELECT id,name,mobile,manager FROM dept WHERE id=? Dept selectDept = dept.selectById(); System.out.println("testASelectById 的结果:" + selectDept); }
对象封装主键ID,调用selectById()方法无参数;
没有查到结果,返回 null;
不传主键ID,报错如下
1com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: selectById primaryKey is null.
或者对象不封装主键ID,selectById(1)中传参
1
2
3
4
5
6
7
8@Test public void testASelectById1(){ Dept dept = new Dept(); //SELECT id,name,mobile,manager FROM dept WHERE id=? Dept selectDept = dept.selectById(1); System.out.println("testASelectById1 的结果:" + selectDept); }
4、AR之delete
1
2
3
4
5
6
7
8@Test public void testARDelete(){ Dept dept = new Dept(); //DELETE FROM dept WHERE id=? boolean result = dept.deleteById(1); System.out.println("testARDelete 的结果:" + result); }
最后
以上就是秀丽月光最近收集整理的关于Java--MybatisPlus日志;CRUD用法;Active Record(AR)(二)一、配置Mybatis-Plus控制台输出日志二、CRUD用法三、Active Record(AR)的全部内容,更多相关Java--MybatisPlus日志;CRUD用法;Active内容请搜索靠谱客的其他文章。
发表评论 取消回复