这一章记录一下springboot集成mybatisPlus的buho步骤以及其中遇到的问题
1、首先介绍一下,mybatisPlus
根据官方文档的介绍,MybatisPlus(简称mp)是对mybatis的增强而不做改变,只为ti提高效率简化开发,具体参见http://mp.baomidou.com/#/?id=%e7%ae%80%e4%bb%8b
2、开始集成mybatis-plus
- 引入依赖的jar包
<!--spring boot mybatis plus依赖--> <!--该依赖已经包含mybatis及mybatis-spring依赖,勿重复加入以免引起冲突--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0-RC1</version> </dependency>
该包的结构图如下:
- 添加配置文件
#mybatis-plus配置
mybatis-plus:
mapper-locations: classpath:/mapper/*Mapper.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.wuhaijun.entity
global-config:
# 数据库相关配置
db-config:
#主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
id-type: AUTO
#字段策略 IGNORED:"忽略判断",NOT_NULL:"非 NULL 判断"),NOT_EMPTY:"非空判断"
field-strategy: not_empty
#驼峰下划线转换
column-underline: true
#数据库大写下划线转换
#capital-mode: true
#逻辑删除配置
logic-delete-value: 0
logic-not-delete-value: 1
db-type: mysql
#刷新mapper 调试神器
refresh: true
# 原生配置
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
logging:
level: warn
- 开始使用mybatisPlus(下面说的是跟mybatis相比需要更改的地方)
- 在实体类上必须要指定主键字段,使用注解@TableId。如果没有使用该注解指定主键,在启动的时候会扫描不到mapper,启动失败。(这个问题查了好久,一开始没有使用该注解一直启动失败,最后看了源码发现在实体类上使用该注解,最后加上该注解,启动成功。不知道我的理解是否正确,或者跟配置文件里面的配置有什么关系,这个以后慢慢研究)如果创建的表跟实体名不一致,可以使用注解@TableName来明确指定表名
@TableName("t_user") public class User { @TableId private Long id; private String name; private int age; private int sex; private String address; // 省略get/set方法 }
- 对于mapper,要继承BaseMapper类,在该类中已经集成了最常用的CRUD方法而不再需要我们配置xml文件
- 添加java配置,mybatisPlus提供的分页需要手动配置
@Configuration
@MapperScan("com.springboot.mybatisPlus.mapper*")
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
这样就完成了mybatisPlus所有的准备工作了。下面就来介绍一下具体使用了,直接贴上代码:
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wuhaijun.entity.User;
import com.wuhaijun.mapper.UserMapper;
import com.wuhaijun.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
private Logger logger = LoggerFactory.getLogger(getClass());
@Resource
private RedisTemplate<String,User> redisTemplate;
@Autowired
private UserMapper mapper;
@Override
public void insert(User user) {
Integer count = mapper.insert(user);
if(count > 0){
logger.info("插入成功");
}else{
logger.info("插入失败");
}
}
@Override
public void delete(User user) {
mapper.deleteById(user.getId());
}
@Override
public void update(User user) {
//mapper.updateById(user);
/**
* update(@Param("et") T var1, @Param("ew") Wrapper<T> var2);
* 第一个参数是要更新的对象,第二个参数是更新格式
* 对于setSql()方法,这里指定的属性值会覆盖更新对象中对应的属性值,没有指定的属性值继续按照更新对象中的值更新数据库
* 同时对于字符串类型必须要使用单引号,否则会报错;eg:setSql("name='谢逊'")
*/
mapper.update(user,new UpdateWrapper<User>().setSql("name = '" + user.getName() + "'").eq("id",1L));
}
@Override
public List<User> selectListBySQL(){
/**
* 这是自定义查询方法,这里跟原生的MyBatis写法一样,可以使用注解,也可以读取xml中的sql
* 使用MyBatisPlus集成之后的方法,都不需要配置xml
*/
List<User> users = mapper.selectListBySQL();
return users;
}
@Override
public List<User> selectListByConditon(User user) {
/**
* 这里使用QueryWrapper来添加查询的约束
*/
QueryWrapper<User> wrapper = new QueryWrapper<User>().eq("name",user.getName());
List<User> users = mapper.selectList(wrapper);
return users;
}
@Override
public List<User> selectListByConditonForPage(User user,int currentPage,int pageSize) {
/**
* 添加约束条件,同时分页
*/
IPage<User> page = new Page<User>(currentPage,pageSize);
QueryWrapper<User> wrapper = new QueryWrapper<User>().like("name",user.getName());
IPage<User> userIPage = mapper.selectPage(page, wrapper);
return userIPage.getRecords();
}
@Override
public User findUserById(int id) {
/**
* 原生Mybatis写法
*/
return mapper.findUserById(id);
}
}
以上使用MP完常用的CRUD以及分页操作