spring boot整合mybatis+mybatis-plus
Spring boot对于我来说是一个刚接触的新东西,学习过程中,发现这东西还是很容易上手的,Spring boot没配置时会默认使用Spring data jpa,这东西可以说一个极简洁的工具,可是我还是比较喜欢用mybatis,工具是没有最好的,只有这合适自己的。
说到mybatis,最近有一个很好用的工具--------mybatis-Plus(官网),现在更新的版本是2.1.2,这里使用的也是这个版本。我比较喜欢的功能是代码生成器,条件构造器,这样就可以更容易的去开发了。
mybatisPlus官网上是有Spring boot整个的例子的,我也跟着它走了一篇,结果,程序没跑起来,后来才知道demo用的H2 database,和mysql根本不是同一样东西,所以各位想要整合mybatisPlus,可以不看官网的,可以少走弯路。
下面就是整合的过程
1、首先要把需要的jar文件都弄过来,pom.xml需要的东西如下
pom.xml(不完整)

- <!-- mybatis-plus begin -->
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatisplus-spring-boot-starter</artifactId>
- <version>1.0.4</version>
- </dependency>
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus</artifactId>
- <version>2.1.2</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jdbc</artifactId>
- </dependency>
- <!-- mybatis-plus end -->
- <!-- druid阿里巴巴数据库连接池 -->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid</artifactId>
- <version>1.1.3</version>
- </dependency>
- <!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
- <dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>

2、添加mybatis相关的配置,如账号、密码等。这里我使用了application.yml来配。
application.yml

- server:
- port: 8080
- #spring
- spring:
- devtools:
- restart:
- enabled: true #这里是为了热部署的,与mybatis是无关的
- #DATABASE CONFIG
- datasource:
- driver-class-name: com.mysql.jdbc.Driver
- username: root
- password: root
- url: jdbc:mysql://mysqldb:3306/tdx_shop?useUnicode=true&characterEncoding=utf-8
- type: com.alibaba.druid.pool.DruidDataSource #这里是配置druid连接池,以下都是druid的配置信息
- filters: stat,wall,log4j
- maxActive: 20
- initialSize: 1
- maxWait: 60000
- minIdle: 1
- timeBetweenEvictionRunsMillis: 60000
- minEvictableIdleTimeMillis: 300000
- validationQuery: select 'x'
- testWhileIdle: true
- testOnBorrow: false
- testOnReturn: false
- poolPreparedStatements: true
- maxOpenPreparedStatements: 20
- connection-properties: druid.stat.merggSql=ture;druid.stat.slowSqlMillis=5000
- #mybatis
- mybatis:
- mapper-locations: classpath*:/mapper/**Mapper.xml #把xml文件放在com.XX.mapper.*中可能会出现找到的问题,这里把他放在resource下的mapper中
- #实体扫描,多个package用逗号或者分号分隔
- typeAliasesPackage: com.tdx.account_service.entity #这里是实体类的位置
- configuration:
- map-underscore-to-camel-case: true
- cache-enabled: false
- #logging
- logging:
- level: warn

配置的东西和我们以前用mybatis配置可以说差不多,但spring boot是没有xml配置文件的。注意一下红字的内容,基本没问题了。
3、mybatis-Plus配置文件------MybatisPlusConfig,首先上图说明一下文件路径。其中MybatisPlusConfig是放在config文件夹内,而xml文件是放在resouces下mapper中。
接着就是MybatisPlusConfig内容部分了
1
|
MybatisProperties.java |

- package com.tdx.account_service.config;
- import com.alibaba.druid.pool.DruidDataSource;
- import com.alibaba.druid.support.http.StatViewServlet;
- import com.alibaba.druid.support.http.WebStatFilter;
- import com.baomidou.mybatisplus.MybatisConfiguration;
- import com.baomidou.mybatisplus.MybatisXMLLanguageDriver;
- import com.baomidou.mybatisplus.entity.GlobalConfiguration;
- import com.baomidou.mybatisplus.enums.DBType;
- import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
- import com.baomidou.mybatisplus.plugins.PerformanceInterceptor;
- import com.baomidou.mybatisplus.plugins.parser.ISqlParser;
- import com.baomidou.mybatisplus.plugins.parser.ISqlParserFilter;
- import com.baomidou.mybatisplus.plugins.parser.tenant.TenantHandler;
- import com.baomidou.mybatisplus.plugins.parser.tenant.TenantSqlParser;
- import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
- import com.baomidou.mybatisplus.spring.boot.starter.SpringBootVFS;
- import com.baomidou.mybatisplus.toolkit.PluginUtils;
- import net.sf.jsqlparser.expression.Expression;
- import net.sf.jsqlparser.expression.LongValue;
- import org.apache.ibatis.mapping.DatabaseIdProvider;
- import org.apache.ibatis.mapping.MappedStatement;
- import org.apache.ibatis.plugin.Interceptor;
- import org.apache.ibatis.reflection.MetaObject;
- import org.mybatis.spring.annotation.MapperScan;
- import org.mybatis.spring.boot.autoconfigure.MybatisProperties;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.bind.RelaxedPropertyResolver;
- import org.springframework.boot.context.properties.EnableConfigurationProperties;
- import org.springframework.boot.web.servlet.FilterRegistrationBean;
- import org.springframework.boot.web.servlet.ServletRegistrationBean;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.core.env.Environment;
- import org.springframework.core.io.DefaultResourceLoader;
- import org.springframework.core.io.ResourceLoader;
- import org.springframework.util.ObjectUtils;
- import org.springframework.util.StringUtils;
- import javax.sql.DataSource;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * code is far away from bug with the animal protecting
- * ┏┓ ┏┓
- * ┏┛┻━━━┛┻┓
- * ┃ ┃
- * ┃ ━ ┃
- * ┃ ┳┛ ┗┳ ┃
- * ┃ ┃
- * ┃ ┻ ┃
- * ┃ ┃
- * ┗━┓ ┏━┛
- * ┃ ┃神兽保佑
- * ┃ ┃代码无BUG!
- * ┃ ┗━━━┓
- * ┃ ┣┓
- * ┃ ┏┛
- * ┗┓┓┏━┳┓┏┛
- * ┃┫┫ ┃┫┫
- * ┗┻┛ ┗┻┛
- *
- *
- * @Description : MybatisPlus配置
- * ---------------------------------
- * @Author : Liang.Guangqing
- * @Date : Create in 2017/9/19 13:54
- */
- @Configuration
- @EnableConfigurationProperties(MybatisProperties.class)
- public class MybatisPlusConfig {
- @Autowired
- private Environment environment;
- private RelaxedPropertyResolver propertyResolver;
- @Autowired
- private DataSource dataSource;
- @Autowired
- private MybatisProperties properties;
- @Autowired
- private ResourceLoader resourceLoader = new DefaultResourceLoader();
- @Autowired(required = false)
- private Interceptor[] interceptors;
- @Autowired(required = false)
- private DatabaseIdProvider databaseIdProvider;
- /**
- * @Description : mybatis-plus SQL执行效率插件【生产环境可以关闭】
- * ---------------------------------
- * @Author : Liang.Guangqing
- * @Date : Create in 2017/9/19 13:57
- */
- @Bean
- public PerformanceInterceptor performanceInterceptor() {
- return new PerformanceInterceptor();
- }
- /**
- * 配置DataSource
- * @return
- * @throws SQLException
- */
- @Bean
- public DataSource druidDataSource() throws SQLException {
- this.propertyResolver = new RelaxedPropertyResolver(environment, "spring.datasource.");
- System.out.println("====================注入druid!====================");
- DruidDataSource datasource = new DruidDataSource();
- datasource.setUrl(propertyResolver.getProperty("url"));
- datasource.setDriverClassName(propertyResolver.getProperty("driver-class-name"));
- datasource.setUsername(propertyResolver.getProperty("username"));
- datasource.setPassword(propertyResolver.getProperty("password"));
- datasource.setInitialSize(Integer.valueOf(propertyResolver.getProperty("initial-size")));
- datasource.setMinIdle(Integer.valueOf(propertyResolver.getProperty("min-idle")));
- datasource.setMaxWait(Long.valueOf(propertyResolver.getProperty("max-wait")));
- datasource.setMaxActive(Integer.valueOf(propertyResolver.getProperty("max-active")));
- datasource.setMinEvictableIdleTimeMillis(Long.valueOf(propertyResolver.getProperty("min-evictable-idle-time-millis")));
- try {
- datasource.setFilters(propertyResolver.getProperty("filters"));
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return datasource;
- }
- /**
- * @Description : mybatis-plus分页插件
- * ---------------------------------
- * @Author : Liang.Guangqing
- * @Date : Create in 2017/9/19 13:59
- */
- @Bean
- public PaginationInterceptor paginationInterceptor() {
- PaginationInterceptor page = new PaginationInterceptor();
- page.setDialectType("mysql");
- return page;
- }
- /**
- * 这里全部使用mybatis-autoconfigure 已经自动加载的资源。不手动指定
- * 配置文件和mybatis-boot的配置文件同步
- * @return
- */
- @Bean
- public MybatisSqlSessionFactoryBean mybatisSqlSessionFactoryBean() {
- MybatisSqlSessionFactoryBean mybatisPlus = new MybatisSqlSessionFactoryBean();
- mybatisPlus.setDataSource(dataSource);
- mybatisPlus.setVfs(SpringBootVFS.class);
- if (StringUtils.hasText(this.properties.getConfigLocation())) {
- mybatisPlus.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation()));
- }
- mybatisPlus.setConfiguration(properties.getConfiguration());
- if (!ObjectUtils.isEmpty(this.interceptors)) {
- mybatisPlus.setPlugins(this.interceptors);
- }
- // MP 全局配置,更多内容进入类看注释
- GlobalConfiguration globalConfig = new GlobalConfiguration();
- globalConfig.setDbType(DBType.MYSQL.name());
- // ID 策略 AUTO->`0`("数据库ID自增") INPUT->`1`(用户输入ID") ID_WORKER->`2`("全局唯一ID") UUID->`3`("全局唯一ID")
- globalConfig.setIdType(2);
- mybatisPlus.setGlobalConfig(globalConfig);
- MybatisConfiguration mc = new MybatisConfiguration();
- mc.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
- mybatisPlus.setConfiguration(mc);
- if (this.databaseIdProvider != null) {
- mybatisPlus.setDatabaseIdProvider(this.databaseIdProvider);
- }
- if (StringUtils.hasLength(this.properties.getTypeAliasesPackage())) {
- mybatisPlus.setTypeAliasesPackage(this.properties.getTypeAliasesPackage());
- }
- if (StringUtils.hasLength(this.properties.getTypeHandlersPackage())) {
- mybatisPlus.setTypeHandlersPackage(this.properties.getTypeHandlersPackage());
- }
- if (!ObjectUtils.isEmpty(this.properties.resolveMapperLocations())) {
- mybatisPlus.setMapperLocations(this.properties.resolveMapperLocations());
- }
- return mybatisPlus;
- }
- /**
- * 注册一个StatViewServlet
- * @return
- */
- @Bean
- public ServletRegistrationBean DruidStatViewServle(){
- //org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册.
- ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
- //添加初始化参数:initParams
- //白名单:
- // servletRegistrationBean.addInitParameter("allow","127.0.0.1");
- //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page.
- // servletRegistrationBean.addInitParameter("deny","192.168.1.73");
- //登录查看信息的账号密码.
- servletRegistrationBean.addInitParameter("loginUsername","root");
- servletRegistrationBean.addInitParameter("loginPassword","root");
- //是否能够重置数据.
- servletRegistrationBean.addInitParameter("resetEnable","false");
- return servletRegistrationBean;
- }
- /**
- * 注册一个:filterRegistrationBean
- *
- * @return
- */
- @Bean
- public FilterRegistrationBean druidStatFilter(){
- FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
- //添加过滤规则.
- filterRegistrationBean.addUrlPatterns("/*");
- //添加不需要忽略的格式信息.
- filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
- return filterRegistrationBean;
- }
- }

这里是完整的配置文件,需要注意的是引入的包,别引错了!
4、还要开启dao的扫描,很简单,就是在启动文件中添加@MapperScan("com.tdx.account_service.dao*"),如下是完整的
到这里,配置算是完成了,运行一下项目是可以运行起来的。
我觉得Mybatis-Plus最好玩得应该是代码生成器这部分内容,下面是代码生成器的使用过程
pom.xml上要加点东西
- <dependency>
- <groupId>org.apache.velocity</groupId>
- <artifactId>velocity-engine-core</artifactId>
- <version>2.0</version>
- </dependency>
1、代码生成器的配置文件
- MybatisPlusConfig.java

- /**
- * Copyright (c) 2011-2016, hubin (jobob@qq.com).
- * <p>
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
- package com.tdx.account_service.generator;
- import java.io.File;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import com.baomidou.mybatisplus.enums.FieldFill;
- 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.converts.MySqlTypeConvert;
- import com.baomidou.mybatisplus.generator.config.po.TableFill;
- import com.baomidou.mybatisplus.generator.config.po.TableInfo;
- import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
- import com.baomidou.mybatisplus.generator.config.rules.DbType;
- import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
- /**
- *code is far away from bug with the animal protecting
- * ┏┓ ┏┓
- *┏┛┻━━━┛┻┓
- *┃ ┃
- *┃ ━ ┃
- *┃ ┳┛ ┗┳ ┃
- *┃ ┃
- *┃ ┻ ┃
- *┃ ┃
- *┗━┓ ┏━┛
- * ┃ ┃神兽保佑
- * ┃ ┃代码无BUG!
- * ┃ ┗━━━┓
- * ┃ ┣┓
- * ┃ ┏┛
- * ┗┓┓┏━┳┓┏┛
- * ┃┫┫ ┃┫┫
- * ┗┻┛ ┗┻┛
- *
- * @Description : MybatisPlus代码生成器
- * ---------------------------------
- * @Author : Liang.Guangqing
- * @Date : Create in 2017/9/19 14:48
- */
- public class MysqlGenerator {
- private static String packageName="account_service"; //文件路径
- private static String authorName="Liang.Guangqing"; //作者
- private static String table="sc_user"; //table名字
- private static String prefix="sc_"; //table前缀
- private static File file = new File(packageName);
- private static String path = file.getAbsolutePath();
- public static void main(String[] args) {
- // 自定义需要填充的字段
- List<TableFill> tableFillList = new ArrayList<>();
- tableFillList.add(new TableFill("ASDD_SS", FieldFill.INSERT_UPDATE));
- // 代码生成器
- AutoGenerator mpg = new AutoGenerator().setGlobalConfig(
- // 全局配置
- new GlobalConfig()
- .setOutputDir(path+"/src/main/java")//输出目录
- .setFileOverride(true)// 是否覆盖文件
- .setActiveRecord(true)// 开启 activeRecord 模式
- .setEnableCache(false)// XML 二级缓存
- .setBaseResultMap(true)// XML ResultMap
- .setBaseColumnList(true)// XML columList
- .setOpen(false)//生成后打开文件夹
- .setAuthor(authorName)
- // 自定义文件命名,注意 %s 会自动填充表实体属性!
- .setMapperName("%sMapper")
- .setXmlName("%sMapper")
- .setServiceName("%sService")
- .setServiceImplName("%sServiceImpl")
- .setControllerName("%sController")
- ).setDataSource(
- // 数据源配置
- new DataSourceConfig()
- .setDbType(DbType.MYSQL)// 数据库类型
- .setTypeConvert(new MySqlTypeConvert() {
- // 自定义数据库表字段类型转换【可选】
- @Override
- public DbColumnType processTypeConvert(String fieldType) {
- System.out.println("转换类型:" + fieldType);
- // if ( fieldType.toLowerCase().contains( "tinyint" ) ) {
- // return DbColumnType.BOOLEAN;
- // }
- return super.processTypeConvert(fieldType);
- }
- })
- .setDriverName("com.mysql.jdbc.Driver")
- .setUsername("root")
- .setPassword("root")
- .setUrl("jdbc:mysql://127.0.0.1:3306/tdx_shop?characterEncoding=utf8")
- ).setStrategy(
- // 策略配置
- new StrategyConfig()
- // .setCapitalMode(true)// 全局大写命名
- //.setDbColumnUnderline(true)//全局下划线命名
- .setTablePrefix(new String[]{prefix})// 此处可以修改为您的表前缀
- .setNaming(NamingStrategy.underline_to_camel)// 表名生成策略
- .setInclude(new String[] { table }) // 需要生成的表
- .setRestControllerStyle(true)
- //.setExclude(new String[]{"test"}) // 排除生成的表
- // 自定义实体父类
- // .setSuperEntityClass("com.baomidou.demo.TestEntity")
- // 自定义实体,公共字段
- //.setSuperEntityColumns(new String[]{"test_id"})
- .setTableFillList(tableFillList)
- // 自定义 mapper 父类
- // .setSuperMapperClass("com.baomidou.demo.TestMapper")
- // 自定义 service 父类
- // .setSuperServiceClass("com.baomidou.demo.TestService")
- // 自定义 service 实现类父类
- // .setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl")
- // 自定义 controller 父类
- .setSuperControllerClass("com.tdx."+packageName+".controller.AbstractController")
- // 【实体】是否生成字段常量(默认 false)
- // public static final String ID = "test_id";
- // .setEntityColumnConstant(true)
- // 【实体】是否为构建者模型(默认 false)
- // public User setName(String name) {this.name = name; return this;}
- // .setEntityBuilderModel(true)
- // 【实体】是否为lombok模型(默认 false)<a href="https://projectlombok.org/">document</a>
- // .setEntityLombokModel(true)
- // Boolean类型字段是否移除is前缀处理
- // .setEntityBooleanColumnRemoveIsPrefix(true)
- // .setRestControllerStyle(true)
- // .setControllerMappingHyphenStyle(true)
- ).setPackageInfo(
- // 包配置
- new PackageConfig()
- //.setModuleName("User")
- .setParent("com.tdx."+packageName)// 自定义包路径
- .setController("controller")// 这里是控制器包名,默认 web
- .setEntity("entity")
- .setMapper("dao")
- .setService("service")
- .setServiceImpl("service.impl")
- //.setXml("mapper")
- ).setCfg(
- // 注入自定义配置,可以在 VM 中使用 cfg.abc 设置的值
- new InjectionConfig() {
- @Override
- public void initMap() {
- Map<String, Object> map = new HashMap<>();
- map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
- this.setMap(map);
- }
- }.setFileOutConfigList(Collections.<FileOutConfig>singletonList(new FileOutConfig("/templates/mapper.xml.vm") {
- // 自定义输出文件目录
- @Override
- public String outputFile(TableInfo tableInfo) {
- return path+"/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper.xml";
- }
- }))
- ).setTemplate(
- // 关闭默认 xml 生成,调整生成 至 根目录
- new TemplateConfig().setXml(null)
- // 自定义模板配置,模板可以参考源码 /mybatis-plus/src/main/resources/template 使用 copy
- // 至您项目 src/main/resources/template 目录下,模板名称也可自定义如下配置:
- // .setController("...");
- // .setEntity("...");
- // .setMapper("...");
- // .setXml("...");
- // .setService("...");
- // .setServiceImpl("...");
- );
- // 执行生成
- mpg.execute();
- // 打印注入设置,这里演示模板里面怎么获取注入内容【可无】
- System.err.println(mpg.getCfg().getMap().get("abc"));
- }
- }

文件中修改的内容还是很多的,最主要的还是mysql的连接信息,没理由你账号,密码都错了还能连得上吧,其次设置一下你生成的模板文件路径,我这里生成的路径在上面图可以看得到,是在com.tdx.account_service下的,注意,xml文件要放在resources下,不然是识别的,说找不到这个方法
按照官网的代码模板生成的文件基本是白白的,主要是mybatis-Plus集成了公共方法,很多常用的工具都可以引用了。在这里我提供一下我修改后Controller.java.vm文件,主要还是按照我自己的习惯去弄的
controller.java.vm

- package ${package.Controller};
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- #if(${restControllerStyle})
- import org.springframework.web.bind.annotation.RequestMethod;
- import org.springframework.web.bind.annotation.RestController;
- #else
- import org.springframework.stereotype.Controller;
- #end
- #if(${superControllerClassPackage})
- import ${superControllerClassPackage};
- #end
- import org.springframework.beans.factory.annotation.Autowired;
- import com.baomidou.mybatisplus.mapper.EntityWrapper;
- import com.baomidou.mybatisplus.plugins.Page;
- import ${package.Service}.${table.serviceName};
- import ${package.Entity}.common.DatatablesJSON;
- import ${package.Entity}.common.JSONResult;
- import ${package.Entity}.${entity};
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- /**
- *code is far away from bug with the animal protecting
- * ┏┓ ┏┓
- *┏┛┻━━━┛┻┓
- *┃ ┃
- *┃ ━ ┃
- *┃ ┳┛ ┗┳ ┃
- *┃ ┃
- *┃ ┻ ┃
- *┃ ┃
- *┗━┓ ┏━┛
- * ┃ ┃神兽保佑
- * ┃ ┃代码无BUG!
- * ┃ ┗━━━┓
- * ┃ ┣┓
- * ┃ ┏┛
- * ┗┓┓┏━┳┓┏┛
- * ┃┫┫ ┃┫┫
- * ┗┻┛ ┗┻┛
- *
- * @description : ${entity} 控制器
- * ---------------------------------
- * @author ${author}
- * @since ${date}
- */
- #if(${restControllerStyle})
- @RestController
- #else
- @Controller
- #end
- @RequestMapping("#if(${package.ModuleName})/${package.ModuleName}#end/#if(${controllerMappingHyphenStyle})${controllerMappingHyphen}#else${table.entityPath}#end")
- #if(${superControllerClass})
- public class ${table.controllerName} extends ${superControllerClass} {
- #else
- public class ${table.controllerName} {
- #end
- private final Logger logger = LoggerFactory.getLogger(${table.controllerName}.class);
- @Autowired
- public ${table.serviceName} ${table.entityPath}Service;
- /**
- * @description : 获取分页列表
- * ---------------------------------
- * @author : ${author}
- * @since : Create in ${date}
- */
- @RequestMapping(value = "/get${entity}List",method = RequestMethod.POST)
- public Object get${entity}List(${entity} param , @RequestParam(value = "draw",defaultValue = "0") Integer draw,
- @RequestParam(value = "length") Integer length,
- @RequestParam(value = "start") Integer start) {
- DatatablesJSON<${entity}> resJson=new DatatablesJSON<>();
- try {
- Integer pageNo=getPageNo(start,length);
- Page<${entity}> page=new Page<${entity}>(pageNo,length);
- ${table.entityPath}Service.selectPage(page,new EntityWrapper<${entity}>(param));
- resJson.setDraw(draw++);
- resJson.setRecordsTotal(page.getTotal());
- resJson.setRecordsFiltered(page.getTotal());
- resJson.setData(page.getRecords());
- resJson.setSuccess(true);
- }catch (Exception e){
- resJson.setSuccess(false);
- resJson.setError("异常信息:{"+e.getClass().getName()+"}");
- logger.info("异常信息:{}"+e.getMessage());
- }
- return resJson;
- }
- /**
- * @description : 通过id获取${entity}
- * ---------------------------------
- * @author : ${author}
- * @since : Create in ${date}
- */
- @RequestMapping(value = "/get${entity}ById",method = RequestMethod.GET)
- public Object get${entity}ById(String id) {
- JSONResult<${entity}> resJson = new JSONResult<>();
- try {
- ${entity} param= ${table.entityPath}Service.selectById(id);
- resJson.setData(param);
- resJson.setSuccess(true);
- }catch (Exception e) {
- resJson.setSuccess(false);
- resJson.setMessage("异常信息:{"+e.getClass().getName()+"}");
- logger.info("异常信息:{}"+e.getMessage());
- }
- return resJson;
- }
- /**
- * @description : 通过id删除${entity}
- * ---------------------------------
- * @author : ${author}
- * @since : Create in ${date}
- */
- @RequestMapping(value = "/delete${entity}ById",method = RequestMethod.GET)
- public Object delete${entity}ById(String id) {
- JSONResult<${entity}> resJson = new JSONResult<>();
- try{
- resJson.setSuccess(${table.entityPath}Service.deleteById(id));
- }catch (Exception e) {
- resJson.setSuccess(false);
- resJson.setMessage("异常信息:{"+e.getClass().getName()+"}");
- logger.info("异常信息:{}"+e.getMessage());
- }
- return resJson;
- }
- /**
- * @description : 通过id更新${entity}
- * ---------------------------------
- * @author : ${author}
- * @since : Create in ${date}
- */
- @RequestMapping(value = "/update${entity}ById",method = RequestMethod.POST)
- public Object update${entity}ById(${entity} param) {
- JSONResult<${entity}> resJson = new JSONResult<>();
- try{
- resJson.setSuccess(${table.entityPath}Service.updateById(param));
- }catch (Exception e) {
- resJson.setSuccess(false);
- resJson.setMessage("异常信息:{"+e.getClass().getName()+"}");
- logger.info("异常信息:{}"+e.getMessage());
- }
- return resJson;
- }
- /**
- * @description : 添加${entity}
- * ---------------------------------
- * @author : ${author}
- * @since : Create in ${date}
- */
- @RequestMapping(value = "/add${entity}",method = RequestMethod.POST)
- public Object add${entity}(${entity} param) {
- JSONResult<${entity}> resJson = new JSONResult<>();
- try{
- resJson.setSuccess(${table.entityPath}Service.insert(param));
- }catch (Exception e) {
- resJson.setSuccess(false);
- resJson.setMessage("异常信息:{"+e.getClass().getName()+"}");
- logger.info("异常信息:{}"+e.getMessage());
- }
- return resJson;
- }
- }

除了这个文件,其他代码模板我都是按照官网那样的,这里引用3个外部的文件,有AbstractController.java(控制器基类)、DatatablesJSON.java和JSONResult.java,然后这些文件又引用了其他文件,我懵逼了,怎么文件这么多啊,看来如果全部都贴上来得多占地方啊,所以我选择相信码云,如果需要请在码云上按照少的文件下载,码云地址。需要注意的是,我的模板是直接代替了mybatis-plus.jar中的templates目录。
最后就到了测试过程
下面的代码段都是放在Controller文件里面,然后启动程序,对应端口,请求方法。测试的话是需要按照自己的实体类操作的,所以仅供参考。

- /**
- * 分页 PAGE
- */
- @GetMapping("/test")
- public Page<User> test() {
- return userService.selectPage(new Page<User>(0, 12));
- }
- /**
- * AR 部分测试
- */
- @GetMapping("/test1")
- public Page<User> test1() {
- User user = new User();
- System.err.println("删除所有:" + user.delete(null));
- //user.setId(2017091801L);
- user.setAccout("test"+num++);
- user.setType("test");
- user.setCreateTime(new Date());
- user.setPhone("13111110000");
- user.setPassword("123456");
- user.setNickname("guangqing"+2*num++);
- user.insert();
- System.err.println("查询插入结果:" + user.selectById().toString());
- //user.setNickname("mybatis-plus-ar");
- System.err.println("更新:" + user.updateById());
- return user.selectPage(new Page<User>(0, 12), null);
- }
- /**
- * 增删改查 CRUD
- */
- @GetMapping("/test2")
- public User test2() {
- User user = new User();
- user.setId(123456L);
- user.setAccout("test");
- user.setType("test");
- user.setCreateTime(new Date());
- user.setPhone("13111110000");
- user.setPassword("123456");
- user.setNickname("guangqing");
- System.err.println("删除一条数据:" + userService.deleteById(1L));
- System.err.println("插入一条数据:" + userService.insert(user));
- User user2 = new User();
- user.setId(223456L);
- user.setAccout("test2");
- user.setType("test");
- user.setCreateTime(new Date());
- user.setPhone("13111110000");
- user.setPassword("123456");
- user.setNickname("guangqing");
- boolean result = userService.insert(user);
- // 自动回写的ID
- Long id = user.getId();
- System.err.println("插入一条数据:" + result + ", 插入信息:" + user.toString());
- System.err.println("查询:" + userService.selectById(id).toString());
- Page<User> userListPage = userService.selectPage(new Page<User>(1, 5), new EntityWrapper<>(new User()));
- System.err.println("total=" + userListPage.getTotal() + ", current list size=" + userListPage.getRecords().size());
- return userService.selectById(1L);
- }
- @GetMapping("testSelect")
- public Object testSelect() {
- Integer start = 0;
- Integer length =10;
- User param = new User();
- //param.setNickname("guangqing2");
- Integer pageNo=getPageNo(start,length);
- Page<User> page =new Page<User>(pageNo,length);
- EntityWrapper<User> ew = new EntityWrapper<User>();
- ew.setEntity(param);
- ew.where("password={0}","123456")
- .like("nickname","guangqing")
- .ge("create_time","2017-09-21 15:50:00");
- userService.selectPage(page, ew);
- DatatablesJSON<User> resJson= new DatatablesJSON<>();
- //resJson.setDraw(draw++);
- resJson.setRecordsTotal(page.getTotal());
- resJson.setRecordsFiltered(page.getTotal());
- resJson.setData(page.getRecords());
- return resJson;
- }
- @GetMapping("/selectsql")
- public Object getUserBySql() {
- JSONObject result = new JSONObject();
- result.put("records", userService.selectListBySQL());
- return result;
- }
- /**
- * 7、分页 size 一页显示数量 current 当前页码
- * 方式一:http://localhost:8080/user/page?size=1¤t=1<br>
- * 方式二:http://localhost:8080/user/pagehelper?size=1¤t=1<br>
- */
- // 参数模式分页
- @GetMapping("/page")
- public Object page(Page page) {
- return userService.selectPage(page);
- }
- // ThreadLocal 模式分页
- @GetMapping("/pagehelper")
- public Object pagehelper(Page page) {
- PageHelper.setPagination(page);
- page.setRecords(userService.selectList(null));
- page.setTotal(PageHelper.freeTotal());//获取总数并释放资源 也可以 PageHelper.getTotal()
- return page;
- }
- /**
- * 测试事物
- * http://localhost:8080/user/test_transactional<br>
- * 访问如下并未发现插入数据说明事物可靠!!<br>
- * http://localhost:8080/user/test<br>
- * <br>
- * 启动 Application 加上 @EnableTransactionManagement 注解其实可无默认貌似就开启了<br>
- * 需要事物的方法加上 @Transactional 必须的哦!!
- */
- @Transactional
- @GetMapping("/test_transactional")
- public void testTransactional() {
- //userService.insert(new User(1000L, "测试事物", 16, 3));
- System.out.println(" 这里手动抛出异常,自动回滚数据");
- throw new RuntimeException();
- }

这么多的测试,我觉得最有趣的是条件构造器,在官网上有更齐全的,而我这里是按照我自己的需求写的。
最后谢谢大家的观看,写博客经验不足,写得不好请见谅,如果能给你带来帮助请点个赞,若遇到不明白的,或者我有写错的地方请提出,谢谢!
引自https://www.cnblogs.com/lianggp/p/7573653.html
spring boot整合mybatis+mybatis-plus的更多相关文章
- Spring Boot整合tk.mybatis及pageHelper分页插件及mybatis逆向工程
Spring Boot整合druid数据源 1)引入依赖 <dependency> <groupId>com.alibaba</groupId> <artif ...
- spring boot 2.x 系列 —— spring boot 整合 druid+mybatis
源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构 项目查询用的表对应的建表语句放置在resour ...
- spring boot整合 springmvc+mybatis
需要以下依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId&g ...
- Spring Boot 整合 Druid
Spring Boot 整合 Druid 概述 Druid 是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池.插件框架和 SQL 解析器组成.该项目主要是为了扩展 JDBC 的一些限制,可以让程 ...
- Spring Boot整合Mybatis并完成CRUD操作
MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...
- Spring boot整合Mybatis
时隔两个月的再来写博客的感觉怎么样呢,只能用“棒”来形容了.闲话少说,直接入正题,之前的博客中有说过,将spring与mybatis整个后开发会更爽,基于现在springboot已经成为整个业界开发主 ...
- spring boot 整合 mybatis 以及原理
同上一篇文章一样,spring boot 整合 mybatis过程中没有看见SqlSessionFactory,sqlsession(sqlsessionTemplate),就连在spring框架整合 ...
- Spring Boot 中使用 MyBatis 整合 Druid 多数据源
2017 年 10 月 20 日 Spring Boot 中使用 MyBatis 整合 Druid 多数据源 本文将讲述 spring boot + mybatis + druid 多数据源配置方 ...
- Spring Boot 整合mybatis时遇到的mapper接口不能注入的问题
现实情况是这样的,因为在练习spring boot整合mybatis,所以自己新建了个项目做测试,可是在idea里面mapper接口注入报错,后来百度查询了下,把idea的注入等级设置为了warnin ...
- Spring Boot整合Mybatis报错InstantiationException: tk.mybatis.mapper.provider.base.BaseSelectProvider
Spring Boot整合Mybatis时一直报错 后来发现原来主配置类上的MapperScan导错了包 由于我使用了通用Mapper,所以应该导入通用mapper这个包
随机推荐
- usb3.0 monitor is already started
用360 开机加速里找到这个程序,把它从开机启动中删除掉就好.
- Qt Quick自定义样式一套
弄了几个月的Qt,基本上以写上位机程序和工厂用的一些工具为主.老大的要求是快速.稳定.不出问题,不过他嫌.net要安装.还有升级(刚开始的时候由于这个出了些小问题),MFC开发东西又实在费劲,就让我找 ...
- Codeforces.997C.Sky Full of Stars(容斥 计数)
题目链接 那场完整的Div2(Div1 ABC)在这儿.. \(Description\) 给定\(n(n\leq 10^6)\),用三种颜色染有\(n\times n\)个格子的矩形,求至少有一行或 ...
- spring data jpa在使用PostgreSQL表名大小写的问题解决
国内的文章看了一遍,其实没找到根本问题解决方法,下面将列举这一系列的问题解决方法: 1.在配置文件增加如下配置: spring.jpa.hibernate.naming.physical-strate ...
- 异步接收MSMQ消息
在这部分,我们将使用ThreadPool 和MSMQ 进行消息收发.MSMQ 是一个分布式队列,通过MSMQ 一个应用程序可以异步地与另外一个应用程序通信. 在一个典型的场景中,我们要向维护一个队列的 ...
- Snmp学习总结(五)——WindowsServer2008安装和配置SNMP
一.安装SNMP 在Windows Server 2008以及Windows Server 2008 R2中,SNMP是以一个服务器功能的形式存在的,SNMP的安装步骤如下所示: 1.打开[开始]→[ ...
- JSP页面中使用JSTL标签出现无法解析问题解决办法
今天建立一个JavaWeb工程测试JNDI数据源连接,在jsp页面中引入了JSLT标签库,代码如下: <%@ page language="java" import=&quo ...
- redis实现异步任务队列
redis实现异步任务队列 先说思路: 将任务对象序列为JSON字符串,然后推入REDIS缓存,这叫入队. 通过独立的工作线程从REDIS拉出一个任务,这叫出队,工作线程将JSON字符串还原为任务对象 ...
- iPhone上将短信内容发送到指定邮箱的方法
iPhone上将短信内容发送到指定邮箱的方法 迄今为止,移动应用安全基本聚焦在以下几个方面,一是移动设备管理BYOD(bring your own device),二是移动恶意软件分析,三是移动设备用 ...
- 安装oracle 11g环境变量ORACLE_HOME的一个问题 转
http://blog.itpub.net/26129555/viewspace-1243467/报错内容: OUI-10137:An Oracle Home with name ORACLE_HOM ...