一个springboot的项目就算搭建完成,下面引入mybatis-plus等相关依赖
<!--mybatis-plus核心库-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<!--代码生成器依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.1.1</version>
</dependency>
<!--freemarker-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
<!--小辣椒-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--德鲁伊-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.31</version>
</dependency>
<!--分页插件可加可不加,因为MP自带分页功能-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.12</version>
</dependency>
</dependencies>
记下来配置数据源:
#端口号
server.port=8081
#数据库相关配置
spring.jackson.time-zone=GMT+8
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://cdb-rkp9srii.bj.tencentcdb.com:10241/数据库名?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=密码
#mybatis.mapper-locations=classpath:mapper/*.xml
# mybatis-plus 配置
mybatis-plus.mapper-locations=classpath:mapper/*.xml
mybatis-plus.configuration.map-underscore-to-camel-case=true
mybatis-plus.configuration.cache-enabled=false
mybatis-plus.configuration.call-setters-on-nulls=true
mybatis-plus.type-aliases-package=com.demo.model.*
mybatis-plus.global-config.id-type=0
mybatis-plus.global-config.field-strategy=2
mybatis-plus.global-config.db-column-underline=false
mybatis-plus.global-config.refresh-mapper=true
配置完信息 就是写工具类 使用代码生成器生成代码:
在这之前咱们首先要有数据库表,随便找一个。如下:
即员工表、部门表、工资等级表
sql语句如下:
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
`deptno` varchar(32) NOT NULL,
`dname` varchar(64) DEFAULT NULL,
`loc` varchar(100) DEFAULT NULL,
PRIMARY KEY (`deptno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Table structure for emp
-- ----------------------------
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
`empno` varchar(32) NOT NULL,
`ename` varchar(64) DEFAULT NULL,
`job` varchar(64) DEFAULT NULL,
`mgr` varchar(32) DEFAULT NULL,
`hiredate` date DEFAULT NULL,
`sal` double(10,2) DEFAULT NULL,
`comm` double(10,2) DEFAULT NULL,
`deptno` varchar(32) DEFAULT NULL,
PRIMARY KEY (`empno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Table structure for salgrade
-- ----------------------------
DROP TABLE IF EXISTS `salgrade`;
CREATE TABLE `salgrade` (
`grade` varchar(32) NOT NULL,
`losal` double(10,0) DEFAULT NULL,
`hisal` double(10,0) DEFAULT NULL,
PRIMARY KEY (`grade`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
下面就是通过MP代码生成器生成项目结构:
package com.demo.utils;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
public class MpGenerator {
public static void main(String[] args) throws InterruptedException {
//用来获取Mybatis-Plus.properties文件的配置信息
//final ResourceBundle rb = ResourceBundle.getBundle("mybatisplus");
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir("F:/flash/smp_demo/src/main/java"); //修改成自己的项目路径一直到java
gc.setFileOverride(true);//覆盖已有文件
gc.setOpen(false);
gc.setBaseResultMap(true);
gc.setBaseColumnList(true);
gc.setAuthor("lpj");
gc.setMapperName("%sMapper");
gc.setXmlName("%sMapper.xml");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setControllerName("%sController");
gc.setDateType(DateType.ONLY_DATE);
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setUrl("jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=CTT");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("Gepoint");
dsc.setTypeConvert(new MySqlTypeConvertCustom());
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.demo");
//pc.setController("controller");
pc.setService("service");
pc.setServiceImpl("service.impl");
pc.setEntity("model");
pc.setMapper("dao");
mpg.setPackageInfo(pc);
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// 如果模板引擎是 freemarker
String templatePath = "/templates/mapper.xml.ftl";
// 如果模板 引擎是 velocity
//String templatePath = "/templates/mapper.xml.vm";
List<FileOutConfig> focList = new ArrayList<>();
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输入文件名称
return "F:/flash/smp_demo/src/main/resources" + "/mapper/" + tableInfo.getEntityName() + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
mpg.setTemplate(new TemplateConfig().setXml(null));
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);
//建立不包含哪些表
//strategy.setExclude(new String[]{rb.getString("tableName")});
//建立包含哪些表空 为所有表
strategy.setInclude();
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
/**
* 自定义类型转换
*/
class MySqlTypeConvertCustom extends MySqlTypeConvert implements ITypeConvert{
@Override
public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
String t = fieldType.toLowerCase();
if (t.contains("tinyint(1)")) {
return DbColumnType.INTEGER;
}
return super.processTypeConvert(globalConfig, fieldType);
}
}
右键运行,就会生成目录结构,如下图所示:
在这里插入图片描述
注意:要想项目跑起来不报错,还需要再启动类上mybatis的加上包扫描(不要问我为什么,问就是找不到mybatis的包)
如下:
下面我们在员工表加一条数据,写一个测试接口。测试数据是否能查出来:
然后在controller层写一个测试接口:
@Controller
@RequestMapping("/emp")
public class EmpController {
@Autowired
EmpService empService;
@ResponseBody
@RequestMapping("/test")
public String test(){
ModelAndView mv = new ModelAndView("emps");
List<Emp> emps = empService.getEmps();
return emps.toString();
}
}
service层实现类:
@Service
public class EmpServiceImpl extends ServiceImpl<EmpMapper, Emp> implements EmpService {
@Autowired
EmpMapper empMapper;
@Override
public List<Emp> getEmps() {
//MP自带单表的CRUD 直接调封装好的接口即可。
List<Emp> emps = empMapper.selectList(null);
return emps;
}
}
至于mapper层 ,我需要加上@Repository,有的不需要加,报错就加上。
把项目跑起来 直接在url地址进行访问:
会使用postman的可以在postman中访问接口,毕竟是一个很好用的工具,建议学习使用:
至此,一个sprinboot+mybatis-plus的框架算是搭建完成了,下一节演示增删改查。