我是靠谱客的博主 秀丽月光,这篇文章主要介绍Java--MybatisPlus日志;CRUD用法;Active Record(AR)(二)一、配置Mybatis-Plus控制台输出日志二、CRUD用法三、Active Record(AR),现在分享给大家,希望可以做个参考。

阅读前可先参考

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
53
public 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

复制代码
1
private 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
9
DROP 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,报错如下

复制代码
1
com.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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(89)

评论列表共有 0 条评论

立即
投稿
返回
顶部