tkMybatis和Mybatis Generator的结合使用


tkMybatis配置

tkmybatis是基于Mybatis框架开发的一个工具,通过调用它提供的方法实现对单表的数据操作,以免写任何sql语句。
tkMybatis通常与Mybatis以及Mybatis Generator结合使用,实现数据库Model和Mapper的自动化创建的同时方便对单表进行操作。

  • 引入依赖

<dependencies>中引入依赖

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

<build><plugins>中添加mybatis generator和tkmybatis相关依赖

            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.6</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>5.1.29</version>
                    </dependency>
                    <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>4.0.0</version>
                    </dependency>
                </dependencies>
            </plugin>
  • 配置Mybatis Generator
    在你的resources文件夹中创建generator文件夹,并创建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="MyBatis3Simple" defaultModelType="flat">
        <property name="javaFileEncoding" value="UTF-8"/>
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

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

        <!-- 数据源配置 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/table"
                        userId="root"
                        password="1234">
        </jdbcConnection>

        <!-- 实体生成路径 -->
        <javaModelGenerator targetPackage="com.example.entity" targetProject="src/main/java"/>

        <!-- xml配置文件生成路径 -->
        <sqlMapGenerator targetPackage="mapper.xml" targetProject="src/main/resources"/>

        <!-- Mapper文件生成位置 -->
        <javaClientGenerator targetPackage="com.example.mapper" targetProject="src/main/java"
                             type="XMLMAPPER"/>
        
        <!-- 对要进行自动生成的表进行配置 -->
        <table tableName="t_order" domainObjectName="Order">
            <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
        </table>

注:现在Mysql的的最新数据源驱动为com.mysql.cj.jdbc.Driver,如要使用该驱动,mysql-connector-java的版本请选择8.0以上版本

配置完成后,可以在Maven命令中找到mybatis-generator实现自动生成

  • tkmybatis的使用
    tkmybatis.mapper.common.Mapper提供了单表操作的各种方法,如下所示:
@RegisterMapper
public interface Mapper<T> extends BaseMapper<T>, ExampleMapper<T>, RowBoundsMapper<T>, Marker {
}

则可以直接使用该类,并调用接口方法实现SQL

public abstract class BaseService<T> {

    @Autowired
    protected Mapper<T> mapper;

    //主键查询
    public T findOne(Object key) {
        return mapper.selectByPrimaryKey(key);
    }

    // 条件查询
    public List<T> find(Criteria<T> criteria) {
        return mapper.selectByExample(criteria.example());
    }
}

同时实现条件查询,可以继承tk.mybatis.mapper.entity.SqlsCriteria和使用Sqls.Criteria来实现
思路就是利用Criteria来构建条件,再转化成Example来实现。
也可以通过Example.createCriteria()来构建Example,不过灵活性稍差

public class Criteria<T> implements tk.mybatis.mapper.entity.SqlsCriteria
{
    private Sqls.Criteria criteria;

    private Class<T> clas;

    private Criteria(Class<T> clas) {
        this.clas = clas;
        this.criteria = new Sqls.Criteria();
    }

    public static <T> Criteria<T> getInstance(Class<T> clas) {
        return new Criteria<>(clas);
    }

    public Criteria<T> andIsNull(String property) {
        this.criteria.getCriterions().add(new Sqls.Criterion(property, "is null", "and"));
        return this;
    }

    //通过Lambda表达式获得字段名
    public Criteria<T> andIsNull(Fn<T, Object> fn) {
        return this.andIsNull(Reflections.fnToFieldName(fn));
    }

    @Override
    public Sqls.Criteria getCriteria() {
        return criteria;
    }

    //转换成example
    public Example example() {
        //根据criteria构建Example
        Example.Builder where = new Example.Builder(clas).where(this);
        return where.build();
    }
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM