Spring-boot-mybatis-generator-page
Spring-boot-mybatis-generator
with java api
-
在src/main/resources目录下创建generatorConfig.xml
<?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="mysql" targetRuntime="MyBatis3"> <plugin type="org.mybatis.generator.plugins.FluentBuilderMethodsPlugin"/> <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/> <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/> <plugin type="org.mybatis.generator.plugins.RowBoundsPlugin"/> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/spring-boot-demo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true" userId="root" password="Gepoint"> </jdbcConnection> <javaModelGenerator targetPackage="com.shawn.spring.boot.mybatis.entity" targetProject="./src/main/java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <sqlMapGenerator targetPackage="com.shawn.spring.boot.mybatis.mapper" targetProject="./src/main/resources/mapper"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <javaClientGenerator type="MIXEDMAPPER" targetPackage="com.shawn.spring.boot.mybatis.mapper" targetProject="./src/main/java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <table tableName="t_menu" domainObjectName="Menu"> <generatedKey column="menu_id" sqlStatement="SELECT LAST_INSERT_ID()" identity="true"/> </table> <table tableName="t_user" domainObjectName="User"> <generatedKey column="user_id" sqlStatement="SELECT LAST_INSERT_ID()" identity="true"/> </table> <table tableName="t_role" domainObjectName="Role"> <generatedKey column="role_id" sqlStatement="SELECT LAST_INSERT_ID()" identity="true"/> </table> </context> </generatorConfiguration>
-
pom.xml
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.7</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.13</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
-
java code
List<String> warnings = new ArrayList<>(); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration( this.getClass().getResourceAsStream("/generatorConfig.xml")); // 是否覆盖 DefaultShellCallback callback = new DefaultShellCallback(true); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null);
with maven plugin
在src/main/resources目录下创建generatorConfig.xml(同上)
-
pom.xml
<dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.7</version> <executions> <execution> <!-- plugin name --> <id>mybatis-generator</id> <goals> <!-- 指令 --> <goal>generate</goal> </goals> </execution> </executions> <configuration> <overwrite>true</overwrite> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.13</version> </dependency> </dependencies> </plugin> </plugins> </build>
-
执行Maven指令
mvn [plugin-name]:[goal-name] mvn mybatis-generator:generate
注意点:
如果使用的是
mysql-connector-java
的版本是8以上,generatorConfig.xml
里的jdbc.url
需要加上参数nullCatalogMeansCurrent=true
,不加上的话会识别不了表的主键。这样就不会生成selectByPrimaryKey
这样的方法。-
生成的mapper类,不会带上
@Mapper @Repository
这两个注解,建议加上
<generatedKey column="user_id" sqlStatement="SELECT LAST_INSERT_ID()" identity="true"/>
其中sqlStatement的配置可以参考Mybatis的官方文档
Spring-boot-mybatis-pageHelper
-
pom.xml
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> </dependency>
-
application.yaml
spring.datasource.url: jdbc:mysql://127.0.0.1:3306/spring-boot-demo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8 spring.datasource.username: root spring.datasource.password: 11111 spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver mybatis.configuration.map-underscore-to-camel-case: true mybatis.mapper-locations: classpath:mapper/**/*.xml mybatis.type-aliases-package: com.shawn.spring.boot.mybatis.entity mybatis.type-handlers-package: com.shawn.spring.boot.mybatis.handle pagehelper.offset-as-page-num: true pagehelper.reasonable: true pagehelper.page-size-zero: true pagehelper.support-methods-arguments: true
-
mapper
@Select("select * from t_user order by user_id") @ResultMap("com.shawn.spring.boot.mybatis.mapper.UserMapper.BaseResultMap") List<User> selectAll(); @Select("select * from t_user order by user_id") @ResultMap("com.shawn.spring.boot.mybatis.mapper.UserMapper.BaseResultMap") List<User> selectWithRowBounds(RowBounds rowBounds); @Select("select * from t_user order by user_id") @ResultMap("com.shawn.spring.boot.mybatis.mapper.UserMapper.BaseResultMap") List<User> selectWithParams(@Param("pageNum") int pageNum, @Param("pageSize") int pageSize);
-
service
@Override public PageInfo<User> findWithPageHelper(int pageNum, int pageSize) { PageHelper.startPage(pageNum, pageSize); List<User> userList = userMapper.selectAll(); PageInfo<User> pageInfo = new PageInfo(userList); return pageInfo; } @Override public PageInfo<User> findWithRowBounds(int pageNum, int pageSize) { List<User> users = userMapper.selectWithRowBounds(new RowBounds(pageNum, pageSize)); PageInfo<User> pageInfo = new PageInfo(users); return pageInfo; } @Override public PageInfo<User> findWithParams(int pageNum, int pageSize) { List<User> users = userMapper.selectWithParams(pageNum, pageSize); PageInfo<User> pageInfo = new PageInfo(users); return pageInfo; }
-
test case
public void testPageQuery() { PageInfo<User> withPageHelper = userService.findWithPageHelper(1, 10); log.info("withPageHelper: {}", withPageHelper); PageInfo<User> withRowBounds = userService.findWithRowBounds(1, 10); log.info("withRowBounds: {}", withRowBounds); PageInfo<User> withParams = userService.findWithParams(1, 10); log.info("withParams: {}", withParams); }