添加依赖
com.baomidou
mybatis-plus-boot-starter
3.4.2
另:全部依赖
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.3.RELEASE
com.example
demo
0.0.1-SNAPSHOT
demo
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.1
mysql
mysql-connector-java
runtime
com.github.pagehelper
pagehelper-spring-boot-starter
1.3.0
org.projectlombok
lombok
true
com.baomidou
mybatis-plus-boot-starter
3.4.2
org.junit.jupiter
junit-jupiter
RELEASE
test
org.springframework.boot
spring-boot-maven-plugin
调整配置
去掉mybatis配置
添加mybatis plus配置
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
type-aliases-package: com.qcby.train.entity
mapper-locations: classpath:mapper/*.xml
# 全局配置id自增 =>
global-config:
db-config:
id-type: auto
引入Lombok依赖,使代码更加简洁,刷新依赖
org.projectlombok
lombok
1.16.14
Mybatis-plus继承了分页
创建config.MybatisPlusConfig类,添加@Configuration注解
@Configuration public class MybatisPlusConfig { // 最新版 @Bean //
public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }
实现分页
数据库
CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '用户名', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
在entity包下创建User实体类
@Data //Lombok提供的注解,写上这个注解之后,不用写get,set,toString方法 @TableName("user") //mybatis-plus提供的注解,写这个实体类对应的表名 public class User { private Long id; private String name; }
mapper.xml文件
在mapper包下创建UserMapper接口,继承BaseMapper类,定义findAll方法
@Mapper public interface UserMapper extends BaseMapper
{ public IPage findAll(Page page); } 在service包下创建UserService接口,继承IService类,定义findAll方法
public interface UserService extends IService
{ public IPage findAll(Page page); } 在service.impl包下创建UserServiceImpl类,继承ServiceImpl类,实现UserService 接口,加上@Service注解
@Service public class UserServiceImpl extends ServiceImpl
implements UserService { @Resource private UserMapper userMapper; @Override public IPage findAll(Page page){ return this.userMapper.findAll(page); } } 在controller包下创建UserController类,加上@RestController注解
@RestController @RequestMapping("user") public class UserController { @Autowired private UserServiceImpl service; @RequestMapping("findAll") public IPage
findAll(Integer pageNum, Integer pageSize){ //分页实现 Page page=new Page<>(pageNum,pageSize); return this.service.findAll(page); } } 在SpringBootProjectApplication 类上,加上@MapperScan("com.qcby.mapper")注解
@MapperScan("com.qcby.mapper") @SpringBootApplication public class SpringBootProjectApplication { public static void main(String[] args) { SpringApplication.run(SpringBootProjectApplication.class, args); } }
http://localhost:8080/user/findAll?pageNum=1&pageSize=3
设置表名
默认表名就是实体类的类名
在实体类的类名上加上@TableName注解进行表示
主键生成策略
默认MP插入数据时,在没有设置主键生成策略的情况下的策略是基于雪花算法的自增id
如果需要别的策略,在实体类中代表主键的字段上加上@TableId注解,使用其type属性指定主键生成策略
@TableId(type=IdType.AUTO) 自动增长
或在全局设置中设置
id-type:AUTO
驼峰映射
MP默认开启字段名列名的驼峰映射
userName(实体类中)——》user_name(数据库中)
自定义映射
在实体类的属性上面加@TableField("address")
如果需要关闭可以使用如下配置进行关闭
mybatis-plus: configuration: #是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射 map-underscore-to-camel-case: false
日志
如果需要打印MP操作对应的SQL语句等,可以配置日志输出。
配置方式如下:
mybatis-plus: configuration: # 日志 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
条件构造器Wrapper
在其子类`AbstractWrapper`中提供了很多用于构造Where条件的方法。
QueryWrapper针对select方法,查询哪些列
UpdateWrapper针对set语法的set方法,设置来对哪些列进行更新
常用AbstractWrapper方法
自定义SQL实现分页
Mapper层
Service层
Controller层
如果使用mybatisplus自带的方法的话,直接在Mapper层,Service层继承mybatisplus的接口,在Controller层之间写对外的接口就好
Mapper层
Service层
Controller层
list()是自带的方法,直接可以打印所有
不需要在mapper配置文件中写sql
另外mybatisplus自带分页
注:标红线的是给分页查询加的条件(where),如不需要可去掉
Mybatisplus基础自带增删改查
//增加或删除 @RequestMapping("/saveOrUpdate") public boolean saveOrUpdate(Student student){ return iStudentService.saveOrUpdate(student); } //删除 @RequestMapping("/delete") public boolean delete(Long id){ return iStudentService.removeById(id); } //更新 @RequestMapping("/update") public boolean update(Student student){ return iStudentService.updateById(student); } //全部查询 @RequestMapping("list") public List
list(){ return iStudentService.list(); } //分页查询 @RequestMapping("page") public Page page(Integer pageNo, Integer pageSize){ Page page = new Page<>(pageNo,pageSize); return iStudentService.page(page); } //查询,使用了QueryWrapper作为查询的条件 @RequestMapping("/search") //注意三个参数,页码,页大小,Student实例对象 public IPage search(Integer pageNo,Integer pageSize, Student student){ Page page = new Page<>(pageNo,pageSize); QueryWrapper queryWrapper = new QueryWrapper<>(); //如果输入不为空,获取输入的值 if(!StringUtils.isEmpty(student.getSex())){ queryWrapper.eq("sex",student.getSex()); } if(!StringUtils.isEmpty(student.getName())){ queryWrapper.like("name",student.getName());} if(!StringUtils.isEmpty(student.getNumber())){ queryWrapper.like("number",student.getNumber()); } return iStudentService.page(page,queryWrapper); }