本文将为大家分享有关mybatis逆向工程与分页在springboot中的应用及遇到的坑的详细攻略。
什么是MyBatis逆向工程?
MyBatis逆向工程可以根据数据库表结构自动生成MyBatis的Mapper映射文件、Java实体类、DAO接口等代码,省去手写的麻烦,提高开发效率。
使用MyBatis逆向工程,我们需要完成以下几个步骤:
1.配置数据库连接和生成代码相关的配置信息。
2.执行逆向工程,在项目中生成Mapper映射文件、Java实体类、DAO接口等代码。
3.使用代码。在SpringBoot中,我们一般使用注解或者XML配置方式进行使用。
MyBatis逆向工程的配置示例
我们以使用Maven构建Java Web项目为例,介绍MyBatis逆向工程的配置过程。
- 添加Maven依赖
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
- 配置MyBatis逆向工程插件
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<executions>
<execution>
<id>MybatisGenerator</id>
<phase>package</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
- 编写MyBatis逆向工程配置文件
<?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="DB2Tables" targetRuntime="MyBatis3">
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test"
userId="root" password="password">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<javaModelGenerator targetPackage="com.example.demo.model" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<sqlMapGenerator targetPackage="com.example.demo.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="com.example.demo.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<table schema="" tableName="users">
</table>
</context>
</generatorConfiguration>
- 在IDEA中运行Maven插件进行代码生成
运行mvn mybatis-generator:generate
命令,即可在项目中生成Mapper映射文件、Java实体类、DAO接口等代码。
分页的实现
分页是Web开发中常用的功能,MyBatis也提供了分页查询的支持。在SpringBoot中,我们可以使用PageHelper插件来帮助我们实现分页功能。
PageHelper可以自动进行分页处理,实现起来非常方便。它可以与SpringBoot集成,并对MyBatis的接口进行AOP的拦截,实现自动分页。
使用PageHelper,我们需要完成以下几个步骤:
- 添加Maven依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.10</version>
</dependency>
- 配置PageHelper插件
可以在Spring Boot的配置文件中,通过以下配置来开启PageHelper插件的自动配置:
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
autoRuntimeDialect: true
- 使用代码
使用PageHelper插件非常简单,只需要对Mapper接口进行注解,即可实现分页查询功能。例如:
@Select("SELECT * FROM users")
List<User> selectAllUsers();
以上代码查询所有用户数据列表,如果需要实现分页查询,只需要添加PageHelper注解即可:
@Select("SELECT * FROM users")
@com.github.pagehelper.PageHelper
List<User> selectAllUsers();
遇到的问题及解决方案示例
- 使用MyBatis逆向工程生成的Mapper接口方法返回值与实际需求不符
解决方案:修改逆向工程配置文件中的<table>
元素中的各个属性,其中<columnOverride>
元素可用于修改属性类型、属性名称以及是否支持null等属性。
例如,以下代码表示将数据库表users的id字段的Java类型改为Long,名称改为userId:
<table schema="" tableName="users">
<property name="primaryKey" value="id"/>
<generatedKey column="id" sqlStatement="SELECT LAST_INSERT_ID()"/>
<columnOverride column="id" property="userId" javaType="java.lang.Long"/>
</table>
- 使用PageHelper插件查询分页数据时,只返回了一页的数据
解决方案:添加PageHelper分页插件的拦截器,并在方法中手动加入分页参数,例如PageInfo和Pageable等。
@Override
public PageInfo<User> selectUsersByPage(Pageable pageable) {
com.github.pagehelper.PageHelper.startPage(pageable.getPageNumber(), pageable.getPageSize());
List<User> users = userMapper.selectAllUsers();
return new PageInfo<>(users);
}
以上就是关于MyBatis逆向工程与分页在Spring Boot中的应用及遇到的坑的完整攻略。希望可以帮助到需要的读者。