https://mp.baomidou.com/
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>springboot-mybatispulsgroupId>
<artifactId>springboot-mybatispulsartifactId>
<version>0.0.1-SNAPSHOTversion>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.3.RELEASEversion>
parent>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>2.0.1version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.1.2version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-generatorartifactId>
<version>3.1.2version>
dependency>
<dependency>
<groupId>org.freemarkergroupId>
<artifactId>freemarkerartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.59version>
dependency>
dependencies>
<properties>
<java.version>1.8java.version>
properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
##宠物表
DROP TABLE IF EXISTS `pet`;
CREATE TABLE `pet` (
`p_id` int(11) NOT NULL AUTO_INCREMENT,
`p_age` int(11) DEFAULT NULL,
`p_name` varchar(255) DEFAULT NULL,
`p_birthday` datetime DEFAULT NULL,
`p_death_time` datetime DEFAULT NULL,
`p_remark` varchar(255) DEFAULT NULL,
`u_id` int(11) DEFAULT NULL,
PRIMARY KEY (`p_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
##用户表
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` varchar(30) DEFAULT NULL COMMENT '姓名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`sex` varchar(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
1:创建springboot项目,添加启动类,配置文件
package com.lcf.puls;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author : lichenfei
* @date : 2019年8月9日
* @time : 下午5:36:15
*
*/
@SpringBootApplication
@MapperScan("com.lcf.puls.mapper")
public class MybatisPulsApplication {
public static void main(String[] args) throws Exception {
SpringApplication.run(MybatisPulsApplication.class, args);
}
}
application.properties
#springboot 配置信息
#lichenfei
#端口号
server.port=8888
#数据库连接相关
spring.datasource.url=jdbc\:mysql\://127.0.0.1\:3306/mybatis_puls?allowMultiQueries\=true&useUnicode\=yes&characterEncoding\=UTF-8&useSSL\=true
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#控制台打印sql
logging.level.com.lcf.puls.mapper=debug
2:添加mybatis-puls代码生成工具
package com.lcf.puls.generator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.FileOutConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
/**
* @author : lichenfei
* @date : 2019年8月14日
* @time : 下午2:31:12
*
*/
public class MysqlGenerator {
private static final String DATASOURCE_URL = "jdbc:mysql://localhost:3306/mybatis_puls?useUnicode=true&useSSL=false&characterEncoding=utf8";
private static final String DATASOURCE_USERNAME = "root";
private static final String DATASOURCE_PASSWORD = "123456";
private static final String DATASOURCE_DRIVER = "com.mysql.jdbc.Driver";
/**
* 每次生成文件时设置当前开发人员
*/
private static final String AUTHOR = "lichenfei";// 开发人员
private static final String MODULE_NAME = "puls";// 模块名
private static final String PACKAGE_PATH = "com.lcf";// 项目包路径 最终生成路径为:PACKAGE_PATH + MODULE_NAME
/**
*
* 读取控制台内容
*
*/
public static String scanner(String tip) {
Scanner scanner = new Scanner(System.in);
StringBuilder help = new StringBuilder();
help.append("请输入" + tip + ":");
System.out.println(help.toString());
if (scanner.hasNext()) {
String ipt = scanner.next();
if (StringUtils.isNotEmpty(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置-----------------------------------------------------
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");// 生成文件的输出目录,默认值:D 盘根目录
gc.setAuthor(AUTHOR);// 开发人员
gc.setOpen(false);// 是否打开输出目录 默认值:true
// gc.setSwagger2(true); 实体属性 Swagger2 注解 开启 swagger2 模式
gc.setFileOverride(false);// 是否覆盖同名文件,默认是false
// gc.setActiveRecord(true);// 不需要ActiveRecord特性的请改为false 开启 ActiveRecord 模式
gc.setEnableCache(false);// XML 二级缓存 是否在xml中添加二级缓存配置
gc.setBaseResultMap(true);// XML ResultMap
gc.setBaseColumnList(false);// XML columList
mpg.setGlobalConfig(gc);
// 数据源配置-----------------------------------------------------
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl(DATASOURCE_URL);
dsc.setDriverName(DATASOURCE_DRIVER);
dsc.setUsername(DATASOURCE_USERNAME);
dsc.setPassword(DATASOURCE_PASSWORD);
mpg.setDataSource(dsc);
// 包配置-----------------------------------------------------
PackageConfig pc = new PackageConfig();
pc.setModuleName(MODULE_NAME);// 模块名
pc.setParent(PACKAGE_PATH);// 父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名
// pc.setEntity(entity)//Entity包名
// pc.setService(service)//Service包名
// pc.setServiceImpl(serviceImpl);//Service Impl包名
// pc.setMapper(mapper)//Mapper包名
// pc.setXml("src/main/resources/mapper/puls/lcf");// Mapper XML包名
// pc.setController(controller)//Controller 包名
// pc.setPathInfo(pathInfo);//路径配置信息
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) {
// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return projectPath + "/src/main/resources/mapper/" + pc.getModuleName() + "/"
+ tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
/*
* cfg.setFileCreate(new IFileCreate() {
*
* @Override public boolean isCreate(ConfigBuilder configBuilder, FileType
* fileType, String filePath) { // 判断自定义文件夹是否需要创建 checkDir("调用默认方法创建的目录");
* return false; } });
*/
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 配置模板-----------------------------------------------------
TemplateConfig templateConfig = new TemplateConfig();
// 配置自定义输出模板
// 指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
// templateConfig.setEntity("templates/entity2.java");
// templateConfig.setService();
// templateConfig.setController();
// templateConfig.setMapper(mapper);
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
// 策略配置------------------------------------------------------
StrategyConfig strategy = new StrategyConfig();
strategy.setCapitalMode(true);// 是否大写命名
strategy.setNaming(NamingStrategy.underline_to_camel);// 数据库表映射到实体的命名策略
strategy.setColumnNaming(NamingStrategy.underline_to_camel);// 数据库表字段映射到实体的命名策略, 未指定按照 naming 执行
// strategy.setTablePrefix(tablePrefix)//表前缀
// strategy.setFieldPrefix(fieldPrefixs)//字段前缀
// strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");//自定义继承的Entity类全称,带包名
// strategy.setSuperEntityColumns(superEntityColumns);//自定义基础的Entity类,公共字段
// strategy.setSuperMapperClass(superMapperClass)//自定义继承的Mapper类全称,带包名(mybatispuls已经默认设置了,无需设置)
// strategy.setSuperServiceClass(superServiceClass)//自定义继承的Service类全称,带包名
// strategy.setSuperServiceImplClass(superServiceImplClass)//自定义继承的ServiceImpl类全称,带包名
// strategy.setSuperControllerClass(superControllerClass)//自定义继承的Controller类全称,带包名
strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
strategy.setEntityColumnConstant(false);// 【实体】是否生成字段常量(默认 false)
strategy.setEntityBuilderModel(false);// 【实体】是否为构建者模型(默认 false)
// 不使用会自动生成set,get,toString方法
// strategy.setEntityLombokModel(true);// 【实体】是否为lombok模型 默认 false
// strategy.setRestControllerStyle(true);// 生成 @RestController 控制器
// strategy.setControllerMappingHyphenStyle(controllerMappingHyphenStyle)//驼峰转连字符
strategy.setEntityTableFieldAnnotationEnable(true);// 是否生成实体时,生成字段注解
// strategy.setControllerMappingHyphenStyle(true);
// strategy.setTablePrefix(pc.getModuleName() + "_");
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());// freemarker模板配置
mpg.execute();
}
}
3:运行MysqlGenerator代码生成工具类,生成代码,如图所示:
1>运行之前:
2>开始运行(输入表名并点击回车):
3>代码生成之后:
4:编写测试类进行测试:
package com.lcf.puls.test;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
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.lcf.puls.entity.User;
import com.lcf.puls.mapper.UserMapper;
import com.lcf.puls.service.IUserService;
import javafx.print.JobSettings;
/**
* @author : lichenfei
* @date : 2019年8月9日
* @time : 下午5:40:24
*
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class PulsTest1 {
@Autowired
private UserMapper userMapper;
@Autowired
private IUserService iUserService;
@Test
public void testSelect() {
//增:
User user = new User();
user.setAge(24);
user.setName("lichenfei");
user.setEmail("[email protected]");
user.setSex("m");
//int insert = userMapper.insert(user);//保存一个实体
//System.err.println("insert:"+insert +"---user.id:"+user.getId());//主键会自动保存到实体中
boolean save = iUserService.save(user);
System.err.println("save:"+save +"---user.id:"+user.getId());//主键会自动保存到实体中
//删:
//int delete = userMapper.deleteById(4);//根据主键删除
//System.err.println("delete:"+delete);
//改:
iUserService.updateById(entity);//根据id修改
//查:
System.out.println(("----- userMapper ------"));
List<User> userList = userMapper.selectList(null);
System.err.println(userList.toString());
System.out.println(("----- iUserService ------"));
List<User> list = iUserService.list();
System.err.println(list.toString());
// UpdateWrapper
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 18);
queryWrapper.select("name", "age", "sex");// 设置查询字段
List<User> selectList = userMapper.selectList(queryWrapper);
System.err.println(selectList.toString());
//分页查询需首先配置分页config
Page<User> page = new Page<>(1, 3);
IPage<User> selectPage = userMapper.selectPage(page, null);
System.err.println(JSON.toJSONString(selectPage));
}
}
分页配置:
package com.lcf.puls.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
/**
* @author : lichenfei
* @date : 2019年8月16日
* @time : 上午11:15:52
*
*/
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// paginationInterceptor.setLimit(你的最大单页限制数量,默认 500 条,小于 0 如 -1 不受限制);
return paginationInterceptor;
}
}
基本整合到这里就完了,有什么问题欢迎在下方留言…