tkmybatis又叫做mybatis通用mapper,是一个很方便的数据库使用插件。可以替代寻常mybatis的使用。
使用的是springboot环境,导入如下依赖,这个时候就不要导入mybatis的依赖了,不然可能会起冲突。
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
tkmybatis叫mybatis通用mapper的原因正是它已经写好了mabatis自动生成的那些接口与sql,因此,对于单表的操作,我们是无需再进行xml文件的编写。
先用以下的实体类:
@Table(name = "t_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nickname;
private Integer sex;
private Integer age;
private String password;
private Integer status;
private String name;
private String identity;
private String position;
private Long roleid;
private Long profession;
此时的我们使用注解@table将User类与数据库的t_user表进行关联。
如果编写的实体类属性与数据库属性命名有差异,需要使用@Column注解进行绑定,没有直接这样就可以了。
这个时候添加接口。
@Repository
public interface UserMapper extends Mapper<User> {
}
可以看到,接口中没有任何方法,这是因为我们继承的Mapper类中已经实现了我们常用对数据库的增删改查,也就是mybatis自动生成时的那些借口方法。
这个时候我们可以直接执行这个已经封装好的方法。
测试一个selectAll(),
可以看到,测试通过,查出了内容。
tkmybatis的作用当然不仅在于Mapper类里的关于主键的增删改查,就像mybatis还有example类的运用一样。
它的统用mapper类不止一个Mapper,还有MySqlMapper,IdsMapper,ConditionMapper,ExampleMapper。ExampleMapper一眼看去就可以看出,他就是mybatis的example类的封装,用法类似,ConditionMapper与ExampleMapper的用法也是类似的。
至于IdsMapper与MySqlMapper这两个则是很有意思的两个类
public int deleteSomeUsers(List<Long> sysTestList) throws BusinessException{
String ids = "";
for (int i = 0; i < sysTestList.size(); i++) {
if (i == sysTestList.size() - 1) {
ids = ids + sysTestList.get(i);
} else {
ids = ids + sysTestList.get(i) + ",";
}
}
try {
return userMapper.deleteByIds(ids);
}catch (Exception ex){
throw new BusinessException("1005","批量删除失败",ex);
}
}
先将list转成String使用。
这个其实也不全是tkmybatis的内容,mybatis也是一样的,当两张表出现关联时,比如说前端查询某个user时中要求包含role对象,此时,我们可以由两种做法
这个其实不用也可以,但是有时候偷懒用用也无妨
导入依赖如下:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<!--自动生成-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<!--配置文件的路径-->
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.4.3</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</pluginManagement>
</build>
配置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>
<properties resource="application.properties"/>
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<!--处理sql中的`符号-->
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
<!-- caseSensitive默认false,当数据库表名区分大小写时,可以将该属性设置为true -->
<property name="caseSensitive" value="true"/>
</plugin>
<!--数据源配置-->
<jdbcConnection driverClass="${spring.datasource.driver-class-name}"
connectionURL="${spring.datasource.url}"
userId="${spring.datasource.username}"
password="${spring.datasource.password}">
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!--model包路径-->
<javaModelGenerator targetPackage="com.lichangduo.magazine.pojo.entity" targetProject="src/main/java"/>
<!--mapper.xml包路径-->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>
<!--mapper包路径-->
<javaClientGenerator targetPackage="com.lichangduo.magazine.mapper" targetProject="src/main/java"
type="XMLMAPPER"/>
<!--表配置,tableName支持%,表示全部生成-->
<table tableName="t_profession" domainObjectName="Profession">
<!--mysql 配置-->
<generatedKey column="id" sqlStatement="Mysql" identity="true"/>
</table>
</context>
</generatorConfiguration>
配置aplication.properties
spring.datasource.url=jdbc:mysql://localhost:3306/db_magazine?serverTimezone=UTC&useUnicode=true&charaterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=666666
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
再使用maven运行就ok了。
不过有一个问题就是在application.yml自动生成的话它读取yml信息会出错,但是明明修改了properties resource,这个问题暂时没弄清楚。