一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - spring boot整合mybatis+mybatis-plus的示例代碼

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

2021-03-28 16:23涼瓜皮 Java教程

這篇文章主要介紹了spring boot整合mybatis+mybatis-plus的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Spring boot對于我來說是一個剛接觸的新東西,學(xué)習(xí)過程中,發(fā)現(xiàn)這東西還是很容易上手的,Spring boot沒配置時會默認(rèn)使用Spring data jpa,這東西可以說一個極簡潔的工具,可是我還是比較喜歡用mybatis,工具是沒有最好的,只有這合適自己的。

說到mybatis,最近有一個很好用的工具--------mybatis-Plus(官網(wǎng)),現(xiàn)在更新的版本是2.1.2,這里使用的也是這個版本。我比較喜歡的功能是代碼生成器,條件構(gòu)造器,這樣就可以更容易的去開發(fā)了。

mybatisPlus官網(wǎng)上是有Spring boot整個的例子的,我也跟著它走了一篇,結(jié)果,程序沒跑起來,后來才知道demo用的H2 database,和mysql根本不是同一樣?xùn)|西,所以各位想要整合mybatisPlus,可以不看官網(wǎng)的,可以少走彎路。

下面就是整合的過程

1、首先要把需要的jar文件都弄過來,pom.xml需要的東西如下

pom.xml(不完整)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!-- 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阿里巴巴數(shù)據(jù)庫連接池 -->
<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相關(guān)的配置,如賬號、密碼等。這里我使用了application.yml來配。

application.yml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
server:
  port: 8080
 
#spring
spring:
 devtools:
  restart:
   enabled: true   #這里是為了熱部署的,與mybatis是無關(guān)的
 
 #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.*中可能會出現(xiàn)找到的問題,這里把他放在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配置文件的。注意一下紅字的內(nèi)容,基本沒問題了。

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

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

接著就是MybatisPlusConfig內(nèi)容部分了

MybatisProperties.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
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執(zhí)行效率插件【生產(chǎn)環(huán)境可以關(guān)閉】
   * ---------------------------------
   * @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 已經(jīng)自動加載的資源。不手動指定
   * 配置文件和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 全局配置,更多內(nèi)容進入類看注釋
    GlobalConfiguration globalConfig = new GlobalConfiguration();
    globalConfig.setDbType(DBType.MYSQL.name());
    // ID 策略 AUTO->`0`("數(shù)據(jù)庫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/*");
    //添加初始化參數(shù):initParams
    //白名單:
    // servletRegistrationBean.addInitParameter("allow","127.0.0.1");
    //IP黑名單 (存在共同時,deny優(yōu)先于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");
    //是否能夠重置數(shù)據(jù).
    servletRegistrationBean.addInitParameter("resetEnable","false");
    return servletRegistrationBean;
  }
 
  /**
   * 注冊一個:filterRegistrationBean
   *
   * @return
   */
  @Bean
  public FilterRegistrationBean druidStatFilter(){
    FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
    //添加過濾規(guī)則.
    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+mybatis-plus的示例代碼

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

我覺得Mybatis-Plus最好玩得應(yīng)該是代碼生成器這部分內(nèi)容,下面是代碼生成器的使用過程

pom.xml上要加點東西

?
1
2
3
4
5
<dependency>
  <groupId>org.apache.velocity</groupId>
  <artifactId>velocity-engine-core</artifactId>
  <version>2.0</version>
</dependency>

1、代碼生成器的配置文件

MybatisPlusConfig.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
/**
 * Copyright (c) 2011-2016, hubin ([email protected]).
 * <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(
        // 數(shù)據(jù)源配置
        new DataSourceConfig()
            .setDbType(DbType.MYSQL)// 數(shù)據(jù)庫類型
            .setTypeConvert(new MySqlTypeConvert() {
              // 自定義數(shù)據(jù)庫表字段類型轉(zhuǎn)換【可選】
              @Override
              public DbColumnType processTypeConvert(String fieldType) {
                System.out.println("轉(zhuǎn)換類型:" + 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 實現(xiàn)類父類
        // .setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl")
        // 自定義 controller 父類
        .setSuperControllerClass("com.tdx."+packageName+".controller.AbstractController")
        // 【實體】是否生成字段常量(默認(rèn) false)
        // public static final String ID = "test_id";
        // .setEntityColumnConstant(true)
        // 【實體】是否為構(gòu)建者模型(默認(rèn) false)
        // public User setName(String name) {this.name = name; return this;}
        // .setEntityBuilderModel(true)
        // 【實體】是否為lombok模型(默認(rèn) 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")// 這里是控制器包名,默認(rèn) web
            .setEntity("entity")
            .setMapper("dao")
            .setService("service")
            .setServiceImpl("service.impl")
            //.setXml("mapper")
    ).setCfg(
        // 注入自定義配置,可以在 VM 中使用 cfg.abc 設(shè)置的值
        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(
        // 關(guān)閉默認(rèn) xml 生成,調(diào)整生成 至 根目錄
        new TemplateConfig().setXml(null)
        // 自定義模板配置,模板可以參考源碼 /mybatis-plus/src/main/resources/template 使用 copy
        // 至您項目 src/main/resources/template 目錄下,模板名稱也可自定義如下配置:
        // .setController("...");
        // .setEntity("...");
        // .setMapper("...");
        // .setXml("...");
        // .setService("...");
        // .setServiceImpl("...");
    );
 
    // 執(zhí)行生成
    mpg.execute();
 
    // 打印注入設(shè)置,這里演示模板里面怎么獲取注入內(nèi)容【可無】
    System.err.println(mpg.getCfg().getMap().get("abc"));
  }
}

文件中修改的內(nèi)容還是很多的,最主要的還是mysql的連接信息,沒理由你賬號,密碼都錯了還能連得上吧,其次設(shè)置一下你生成的模板文件路徑,我這里生成的路徑在上面圖可以看得到,是在com.tdx.account_service下的,注意,xml文件要放在resources下,不然是識別的,說找不到這個方法

按照官網(wǎng)的代碼模板生成的文件基本是白白的,主要是mybatis-Plus集成了公共方法,很多常用的工具都可以引用了。在這里我提供一下我修改后Controller.java.vm文件,主要還是按照我自己的習(xí)慣去弄的

controller.java.vm

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
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;
  }
}

除了這個文件,其他代碼模板我都是按照官網(wǎng)那樣的,這里引用3個外部的文件,有AbstractController.java(控制器基類)、DatatablesJSON.java和JSONResult.java,然后這些文件又引用了其他文件,我懵逼了,怎么文件這么多啊,看來如果全部都貼上來得多占地方啊,所以我選擇相信碼云,如果需要請在碼云上按照少的文件下載,碼云地址。需要注意的是,我的模板是直接代替了mybatis-plus.jar中的templates目錄。

最后就到了測試過程

下面的代碼段都是放在Controller文件里面,然后啟動程序,對應(yīng)端口,請求方法。測試的話是需要按照自己的實體類操作的,所以僅供參考。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/**
 * 分頁 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("查詢插入結(jié)果:" + 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("刪除一條數(shù)據(jù):" + userService.deleteById(1L));
  System.err.println("插入一條數(shù)據(jù):" + 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("插入一條數(shù)據(jù):" + 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 一頁顯示數(shù)量 current 當(dāng)前頁碼
 * 方式一:http://localhost:8080/user/page?size=1&current=1<br>
 * 方式二:http://localhost:8080/user/pagehelper?size=1&current=1<br>
 */
 
// 參數(shù)模式分頁
@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());//獲取總數(shù)并釋放資源 也可以 PageHelper.getTotal()
  return page;
}
 
 
/**
 * 測試事物
 * http://localhost:8080/user/test_transactional<br>
 * 訪問如下并未發(fā)現(xiàn)插入數(shù)據(jù)說明事物可靠!!<br>
 * http://localhost:8080/user/test<br>
 * <br>
 * 啟動 Application 加上 @EnableTransactionManagement 注解其實可無默認(rèn)貌似就開啟了<br>
 * 需要事物的方法加上 @Transactional 必須的哦!!
 */
@Transactional
@GetMapping("/test_transactional")
public void testTransactional() {
  //userService.insert(new User(1000L, "測試事物", 16, 3));
  System.out.println(" 這里手動拋出異常,自動回滾數(shù)據(jù)");
  throw new RuntimeException();
}

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

最后謝謝大家的觀看,寫博客經(jīng)驗不足,寫得不好請見諒,如果能給你帶來幫助請點個贊,若遇到不明白的,或者我有寫錯的地方請?zhí)岢觯x謝!也希望大家多多支持服務(wù)器之家。

原文鏈接:https://www.cnblogs.com/lianggp/p/7573653.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 韩国悲惨事件30无删减在线 | 69老司机亚洲精品一区 | 2020精品极品国产色在线观看 | 手机看片日韩1024你懂的首页 | 日本最新免费二区 | 国产午夜精品一区二区三区 | 日本精品一区二区三区 | 免费国产一级 | 四虎免费看 | 特黄特色大片免费视频播放 | 天堂网在线.www天堂在线视频 | 男人天堂a| 成年人在线播放视频 | 成年人视频免费在线观看 | 免费老外的毛片清高 | 欧美一区二区三区不卡视频 | 欧美精品一二三区 | 欧美va在线高清 | 亚洲欧美国产另类 | 五月激激激综合网色播免费 | 亚洲国产成人精品无码区5566 | 亚洲欧美精品天堂久久综合一区 | 成人依依网 | 国产一级网站 | 8x8拨擦拨擦华人免费 | 美女靠逼免费视频 | 百合女女师生play黄肉黄 | a v在线男人的天堂观看免费 | avtt在线| 国内精品久久久久久久久久久久 | 免费av在线看 | 亚洲va欧美va国产va天堂影 | 大学生按摩黄a级中文片 | 国产亚洲欧美日韩俺去了 | 情缘1完整版在线观看 | 欧美精品成人a多人在线观看 | 国产精品99精品久久免费 | 国产香蕉一区二区精品视频 | 99精品免费在线 | 精品午夜久久网成年网 | 歪歪视频在线播放无遮挡 |