本章目录
前言一、代码生成二、BaseMapper CRUD 接口1、增(Insert)2、删(Delete)3、改(Update)4、查(Select)5、配置分页拦截器
三、IBaseService CRUD 接口1、save(增)2、SaveOrUpdate(增或改)3、Remove(删)4、Update(改)5、Get(按条件查)6、List(查)7、Page(分页查)8、Count(查记录数)9、Chain(链式)query(链式查询)update(链式更改)
四、参数说明
前言
使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQL。而且,当数据库表结构改动时,对应的所有SQL以及实体类都需要更改。这工作量和效率的影响或许就是区别增删改查程序员和真正程序员的屏障。
M
y
b
a
t
i
s
−
p
l
u
s
中
通
用
m
a
p
p
e
r
就
把
普
通
的
增
删
改
查
操
作
封
装
成
了
B
a
s
e
M
a
p
p
e
r
和
I
S
e
r
v
i
c
e
\color{red}{Mybatis-plus中通用mapper就把普通的增删改查操作封装成了BaseMapper和IService}
Mybatis−plus中通用mapper就把普通的增删改查操作封装成了BaseMapper和IService。下面我将讲述BaseMapper具体有哪些属性以及相关操作。
一、代码生成
使用Mybatis-plus 代码生成器 AutoGenerator 以及添加相关依赖,生成代码。这些步骤我上一篇博客已经谢过了,这里是链接:
Mybatis-plus 代码生成器 AutoGenerator 的简介和(最详细)使用
二、BaseMapper CRUD 接口
说明:
通用 CRUD 封装BaseMapper接口,为
M
y
b
a
t
i
s
−
P
l
u
s
\color{#A4A4A4}{Mybatis-Plus}
Mybatis−Plus启动时自动解析实体表关系映射转换为
M
y
b
a
t
i
s
\color{#A4A4A4}{Mybatis}
Mybatis内部对象注入容器泛型 T 为任意实体对象参数
S
e
r
i
a
l
i
z
a
b
l
e
\color{#A4A4A4}{Serializable}
Serializable 为任意类型主键
M
y
b
a
t
i
s
−
P
l
u
s
\color{#A4A4A4}{Mybatis-Plus}
Mybatis−Plus不推荐使用复合主键约定每一张表都有自己的唯一 id 主键对象
W
r
a
p
p
e
r
\color{#A4A4A4}{Wrapper }
Wrapper为 条件构造器
BaseMapper-CRUD官方文档:https://mybatis.plus/guide/crud-interface.html#mapper-crud-%E6%8E%A5%E5%8F%A3
1、增(Insert)
@Autowired
private UserMapper userMapper
;
public void insert() {
User user
= new User();
user
.setName("wangsong");
user
.setAge(23);
user
.setEmail("1720696548@qq.com");
userMapper
.insert(user
);
System
.out
.println(user
.getId());
}
2、删(Delete)
@Autowired
private UserMapper userMapper
;
public void deleteById() {
userMapper
.deleteById(8);
}
public void deleteBatchIds() {
List
<Long> ids
= new ArrayList<>();
ids
.add(7);
ids
.add(6);
userMapper
.deleteBatchIds(ids
);
}
public void deleteByMap() {
Map
<String,Object> map
= new HashMap<>();
map
.put("id","6");
userMapper
.deleteByMap(map
);
}
public void delete() {
QueryWrapper
<User> wrapper
= new QueryWrapper<>();
wrapper
.eq("id",6)
.eq("name","wangsong");
userMapper
.delete(wrapper
);
}
3、改(Update)
@Autowired
private UserMapper userMapper
;
public void updateById() {
User user
= new User();
user
.setId(9);
user
.setName("erping");
user
.setAge(23);
user
.setEmail("1720696548@qq.com");
userMapper
.updateById(user
);
}
public void update() {
User user
= new User();
user
.setEmail("xie430423@163.com");
UpdateWrapper
<User> wrapper1
= new UpdateWrapper<User>();
wrapper1
.eq("id",9);
userMapper
.update(user
,wrapper1
);
}
4、查(Select)
@Autowired
private UserMapper userMapper
;
@Test
public void selectById(){
User user
= userMapper
.selectById(1L
);
System
.out
.println(user
.toString());
}
public void selectBatchIds(){
List
<Long> ids
= new ArrayList<>();
ids
.add(1);
ids
.add(2);
List
<User> users
= userMapper
.selectBatchIds(ids
);
System
.out
.println(users
.toString());
}
public void selectList(){
List
<User> users
= userMapper
.selectList(null
);
System
.out
.println(users
.toString());
}
public void selectListWrapper(){
QueryWrapper
<User> wrapper
= new QueryWrapper<>();
wrapper
.eq("id",1);
List
<User> users
= userMapper
.selectList(wrapper
);
System
.out
.println(users
.toString());
}
public void selectPage(){
Page
<User> page
= new Page<>(1,2);
Page
<User> userPage
= userMapper
.selectPage(page
, null
);
System
.out
.println("总页数"+userPage
.getPages());
System
.out
.println("总记录数"+userPage
.getTotal());
System
.out
.println(userPage
.getRecords().toString());
}
5、配置分页拦截器
@EnableTransactionManagement
@Configuration
@MapperScan("com.xxgg.blog.mapper")
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor
mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor
= new MybatisPlusInterceptor();
interceptor
.addInnerInterceptor(new PaginationInnerInterceptor(DbType
.MYSQL
));
return interceptor
;
}
@Bean
public ConfigurationCustomizer
configurationCustomizer() {
return configuration
-> configuration
.setUseDeprecatedExecutor(false);
}
}
三、IBaseService CRUD 接口
说明:
通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用
g
e
t
查
询
单
行
、
r
e
m
o
v
e
删
除
、
l
i
s
t
查
询
集
合
、
p
a
g
e
分
页
\color{#A4A4A4}{get 查询单行 、remove 删除 、list 查询集合 、page 分页}
get查询单行、remove删除、list查询集合、page分页 ,前缀命名方式区分 Mapper 层避免混淆,泛型 T 为任意实体对象建议如果存在自定义通用 Service 方法的可能,请创建自己的
I
B
a
s
e
S
e
r
v
i
c
e
\color{#A4A4A4}{IBaseService}
IBaseService继承 Mybatis-Plus 提供的基类对象
W
r
a
p
p
e
r
\color{#A4A4A4}{Wrapper }
Wrapper 为 条件构造器
Service官网Api文档:https://mybatis.plus/guide/crud-interface.html#service-crud
注
:
B
a
s
e
M
a
p
p
e
r
不
支
持
批
量
操
作
,
I
B
a
s
e
S
e
r
v
i
c
e
支
持
批
量
操
作
\color{red}{注:BaseMapper 不支持批量操作,IBaseService支持批量操作}
注:BaseMapper不支持批量操作,IBaseService支持批量操作
1、save(增)
boolean save(T entity
);
boolean saveBatch(Collection
<T> entityList
);
boolean saveBatch(Collection
<T> entityList
, int batchSize
);
2、SaveOrUpdate(增或改)
boolean saveOrUpdate(T entity
);
boolean saveOrUpdate(T entity
, Wrapper
<T> updateWrapper
);
boolean saveOrUpdateBatch(Collection
<T> entityList
);
boolean saveOrUpdateBatch(Collection
<T> entityList
, int batchSize
);
3、Remove(删)
boolean remove(Wrapper
<T> queryWrapper
);
boolean removeById(Serializable id
);
boolean removeByMap(Map
<String, Object> columnMap
);
boolean removeByIds(Collection
<? extends Serializable> idList
);
4、Update(改)
boolean update(Wrapper
<T> updateWrapper
);
boolean update(T entity
, Wrapper
<T> updateWrapper
);
boolean updateById(T entity
);
boolean updateBatchById(Collection
<T> entityList
);
boolean updateBatchById(Collection
<T> entityList
, int batchSize
);
5、Get(按条件查)
T
getById(Serializable id
);
T
getOne(Wrapper
<T> queryWrapper
);
T
getOne(Wrapper
<T> queryWrapper
, boolean throwEx
);
Map
<String, Object> getMap(Wrapper
<T> queryWrapper
);
<V> V
getObj(Wrapper
<T> queryWrapper
, Function
<? super Object
, V
> mapper
);
6、List(查)
List
<T> list();
List
<T> list(Wrapper
<T> queryWrapper
);
Collection
<T> listByIds(Collection
<? extends Serializable> idList
);
Collection
<T> listByMap(Map
<String, Object> columnMap
);
List
<Map
<String, Object>> listMaps();
List
<Map
<String, Object>> listMaps(Wrapper
<T> queryWrapper
);
List
<Object> listObjs();
<V> List
<V> listObjs(Function
<? super Object
, V
> mapper
);
List
<Object> listObjs(Wrapper
<T> queryWrapper
);
<V> List
<V> listObjs(Wrapper
<T> queryWrapper
, Function
<? super Object
, V
> mapper
);
7、Page(分页查)
IPage
<T> page(IPage
<T> page
);
IPage
<T> page(IPage
<T> page
, Wrapper
<T> queryWrapper
);
IPage
<Map
<String, Object>> pageMaps(IPage
<T> page
);
IPage
<Map
<String, Object>> pageMaps(IPage
<T> page
, Wrapper
<T> queryWrapper
);
8、Count(查记录数)
int count();
int count(Wrapper
<T> queryWrapper
);
9、Chain(链式)
query(链式查询)
QueryChainWrapper
<T> query();
LambdaQueryChainWrapper
<T> lambdaQuery();
query().eq("column", value
).one();
lambdaQuery().eq(Entity
::getId
, value
).list();
update(链式更改)
UpdateChainWrapper
<T> update();
LambdaUpdateChainWrapper
<T> lambdaUpdate();
update().eq("column", value
).remove();
lambdaUpdate().eq(Entity
::getId
, value
).update(entity
);
四、参数说明
下面列举前面出现的参数说明:
参数名称类型描述
idSerializable主键IDentityT实体对象entityListCollection实体对象集合batchSizeint插入批次数量pageIPage翻页对象wrapperWrapper实体对象封装操作类updateWrapperWrapper实体对象封装操作类 UpdateWrapperqueryWrapperWrapper实体对象封装操作类 QueryWrappermapperFunction<? super Object, V>转换函数idListCollection<? extends Serializable>主键ID列表columnMapMap<String, Object>表字段 map 对象throwExboolean有多个 result 是否抛出异常
官方文档:https://mybatis.plus/guide/