一、springboot整合mybatis-plus
1、添加maven依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
2、在apllication.properties添加相关的配置
server.servlet.context-path=/
spring.datasource.url=jdbc:mysql://localhost:3306/yjcj_interface_testserverTimezone=GMT
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#配置数据库主键id是什么类型,0为数据库自增
mybatis-plus.global-config.db-config.id-type=auto
#不用在实体用@tableName映射表名
mybatis-plus.global-config.db-config.table-prefix=t_
#默认是t_sys_user这种带下划线的,如果是t_sysuser是查不到的,所以需要下面的配置为false
mybatis-plus.global-config.db-config.table-underline=false
#表里的字段默认查找是user_name,如果表里字段命名是驼峰的话下面改为false
mybatis-plus.configuration.map-underscore-to-camel-case=false
#控制台打印输出sql
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#扫描mybatis的xml文件
mybatis-plus.mapper-locations=classpath:/com/example/demo/mapper/xml/*.xml
3、在junit里用mybatis-plus自动生成mapper层,*mapper.xml,service层,entity层及控制层controller
package com.example.demo;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
@SpringBootTest
class DemoApplicationTests {
@Test
void contextLoads() {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("wuzong");
gc.setOpen(false);
// gc.setSwagger2(true); 实体属性 Swagger2 注解
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/yjcj_interface_test?useUnicode=true&useSSL=false&characterEncoding=utf8");
// dsc.setSchemaName("public");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
// pc.setModuleName(scanner("模块名"));
pc.setParent("com.example.demo");
pc.setEntity("entity");
pc.setMapper("mapper");
pc.setService("service");
pc.setController("controller");
mpg.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
//strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
//strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
// 公共父类
// strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!");
// 写于父类中的公共字段
// strategy.setSuperEntityColumns("id");
// strategy.setInclude("t_user,t_cron".split(","));
strategy.setInclude("t_excel_test");//每次新增表需要mybatis-plus生产,只需要改这里即可
// strategy.setControllerMappingHyphenStyle(true);
//匹配表名,不用在实体类上写tablefield
strategy.setTablePrefix(pc.getModuleName() + "t_");
mpg.setStrategy(strategy);
//mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
4、如果新增表的话,只需要把表名修改即可
strategy.setInclude("t_excel_test");//修改表名
5、生成后mapper层继承了一个接口BaseMapper,里面封装了基本的增删改查操作,可以直接调用。@Mapper这个在每个mapper类上都需要加,或者也可以在启动类上加@MapperScan(“com.example.demo.mapper”)//扫描所有的dao层,两种方式,建议在后者
package com.example.demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.Cron;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* 遍历定时表 Mapper 接口
* </p>
*
* @author wuzong
* @since 2021-02-26
*/
@Repository
@Mapper
public interface CronMapper extends BaseMapper<Cron> {
List<Cron> queryAllLists();
}
6、service层同样继承了ServiceImpl相关的接口,基础增删改查都有封装,也可以自己写
package com.example.demo.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.entity.Cron;
import com.example.demo.mapper.CronMapper;
import com.example.demo.service.ICronService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
* <p>
* 遍历定时表 服务实现类
* </p>
*
* @author wuzong
* @since 2021-02-26
*/
@Service
public class CronServiceImpl extends ServiceImpl<CronMapper, Cron> implements ICronService {
@Autowired
private CronMapper cronMapper;
@Override
public List<Cron> queryAllLists() {
return cronMapper.queryAllLists();
}
@Override
public <T> Page<T> queryByPage(int currentPage, int pageSize){
Page<Cron> objectPage = new Page<>(currentPage,pageSize);
QueryWrapper queryWrapper=new QueryWrapper();
Page<T> cronPage = cronMapper.selectPage(objectPage, queryWrapper);
return cronPage;
}
@Transactional//这个注解可以加到类上和方法上,作用域不同,如果这个方式报错了,那么事务不会提交,不会修改数据
@Override
public int deleteAndDelete() {
cronMapper.deleteById(10);
//Integer.valueOf("aa");
cronMapper.deleteById(9);
return 0;
}
}
7、以上为mybatis-plus的自动生成及相关配置,其中mybatis-plus封装了许多复杂查询方式的接口可以调用,支持where,and,or,join 等操作