spring boot 使用通用 mapper 简化开发

spring boot 使用通用 mapper 简化开发

在使用 mybaits 时虽然有 mybatis generator 代码自动生成工具 但是还是有很多需要我们自己写的 sql 所以就有了通用 mapper tk.mapper 简化我们的开发 但是它也同样不支持表联合查询,联合查询也需要我们自己编写 sql


通用mapper 使用方法:

1 引入依赖:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.0.1</version>
</dependency>

<dependency>
        <groupId>tk.mybatis</groupId>
        <artifactId>mapper-spring-boot-starter</artifactId>
        <version>2.1.5</version>
</dependency>

<!-- 分页插件-->
<dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.2.12</version>
</dependency>

<dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
</dependency>
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
</dependency> 

2.配置数据库 和 mybaits 相关信息

spring:
    datasource:
        url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC+8
        username: root
        password: root
        driver-class-name: com.mysql.jdbc.Driver

mapper:
    notEmpty: true
    identity: MYSQL

mybatis:
    mapperLocations: classpath:**/mapper/*.xml

3 指定mapper需要扫面的包路劲

@MapperScan(basePackages = "com.example.tkmapper.mapper")
@SpringBootApplication
public class TkMapperApplication {

        public static void main(String[] args) {
                SpringApplication.run(TkMapperApplication.class, args);
        }

}

注意: MapperScan 是通用mapper的 tk.mybatis.spring.annotation.MapperScan

4.书写mapper类

public interface UserMapper extends tk.mybatis.mapper.common.Mapper<User> {
}
很多查询方法我们都可以直接使用了
----------------------------------------------------------------------
同样 我们也可以使用工具自动生成 mapper 和 entity文件
1.首先配置maven插件
<plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.3.7</version>
        <configuration>
                <configurationFile>
                        ${basedir}/src/main/resources/generator/generatorConfig.xml
                </configurationFile>
                <overwrite>true</overwrite>
                <verbose>true</verbose>
        </configuration>
        <dependencies>
                <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.16</version>
                </dependency>
                <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>4.0.0</version>
                </dependency>
        </dependencies>
</plugin>

2 在resource 下 配置数据库信息 generator.properties

#Mybatis Generator configuration
#dao类和实体类的位置
project =src/main/java
#mapper文件的位置
resources=src/main/resources
#根据数据库中的表生成对应的pojo类、dao、mapper
jdbc_driver =com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
jdbc_user=root
jdbc_password=root

3 在resource下配置 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>
        <!--执行generator插件生成文件的命令: call mvn mybatis-generator:generate -e -->
        <!-- 引入配置文件 -->
        <properties resource="generator/generator.properties"/>
        <!--classPathEntry:数据库的JDBC驱动,换成你自己的驱动位置 可选 -->
        <!--<classPathEntry location="D:\generator_mybatis\mysql-connector-java-5.1.24-bin.jar" /> -->

        <!-- 一个数据库一个context -->
        <!--defaultModelType="flat" 大数据字段,不分表 -->
        <context id="MysqlTables" targetRuntime="MyBatis3Simple" defaultModelType="flat">

                <!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表;
                一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖 -->
                <property name="autoDelimitKeywords" value="true" />
                <!-- 生成的Java文件的编码 -->
                <property name="javaFileEncoding" value="utf-8" />
                <!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
                <property name="beginningDelimiter" value="`" />
                <property name="endingDelimiter" value="`" />

                <!-- 格式化java代码 -->
                <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
                <!-- 格式化XML代码 -->
                <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
                <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />

                <plugin type="org.mybatis.generator.plugins.ToStringPlugin" />

                <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
                        <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
                        <property name="caseSensitive" value="true"/>
                </plugin>

                <!-- 注释 -->
                <commentGenerator >
                        <property name="suppressAllComments" value="false"/><!-- 是否取消注释 -->
                        <property name="suppressDate" value="true" /> <!-- 是否生成注释代时间戳-->
                </commentGenerator>

                <!-- jdbc连接 -->
                <jdbcConnection driverClass="${jdbc_driver}" connectionURL="${jdbc_url}" userId="${jdbc_user}" password="${jdbc_password}" />
                <!-- 类型转换 -->
                <javaTypeResolver>
                        <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
                        <property name="forceBigDecimals" value="false"/>
                </javaTypeResolver>

                <!-- 生成实体类地址 -->
                <javaModelGenerator targetPackage="com.example.tkmapper.entity" targetProject="${project}" >
                        <property name="enableSubPackages" value="false"/>
                        <property name="trimStrings" value="true"/>
                </javaModelGenerator>
                <!-- 生成mapxml文件 -->
                <sqlMapGenerator targetPackage="mapper" targetProject="${resources}" >
                        <property name="enableSubPackages" value="false" />
                </sqlMapGenerator>
                <!-- 生成mapxml对应client,也就是接口dao -->
                <javaClientGenerator targetPackage="com.example.tkmapper.mapper" targetProject="${project}" type="XMLMAPPER" >
                        <property name="enableSubPackages" value="false" />
                </javaClientGenerator>
                <!-- table可以有多个,每个数据库中的表都可以写一个table,tableName表示要匹配的数据库表,也可以在tableName属性中通过使用%通配符来匹配所有数据库表,只有匹配的表才会自动生成文件 -->
                <table tableName="user" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true">

                        <!-- 数据库表主键 -->
                        <generatedKey column="id" sqlStatement="Mysql" identity="true" />
                </table>
        </context>
</generatorConfiguration>

最后执行命令 代码生成

mvn mybatis-generator:generate 

表联合查询 就需要自己写 sql 了 同样在xml 文件里面写 和普通的用法相同

<select id = "findUserById" resultMap = "BaseResult">
    SELECT * FROM user where id = #{id}
</select>

猜你喜欢

转载自blog.51cto.com/5013162/2408004