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();
}
}