概述
阅读前可先参考
https://blog.csdn.net/MinggeQingchun/article/details/126521908
一、配置Mybatis-Plus控制台输出日志
在application.yml 配置文件中添加如下配置
#Mybatis-Plus输出日志
mybatis-plus:
configuration:
# 日志输出到控制台
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
查看控制台如下:
注:此配置只是将日志输出到控制台
二、CRUD用法
CRUD的操作是来自BaseMapper中的方法。BaseMapper 中共有19 个方法,CRUD操作都有多个不同参数的方法。继承BaseMapper就可以使用其中的方法
BaseMapper方法列表:
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
@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操作
@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
private int age; // 0
因此,可以将基本数据类型更改为包装类型,可以判断是否为null
//实体类属性,推荐使用包装类型, 可以判断是否为 null
private Integer age; // 0
3、select操作
(1)SelectById();根据主键ID查询
//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批量查询
//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查询
//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删除
//delete
@Test
void testDeleteById(){
//DELETE FROM user WHERE id=?
int rows = userMapper.deleteById(6);
System.out.println("testDeleteById 的结果:" + rows);
}
(2)deleteBatchIds();批量删除
//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删除
//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 表
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 实体类
/**
* 使用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类
/**
* 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
@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 不进行更新
@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
@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,报错如下
com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: selectById primaryKey is null.
或者对象不封装主键ID,selectById(1)中传参
@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
@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 Record(AR)(二)一、配置Mybatis-Plus控制台输出日志二、CRUD用法三、Active Record(AR)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复