這個springboot集成druid和tk.mybatis是在以前Idea搭建多模塊聚合maven項目的基礎上完成的
http://www.javashuo.com/article/p-rvrpgkss-eo.html
1.druid是什麼?
Druid首先是一個數據庫鏈接池。Druid是目前最好的數據庫鏈接池,在功能、性能、擴展性方面,都超過其餘數據庫鏈接池。java
2.tk.mybatis是什麼?
通用Mapper,優勢是能夠緩存,所有針對單表操做,每一個實體類都須要繼承通用Mapper接口來得到通用方法,目前新版也能夠針對多表進行操做,可是就不能使用二級緩存。mysql
3.mybatis-genertor是什麼?
是一款mybatis自動代碼生成工具,能夠經過配置,快速生成mapper和xml文件。git
4.springboot集成mybatis-genertor生成dao層的實體和mapper,我把這個集成放到fire-common層
pom.xmlgithub
<!--模塊依賴--> <dependencies> <!--生成mapper所須要的jar--> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>${mybatis-generator.version}</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>${tk-mybatis.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>${freemarker.version}</version> </dependency> <!--生成mapper所須要的jar--> <!--mysql連接jar--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector-java.version}</version> </dependency> </dependencies>
genertor.xmlweb
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <generatorConfiguration> <context id="MysqlTables" targetRuntime="MyBatis3Simple"> <property name="javaFileEncoding" value="UTF-8" /> <property name="javaFileEncoding" value="UTF-8" /> <property name="useMapperCommentGenerator" value="false" /> <plugin type="tk.mybatis.mapper.generator.MapperPlugin"> <property name="mappers" value="tk.mybatis.mapper.common.Mapper" /> <property name="caseSensitive" value="true" /> <property name="forceAnnotation" value="true" /> <property name="beginningDelimiter" value="`" /> <property name="endingDelimiter" value="`" /> </plugin> <plugin type="tk.mybatis.mapper.generator.TemplateFilePlugin"> <property name="targetProject" value="E:/IdeaProject/fire/fire-dao/src/main/java" /> <property name="targetPackage" value="cn.yskcoder.fire.dao" /> <property name="mapperSuffix" value="Dao" /> <property name="templatePath" value="generator/mapper.ftl" /> <property name="fileName" value="${tableClass.shortClassName}${mapperSuffix}.java" /> </plugin> <!--去除註釋 --> <commentGenerator> <property name="suppressDate" value="true" /> <property name="suppressAllComments" value="true" /> </commentGenerator> <!-- 數據庫連接URL、用戶名、密碼 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/fire" userId="root" password="123456"> </jdbcConnection> <javaTypeResolver> <property name="useJSR310Types" value="true" /> </javaTypeResolver> <!-- ★★★生成實體類的包名和位置★★★要保證目錄存在 --> <javaModelGenerator targetPackage="cn.yskcoder.fire.model" targetProject="E:/IdeaProject/fire/fire-dao/src/main/java"> <property name="enableSubPackages" value="true" /> <property name="trimStrings" value="true" /> </javaModelGenerator> <!-- ★★★生成的映射文件包名和位置★★★要保證目錄存在 --> <sqlMapGenerator targetPackage="mapper" targetProject="E:/IdeaProject/fire/fire-dao/src/main/resources"> <property name="enableSubPac kages" value="false" /> </sqlMapGenerator> <!-- 要生成那些表(更改tableName就能夠); %爲通配符,能夠生成所有表 --> <!-- <table tableName="B%" enableCountByExample="false" --> <table tableName="sys_user" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" /> </context> </generatorConfiguration>
Genertor.javaspring
package cn.yskcoder.fire.generator; import org.mybatis.generator.api.MyBatisGenerator; import org.mybatis.generator.config.Configuration; import org.mybatis.generator.config.xml.ConfigurationParser; import org.mybatis.generator.internal.DefaultShellCallback; import java.io.InputStream; import java.util.ArrayList; import java.util.List; /** * 自動生成Mybatis相關的代碼和配置文件 * * @author: yskcoder * @createDate: 2019/12/25 18:59 * @version: 1.0 */ public class Generator { public static void main(String[] args) throws Exception { List<String> warnings = new ArrayList<String>(); boolean overwrite = true; ConfigurationParser cp = new ConfigurationParser(warnings); InputStream stream = Class.class.getResourceAsStream("/mybatis-generator.xml"); Configuration config = cp.parseConfiguration(stream); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); for (String warning : warnings) { System.out.println(warning); } System.out.println("恭喜你,生成Mybatis相關的代碼完成!"); } }
5.springboot集成druid和tk.mybatis
pom.xml,這裏將spring-boot-starter-web放到了fire-service裏面由於要用註解的緣由sql
<!--模塊依賴--> <dependencies> <dependency> <groupId>cn.yskcoder.fire</groupId> <artifactId>fire-service</artifactId> <version>v1.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 阿里巴巴druid數據庫鏈接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis-spring-boot-starter.version}</version> </dependency> <!--mapper--> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>${mapper-spring-boot-tarter.version}</version> </dependency> </dependencies>
application.yml數據庫
########################################################## ################## Fire項目的配置 ####################### ########################################################## ################### 項目啓動端口 ######################## server: port: 80 ################### spring配置 ######################### spring: profiles: datasource: url: jdbc:mysql://localhost:3306/fire?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&jdbcCompliantTruncation=false&serverTimezone=GMT%2B8 username: root password: 123456 resources: static-locations: classpath:/webapp/ mvc: static-path-pattern: /static/** view: prefix: /WEB-INF/view/ ################### tk.mybaties配置 ######################### mybatis: type-aliases-package: cn.yskcoder.fire.model mapper-locations: classpath*:mapper/*.xml
經過註解的方式配置數據庫數據源DruidPropertiessegmentfault
Component @ConfigurationProperties(prefix = "spring.datasource") public class DruidProperties { private String url = "jdbc:mysql://127.0.0.1:3306/fire?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull"; private String username = "root"; private String password = "123456"; private String driverClassName = "com.mysql.cj.jdbc.Driver"; private Integer initialSize = 4; private Integer minIdle = 2; private Integer maxActive = 30; private Integer maxWait = 60000; private Integer timeBetweenEvictionRunsMillis = 60000; private Integer minEvictableIdleTimeMillis = 300000; private String validationQuery = "SELECT 'x'"; private Boolean testWhileIdle = true; private Boolean testOnBorrow = false; private Boolean testOnReturn = false; private Boolean poolPreparedStatements = true; private Integer maxPoolPreparedStatementPerConnectionSize = 30; private String filters = "stat"; public DataSource config(DruidDataSource dataSource){ dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); dataSource.setDriverClassName(driverClassName); dataSource.setInitialSize(initialSize); //定義初始鏈接數 dataSource.setMinIdle(minIdle); //最小空閒 dataSource.setMaxActive(maxActive); //定義最大鏈接數 dataSource.setMaxWait(maxWait); //最長等待時間 // 配置間隔多久才進行一次檢測,檢測須要關閉的空閒鏈接,單位是毫秒 dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); // 配置一個鏈接在池中最小生存的時間,單位是毫秒 dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); dataSource.setValidationQuery(validationQuery); dataSource.setTestWhileIdle(testWhileIdle); dataSource.setTestOnBorrow(testOnBorrow); dataSource.setTestOnReturn(testOnReturn); // 打開PSCache,而且指定每一個鏈接上PSCache的大小 dataSource.setPoolPreparedStatements(poolPreparedStatements); dataSource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize); try { dataSource.setFilters(filters); } catch (SQLException e) { e.printStackTrace(); } return dataSource; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getDriverClassName() { return driverClassName; } public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; } public Integer getInitialSize() { return initialSize; } public void setInitialSize(Integer initialSize) { this.initialSize = initialSize; } public Integer getMinIdle() { return minIdle; } public void setMinIdle(Integer minIdle) { this.minIdle = minIdle; } public Integer getMaxActive() { return maxActive; } public void setMaxActive(Integer maxActive) { this.maxActive = maxActive; } public Integer getMaxWait() { return maxWait; } public void setMaxWait(Integer maxWait) { this.maxWait = maxWait; } public Integer getTimeBetweenEvictionRunsMillis() { return timeBetweenEvictionRunsMillis; } public void setTimeBetweenEvictionRunsMillis(Integer timeBetweenEvictionRunsMillis) { this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis; } public Integer getMinEvictableIdleTimeMillis() { return minEvictableIdleTimeMillis; } public void setMinEvictableIdleTimeMillis(Integer minEvictableIdleTimeMillis) { this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis; } public String getValidationQuery() { return validationQuery; } public void setValidationQuery(String validationQuery) { this.validationQuery = validationQuery; } public Boolean getTestWhileIdle() { return testWhileIdle; } public void setTestWhileIdle(Boolean testWhileIdle) { this.testWhileIdle = testWhileIdle; } public Boolean getTestOnBorrow() { return testOnBorrow; } public void setTestOnBorrow(Boolean testOnBorrow) { this.testOnBorrow = testOnBorrow; } public Boolean getTestOnReturn() { return testOnReturn; } public void setTestOnReturn(Boolean testOnReturn) { this.testOnReturn = testOnReturn; } public Boolean getPoolPreparedStatements() { return poolPreparedStatements; } public void setPoolPreparedStatements(Boolean poolPreparedStatements) { this.poolPreparedStatements = poolPreparedStatements; } public Integer getMaxPoolPreparedStatementPerConnectionSize() { return maxPoolPreparedStatementPerConnectionSize; } public void setMaxPoolPreparedStatementPerConnectionSize(Integer maxPoolPreparedStatementPerConnectionSize) { this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize; } public String getFilters() { return filters; } public void setFilters(String filters) { this.filters = filters; } }
配置mybatis經過註解類的方式MyBatisConfigapi
/** * mybatisConfig配置類 * * @author: yskcoder * @createDate: 2019/12/25 16:20 * @version: 1.0 */ @Configuration public class MyBatisConfig { @Autowired DruidProperties druidProperties; /** * Fire數據源 */ private DruidDataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); druidProperties.config(dataSource); return dataSource; } @Bean public DruidDataSource datasource() { return dataSource(); } }
6.具體的代碼能夠參考Fire
https://github.com/yskcoder/Fire