mybatis逆向工程与分页在springboot中的应用及遇到坑

  • Post category:http

本文将为大家分享有关mybatis逆向工程与分页在springboot中的应用及遇到的坑的详细攻略。

什么是MyBatis逆向工程?

MyBatis逆向工程可以根据数据库表结构自动生成MyBatis的Mapper映射文件、Java实体类、DAO接口等代码,省去手写的麻烦,提高开发效率。

使用MyBatis逆向工程,我们需要完成以下几个步骤:

1.配置数据库连接和生成代码相关的配置信息。

2.执行逆向工程,在项目中生成Mapper映射文件、Java实体类、DAO接口等代码。

3.使用代码。在SpringBoot中,我们一般使用注解或者XML配置方式进行使用。

MyBatis逆向工程的配置示例

我们以使用Maven构建Java Web项目为例,介绍MyBatis逆向工程的配置过程。

  1. 添加Maven依赖
<dependency>
   <groupId>org.mybatis.generator</groupId>
   <artifactId>mybatis-generator-core</artifactId>
   <version>1.3.7</version>
</dependency>
  1. 配置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>
  1. 编写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>
  1. 在IDEA中运行Maven插件进行代码生成

运行mvn mybatis-generator:generate命令,即可在项目中生成Mapper映射文件、Java实体类、DAO接口等代码。

分页的实现

分页是Web开发中常用的功能,MyBatis也提供了分页查询的支持。在SpringBoot中,我们可以使用PageHelper插件来帮助我们实现分页功能。

PageHelper可以自动进行分页处理,实现起来非常方便。它可以与SpringBoot集成,并对MyBatis的接口进行AOP的拦截,实现自动分页。

使用PageHelper,我们需要完成以下几个步骤:

  1. 添加Maven依赖
<dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper</artifactId>
   <version>5.1.10</version>
</dependency>
  1. 配置PageHelper插件

可以在Spring Boot的配置文件中,通过以下配置来开启PageHelper插件的自动配置:

pagehelper:
  helperDialect: mysql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql
  autoRuntimeDialect: true
  1. 使用代码

使用PageHelper插件非常简单,只需要对Mapper接口进行注解,即可实现分页查询功能。例如:

@Select("SELECT * FROM users")
List<User> selectAllUsers();

以上代码查询所有用户数据列表,如果需要实现分页查询,只需要添加PageHelper注解即可:

@Select("SELECT * FROM users")
@com.github.pagehelper.PageHelper
List<User> selectAllUsers();

遇到的问题及解决方案示例

  1. 使用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>
  1. 使用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中的应用及遇到的坑的完整攻略。希望可以帮助到需要的读者。