亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

spring boot整合mybatis+mybatis-plus的示例代碼

2024-07-13 10:17:33
字體:
來源:轉載
供稿:網友

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#springspring: 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#mybatismybatis: 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#logginglogging: level: warn

配置的東西和我們以前用mybatis配置可以說差不多,但spring boot是沒有xml配置文件的。注意一下紅字的內容,基本沒問題了。

3、mybatis-Plus配置文件------MybatisPlusConfig,首先上圖說明一下文件路徑。其中MybatisPlusConfig是放在config文件夾內,而xml文件是放在resouces下mapper中。

spring,boot整合mybatis-plus,boot,mybatis,plus

接著就是MybatisPlusConfig內容部分了

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*"),如下是完整的

spring,boot整合mybatis-plus,boot,mybatis,plus

到這里,配置算是完成了,運行一下項目是可以運行起來的。

我覺得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/" rel="external nofollow" >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;#elseimport org.springframework.stereotype.Controller;#end#if(${superControllerClassPackage})import ${superControllerClassPackage};#endimport 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} {#elsepublic 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();  }

這么多的測試,我覺得最有趣的是條件構造器,在官網上有更齊全的,而我這里是按照我自己的需求寫的。

最后謝謝大家的觀看,寫博客經驗不足,寫得不好請見諒,如果能給你帶來幫助請點個贊,若遇到不明白的,或者我有寫錯的地方請提出,謝謝!也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频网| 国产亚洲精品91在线| 日韩hd视频在线观看| 日韩在线中文字| 欧美日韩高清区| 成人中文字幕+乱码+中文字幕| 国产精品美女在线观看| 国产主播欧美精品| 亚洲美女又黄又爽在线观看| 日韩中文字幕在线免费观看| 中文字幕亚洲综合久久| 亚洲欧美日韩中文在线制服| 日本高清久久天堂| 九九久久久久久久久激情| 亚洲精品资源在线| 亚洲最大福利视频网| 国产精品网红直播| 欧美视频一二三| 亚洲人成网站在线播| 日韩国产欧美精品一区二区三区| 中文字幕在线看视频国产欧美在线看完整| 国产专区欧美专区| 国产在线精品播放| 国产suv精品一区二区| 欧美激情第一页xxx| 国内精品久久久久影院优| 亚洲性视频网址| 欧美国产高跟鞋裸体秀xxxhd| 在线播放国产一区中文字幕剧情欧美| 久久99国产精品自在自在app| 一本一本久久a久久精品牛牛影视| 欧美在线视频免费播放| 亚洲天堂av综合网| 欧美成年人视频网站欧美| 欧美人在线观看| 亚洲在线视频观看| 日本一区二区在线免费播放| 欧美激情一级欧美精品| 久久成人亚洲精品| 精品国产91乱高清在线观看| 国产精品女主播视频| 日韩精品视频在线观看免费| 欧美一级电影免费在线观看| 91亚洲精品一区| 日韩大片免费观看视频播放| 欧美日韩亚洲一区二区三区| 欧美做爰性生交视频| 欧美日韩国产综合视频在线观看中文| 亚洲xxxx18| 日韩视频亚洲视频| 成人午夜在线观看| 中文字幕亚洲欧美日韩2019| 日韩欧美一区二区三区| 国内精品久久久久久影视8| 亚洲精品自拍偷拍| 欧美激情极品视频| 92福利视频午夜1000合集在线观看| 国产成人精品在线视频| www.亚洲免费视频| 欧美电影电视剧在线观看| 亚洲免费福利视频| 久久久999国产精品| 国产亚洲激情在线| 欲色天天网综合久久| 国产va免费精品高清在线观看| 亚洲精品国产精品自产a区红杏吧| 国内精品久久久久影院优| 日韩免费不卡av| 黑人巨大精品欧美一区二区| 国产在线拍揄自揄视频不卡99| 久久精品成人动漫| 国语自产在线不卡| 国产精品视频最多的网站| 亚洲精品国产拍免费91在线| 国产精品久久久久久网站| 国产日韩欧美中文在线播放| 久久精品国产91精品亚洲| 午夜精品久久久久久久99黑人| 国产精品极品美女在线观看免费| 国产精品九九九| 国产精品香蕉在线观看| 九九热这里只有精品6| 成人精品aaaa网站| 欧美激情一区二区三区成人| 国产精品视频资源| 1769国内精品视频在线播放| 日韩国产高清视频在线| 欧美在线一级va免费观看| 亚洲精品视频网上网址在线观看| 亚洲精品97久久| 中文字幕综合一区| 亚洲福利精品在线| 久99久在线视频| 日韩精品中文字幕有码专区| 日本欧美国产在线| 日本国产欧美一区二区三区| 91国产美女在线观看| 欧美精品少妇videofree| 色99之美女主播在线视频| 日韩精品在线观看网站| 亚洲免费一在线| 欧美精品久久久久久久免费观看| 91免费精品视频| 日本精品va在线观看| 国产一区二中文字幕在线看| 777777777亚洲妇女| 欧美色videos| 亚洲欧美国产日韩中文字幕| 欧美小视频在线观看| 欧美激情中文字幕在线| 国产精品福利在线| 欧美丰满少妇xxxxx| 高清在线视频日韩欧美| 九九九久久久久久| 久久久久久久色| 欧美高跟鞋交xxxxxhd| 911国产网站尤物在线观看| 亚洲女同精品视频| 丝袜一区二区三区| 最近2019中文字幕在线高清| 综合网日日天干夜夜久久| 91九色蝌蚪国产| 国产精品视频网址| 国产99久久精品一区二区永久免费| 欧美日韩精品在线| 久热精品视频在线观看| 久久久国产影院| 69av视频在线播放| 久精品免费视频| 一本一道久久a久久精品逆3p| 亚洲成人av在线播放| 国产91精品高潮白浆喷水| 色偷偷噜噜噜亚洲男人的天堂| 久久久久久久999精品视频| 国产精品678| 精品国偷自产在线视频99| 一本色道久久综合狠狠躁篇怎么玩| 国产精品国产三级国产专播精品人| 国产亚洲欧美另类中文| 色综合久久悠悠| 成人久久18免费网站图片| 97香蕉久久夜色精品国产| 日日骚av一区| 亚洲精品国产美女| 亚洲变态欧美另类捆绑| 精品国产欧美一区二区三区成人| 日韩精品免费在线视频观看| 欧美日韩一区二区在线播放| 中文字幕自拍vr一区二区三区| 北条麻妃在线一区二区| 91av在线网站| 在线视频亚洲欧美| 亚洲欧美另类人妖| 国产一区二区三区久久精品| 欧洲永久精品大片ww免费漫画| 最新国产成人av网站网址麻豆| 精品久久久久国产| 亚洲wwwav| 精品福利樱桃av导航| 国产精品18久久久久久麻辣| 欧美国产精品va在线观看| 91中文字幕一区| 麻豆一区二区在线观看| 欧美高清在线播放|