Springboot-4.集成MyBatis
...大约 7 分钟
Springboot-集成MyBatis
1.整合Durid数据源
Druid整合
方式1:druid第三方jar引入
引入依赖:jdbc连接、数据库连接、mysql连接、mybatis持久层、druid
<!-- 引入数据源,整合durid -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
application.yml配置数据源信息
# spring相关配置
spring:
profiles:
active: dev
# 数据源信息配置
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/springboot_mybatis?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
Druid数据源配置类
/**
* 数据源配置类
*/
@Configuration
public class DruidConfig {
// 将所有前缀为spring.datasource下的配置项都加载到DataSource中
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druidDataSource() {
return new DruidDataSource();
}
@Bean
public ServletRegistrationBean statViewServlet() {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
// 添加IP白名单
servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
// 添加IP黑名单,当白名单和黑名单重复时,黑名单优先级更高
servletRegistrationBean.addInitParameter("deny", "127.0.0.1");
// 添加控制台管理用户
servletRegistrationBean.addInitParameter("loginUsername", "admin");
servletRegistrationBean.addInitParameter("loginPassword", "123456");
// 是否能够重置数据
servletRegistrationBean.addInitParameter("resetEnable", "false");
return servletRegistrationBean;
}
/**
* 配置服务过滤器
* @return 返回过滤器配置对象
*/
@Bean
public FilterRegistrationBean statFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
// 添加过滤规则
filterRegistrationBean.addUrlPatterns("/*");
// 忽略过滤格式
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*,");
return filterRegistrationBean;
}
}
方式2:springboot集成druid配置(不需要一个个去配置)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
@Configuration
@ConditionalOnClass(DruidDataSource.class)
@AutoConfigureBefore(DataSourceAutoConfiguration.class)
@EnableConfigurationProperties({DruidStatProperties.class, DataSourceProperties.class})
@Import({DruidSpringAopConfiguration.class,
DruidStatViewServletConfiguration.class,
DruidWebStatFilterConfiguration.class,
DruidFilterConfiguration.class})
public class DruidDataSourceAutoConfigure {
private static final Logger LOGGER = LoggerFactory.getLogger(DruidDataSourceAutoConfigure.class);
@Bean(initMethod = "init")
@ConditionalOnMissingBean
public DataSource dataSource() {
LOGGER.info("Init DruidDataSource");
return new DruidDataSourceWrapper();
}
}
MyBatis整合
引入MyBatis代码生成器插件、引入MyBatis相关依赖
<!-- Mybatis-Generator插件,自动生成代码 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<configurationFile>${project.basedir}/src/main/resources/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<!--必須要引入数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!--必须制定版本-->
<version>8.0.22</version>
</dependency>
</dependencies>
</plugin>
配置generatorConfig.xml
<!DOCTYPE generatorConfiguration PUBLIC
"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--如果需要使用 command的方式生成需要配置数据库驱动的jar包路径
<classPathEntry location="指定数据驱动的磁盘路径"/>-->
<!--context 生成上下文 配置生成规则
id 随意写
targetRuntime 生成策略
MyBatis3DynamicSql 默认的,会生成 动态生成sql的方式(没有xml)
MyBatis3 生成通用的查询,可以指定动态where条件
MyBatis3Simple 只生成简单的CRUD
-->
<context id="simple" targetRuntime="MyBatis3Simple">
<commentGenerator>
<!--设置是否生成注释 true 不生成 注意: 如果不生成注释,下次生成代码就不会进行合并-->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据源 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"
userId="root"
password="123456"/>
<!--pojo
javaModelGenerator java实体生成规则(POJO)
targetPackage 生成到哪个包下
targetProject 生成到当前文件的哪个相对路径下
-->
<javaModelGenerator targetPackage="cn.noob.pojo" targetProject="src/main/java"/>
<!--mapper xml映射文件
sqlMapGenerator mapper xml映射文件生成规则
targetPackage 生成到哪个包下
targetProject 生成到当前文件的哪个相对路径下
-->
<sqlMapGenerator targetPackage="cn.noob.mapper" targetProject="src/main/resources"></sqlMapGenerator>
<!--mapper接口
javaClientGenerator mapper mapper接口生成规则
type 指定生成的方式
1.使用注解的方式生成
2.使用接口绑定的方式生成(要配置sqlMapGenerator)
targetPackage 生成到哪个包下
targetProject 生成到当前文件的哪个相对路径下-->
<javaClientGenerator type="XMLMAPPER" targetPackage="cn.noob.mapper" targetProject="src/main/java"/>
<!--配置哪些表需要进行代码生成
tableName 表名
domainObjectName pojo类名
mapperName 对应mapper接口的类名 和 mapper xml文件名
-->
<table tableName="emp" domainObjectName="Emp" mapperName="EmpMapper" />
<table tableName="dept" domainObjectName="Dept" mapperName="DeptMapper" />
</context>
</generatorConfiguration>
插件运行,生成代码(注意MySQL版本)
2.Springboot集成MyBatis-Plus
mybatis-plus集成
导入mybatis-plus依赖
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--mybatis plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!--log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
配置application.yml文件
# spring config
spring:
datasource:
username: root
password: 123456
#serverTimezone=UTC解决时区的报错
url: jdbc:mysql://localhost:3306/da_test_springboot?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
#druid 数据源专有配置
initialSize: 5 #连接池的初始大小
minIdle: 5 #连接池中最小空闲连接数量
maxActive: 20 #连接池中最大活跃连接数量
maxWait: 60000 #获取连接的最大等待时间
timeBetweenEvictionRunsMillis: 60000 #定期检查连接池中空闲连接的间隔时间
minEvictableIdleTimeMillis: 300000 #连接池中连接的最小空闲时间
validationQuery: SELECT 1 FROM DUAL #校验连接是否有效的SQL查询语句
#连接返回时是否进行测试
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
#是否缓存PreparedStatement
poolPreparedStatements: true
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20 #每个连接上缓存PreparedStatement的最大数量。
useGlobalDataSourceStat: true #是否开启全局监控统计功能
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#####mybatisplus配置#####
mybatis-plus:
#加载映射文件
mapper-locations: classpath:mapper/*.xml
#设置别名
type-aliases-package: com.noob.entity
#开启驼峰命名
configuration:
map-underscore-to-camel-case: true
# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#####配置日志#####
logging:
config: classpath:logback.xml
#设置日志级别的节点
level:
com:
liming: debug
idea连接mysql(db_test_springboot数据库)
借助MyBatisX-Generator生成代码
参考配置说明:
最终生成代码效果
MyBatisX插件生成代码的模板配置规则
- 按照指定目录找到插件模板配置目录 Scratches and Consoles -> Extensions -> MybatisX
- 提供默认模板: 例如在 1.4.13 提供了模板: default-all,default,mybatis-plus2,mybatis-plus3
- 如果想重置默认模板, 可以右键点击 MybatisX 目录,选择 Restore Default Extensions 选项
自定义模板内容:更多信息参考MyBatis官网
名称 | 含义 |
---|---|
tableClass.fullClassName | 类的全称(包括包名) |
tableClass.shortClassName | 类的简称 |
tableClass.tableName | 表名 |
tableClass.pkFields | 表的所有主键字段 |
tableClass.allFields | 表的所有字段 |
tableClass.baseFields | 排除主键和 blob 的所有字段 |
tableClass.baseBlobFields | 排除主键的所有字段 |
tableClass.remark | 表注释 |
generator批量生成代码
引入依赖
<!--代码生成-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<!--freemarker模板-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.28</version>
</dependency>
编写核心代码
package com.noob.utils;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
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.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
public class GeneratorCode {
private static String author ="holic-x";//作者名称
private static String outputDir ="D:\\";//生成的位置
private static String driver ="com.mysql.cj.jdbc.Driver";//驱动,注意版本
//连接路径,注意修改数据库名称
private static String url ="jdbc:mysql://localhost:3306/db_authority_system?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
private static String username ="root";//数据库用户名
private static String password ="123456";//数据库密码
private static String tablePrefix ="sys_";//数据库表的前缀,如t_user
private static String [] tables = {"sys_user","sys_permission","sys_department"}; //生成的表
private static String parentPackage = "com.noob";//顶级包结构
private static String mapper = "mapper";//数据访问层包名称
private static String service = "service";//业务逻辑层包名称
private static String entity = "entity";//实体层包名称
private static String controller = "controller";//控制器层包名称
private static String mapperxml = "mapper";//mapper映射文件包名称
public static void main(String[] args) {
//1. 全局配置
GlobalConfig config = new GlobalConfig();
config.setAuthor(author) // 作者
.setOutputDir(outputDir) // 生成路径
.setFileOverride(true) // 文件覆盖
.setIdType(IdType.AUTO) // 主键策略
.setServiceName("%sService") // 设置生成的service接口的名字的首字母是否为I,加%s则不生成I
.setBaseResultMap(true) //映射文件中是否生成ResultMap配置
.setBaseColumnList(true); //生成通用sql字段
//2. 数据源配置
DataSourceConfig dsConfig = new DataSourceConfig();
dsConfig.setDbType(DbType.MYSQL) // 设置数据库类型
.setDriverName(driver) //设置驱动
.setUrl(url) //设置连接路径
.setUsername(username) //设置用户名
.setPassword(password); //设置密码
//3. 策略配置
StrategyConfig stConfig = new StrategyConfig();
stConfig.setCapitalMode(true) //全局大写命名
.setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略
.setTablePrefix(tablePrefix) //表前缀
.setInclude(tables) // 生成的表
.setEntityLombokModel(true);//支持Lombok
//4. 包名策略配置
PackageConfig pkConfig = new PackageConfig();
pkConfig.setParent(parentPackage)//顶级包结构
.setMapper(mapper) //数据访问层
.setService(service) //业务逻辑层
.setController(controller) //控制器
.setEntity(entity) //实体类
.setXml(mapperxml); //mapper映射文件
//5. 整合配置
AutoGenerator ag = new AutoGenerator();
ag.setGlobalConfig(config)
.setDataSource(dsConfig)
.setStrategy(stConfig)
.setPackageInfo(pkConfig)
.setTemplateEngine(new FreemarkerTemplateEngine()); // 使用Freemarker引擎模板
//6. 执行
ag.execute();
}
}
启动运行
运行成功之后可在指定位置查看对应的数据生成内容
此处需注意对Date属性的字段处理:将实体类中属性数据类型为LocalDate
和LocalDateTime
修改成java.util.Date
类型
Powered by Waline v3.1.3