为什么我一直向同事推荐tk-mybatis,因为这个确实好用呀。由于培训机构的原因,大部分人都懂逆向工程的Mybatis,但是看很多人都是懂那种逆向直接生成mapper的,里面包含sql的,其实这种不好,如果数据库有字段的变动,很不友好。
tk-mybatis就解决了这个痛点,使用一套泛型和注解解决了基本的单表操作,使得字段变更只需要在实体增减字段即可。
项目整体结构图:
依赖:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.loger.tkmapper</groupId> <artifactId>tkmapper</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.2.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.36</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.5</version> </dependency> <!--<dependency>--> <!--<groupId>com.github.pagehelper</groupId>--> <!--<artifactId>pagehelper</artifactId>--> <!--<version>5.1.1</version>--> <!--</dependency>--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-autoconfigure</artifactId> <version>1.2.3</version> </dependency> </dependencies> </project>
下面是tk-mybatis配置类(主要):
MybatisConfig.java
package com.loger.common.config; import com.github.pagehelper.PageHelper; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import tk.mybatis.spring.mapper.MapperScannerConfigurer; import javax.annotation.Resource; import javax.sql.DataSource; import java.util.Properties; /** * @author Loger * Date: 2018-08-13 * TIme: 15:44 * Description : */ @Configuration public class MybatisConfig { @Resource private DataSource dataSource; @Bean public SqlSessionFactory sqlSessionFactoryBean() throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); // bean.setTypeAliasesPackage(""); //添加XML目录 ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); bean.setMapperLocations(resolver.getResources("mappers/*.xml")); return bean.getObject(); } @Configuration @AutoConfigureAfter(MybatisConfig.class) public static class MyBatisMapperScannerConfig { @Bean public MapperScannerConfigurer mapperScannerConfig() { MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactoryBean"); mapperScannerConfigurer.setBasePackage("com.loger.mapper.*"); //配置通用mappers Properties properties = new Properties(); properties.setProperty("notEmpty", "false"); properties.setProperty("IDENTITY", "MYSQL"); mapperScannerConfigurer.setProperties(properties); return mapperScannerConfigurer; } } /** * 配置mybatis的分页插件pageHelper * @return */ @Bean public PageHelper pageHelper(){ PageHelper pageHelper = new PageHelper(); Properties properties = new Properties(); properties.setProperty("offsetAsPageNum","true"); properties.setProperty("rowBoundsWithCount","true"); properties.setProperty("reasonable","true"); //指定为MySQL数据库 properties.setProperty("helperDialect","mysql"); pageHelper.setProperties(properties); return pageHelper; } }
springboot配置文件:application.properties
server.port=8080 # 开发环境不同的配置项可单独在 application-dev.properties 中指定 spring.profiles.active=dev # session #server.session.timeout=86400 server.servlet.session.timeout=86400ms ## Aop spring.aop.auto=true spring.aop.proxy-target-class=true # database # spring.datasource.url=jdbc:mysql://192.168.113.128:3306/db_learn?useUnicode=true&characterEncoding=utf8&useLegacyDatetimeCode=false spring.datasource.username= loger spring.datasource.password= 0668Apple... spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
太细节的整合我这里就不详细讲了,因为不是本章节的主要内容。本章节主要内容在MybatisConfig.java以及pagehelper的版本依赖(整合时一直报错,后来才发现是版本问题)。
这里附上项目github地址:https://github.com/logerchen/springboot-tkmybatis-tkmapper