springboot集成tk.mybatis逆向生成实体、mapper接口以及mapper.xml配置
-
第一步:在pom.xml中添加如下所需的依赖配置:
<!--tk.mybatis的依赖--> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.5</version> </dependency> <!--数据库连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.21</version> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile> <overwrite>true</overwrite> <verbose>true</verbose> </configuration> <!--加入下面这个依赖--> <dependencies> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>4.1.5</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> </dependencies> </plugin> </plugins> </build>
-
在项目下的src/main/java下新建一个tk.mybatis的包,这个包不能被spring扫描到,结构如下:
然后再上面那个包中新建一个接口IBaseCommMapper,接口内容如下:package tk.mybatis; import tk.mybatis.mapper.common.ConditionMapper; import tk.mybatis.mapper.common.IdsMapper; import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.special.InsertListMapper; public interface IBaseCommMapper<T> extends Mapper<T>, ConditionMapper<T>, IdsMapper<T>, InsertListMapper<T> { }
-
在src/main/resources下创建一个数据源配置jdbc.properties和一个逆向生成代码的配置generatorConfig.xml,我这里配置的是mysql的数据源,这里需要注意的是为什么用properties而不是用yml呢?因为在generatorConfig.xml中引用资源配置文件是properties标签,只能识别到properties后缀的配置文件。
–jdbc.properties如下:
spring.datasource.url=jdbc:mysql://localhost:3306/demo? useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&nullCatalogMeansCurrent=true spring.datasource.username=root spring.datasource.password=513168 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
–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> <!-- 引用资源配置文件 --> <properties resource="jdbc.properties"/> <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat"> <property name="javaFileEncoding" value="UTF-8"/> <property name="useMapperCommentGenerator" value="false"/> <plugin type="tk.mybatis.mapper.generator.MapperPlugin"> <!-- 配置后生成的 Mapper 接口都会自动继承接口 value: 需要继承的接口, 该接口不可以在 MapperScan 扫描范围中--> <property name="mappers" value="tk.mybatis.IBaseCommMapper"/> <!-- caseSensitive默认false,当数据库表名区分大小写时,可以将该属性设置为true --> <property name="caseSensitive" value="true"/> <property name="forceAnnotation" value="true"/> </plugin> <!-- 数据库连接属性: --> <jdbcConnection driverClass="${spring.datasource.driver-class-name}" connectionURL="${spring.datasource.url}" userId="${spring.datasource.username}" password="${spring.datasource.password}"> </jdbcConnection> <!-- MyBatis 生成器生成 Model --> <javaModelGenerator targetPackage="com.xingzhang.spring.boot.mybatis.entity" targetProject="src/main/java"/> <!-- MyBatis 生成器生成 Mapper XML --> <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/> <!-- MyBatis 生成器生成 Mapper class --> <javaClientGenerator targetPackage="com.xingzhang.spring.boot.mybatis.mapper" targetProject="src/main/java" type="XMLMAPPER"/> <!-- 需要生成的表名, % 为通配符, --> <table tableName="%"> <generatedKey column="id" sqlStatement="MySql" identity="true"/> </table>
注:在使用mysql-connect 8.+以上版本的时候需要在jdbc.properties中的url后面添加nullCatalogMeansCurrent=true参数,否则在使用mybatis-generator生成表对应的xml等时会扫描整个服务器里面的全部数据库中的表,而不是扫描对应数据库的表。
- 最后一步:双击如下即可生成。
生成的内容效果如下:
5.使用编写一个单元测试类进行测试,代码如下:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringBootMybatisApplication.class)
@Transactional
@Rollback
class SpringBootMybatisApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void test() {
List<User> list = userMapper.selectAll();
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getUsername());
}
}
@Test
void pageTest(){
PageHelper.startPage(2,5);
Example example = new Example(User.class);
PageInfo<User> pageInfo = new PageInfo<>(userMapper.selectByExample(example));
List<User> list = pageInfo.getList();
for (User user : list) {
System.out.println(user.getUsername());
}
}
}