什么是TKMybatis, TKMybatis是基于 Mybatis 框架开发的一个工具,内部实现了对单表的基本数据操作,只需要简单继承 TKMybatis 提供的接口,就能够实现无需编写任何 sql 即能完成单表操作
<dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency>
考虑到基本数据类型在Java 类中都有默认值,会导致MyBatis 在执行相关操作时很难判断当前字段是否为null,所以在MyBatis 环境下使用Java 实体类时尽量不要使用基本数据类型,都使用对应的包装类型。
在实体类中,常用的注解和意义为:
@Table:描述数据库表信息,主要属性有name(表名)、schema、catalog、uniqueConstraints[uniqueConstraints 用来批量命名唯一键其作用等同于多个:@Column(unique = true)]等。
@Id:指定表主键字段。
@Column:描述数据库字段信息,主要属性有name(字段名)、columnDefinition[属性表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用,如果数据库中表已经建好,该属性没有必要使用]、insertable、length、nullable(是否可为空)、precision、scale、table、unique、updatable等。
@ColumnType:描述数据库字段类型,可对一些特殊类型作配置,进行特殊处理,主要属性有jdbcType、column、typeHandler等。
其他注解如:@Transient、@ColumnResult、@JoinColumn、@OrderBy、@Embeddable等暂不描述
以患者住院信息的mapper为例:
a、PatientHospitalInfoMapper继承了MyMapper;
b、MyMapper继承了Mapper<T>, MySqlMapper<T>【主要讲解mapper】;
c、Mapper继承了BaseMapper<T>,ExampleMapper<T>,RowBoundsMapper<T>,Marker;
d、BaseMapper<T>继承了:
BaseSelectMapper<T>,
BaseInsertMapper<T>,insert保存一个实体,null的属性也会保存,不会使用数据库默认值,insertSelective保存一个实体,null的属性不会保存,会使用数据库默认值
BaseUpdateMapper<T>,updateByPrimaryKey根据主键更新实体全部字段,null值会被更新,updateByPrimaryKeySelective根据主键更新属性不为null的值
BaseDeleteMapper<T> delete根据实体属性作为条件进行删除,查询条件使用等号,deleteByPrimaryKey
e、ExampleMapper<T>继承了:
public interface ExampleMapper<T>
SelectByExampleMapper<T>,根据Example条件进行查询list
SelectOneByExampleMapper<T>,根据Example条件进行查询
SelectCountByExampleMapper<T>,根据Example条件进行查询总数
DeleteByExampleMapper<T>,根据Example条件删除数据
UpdateByExampleMapper<T>,根据Example条件更新实体`record`包含的全部属性,null值会被更新
UpdateByExampleSelectiveMapper<T> 根据Example条件更新实体`record`包含的不是null的属性值
f、主要分析Example:
Example是mybatis的逆向工程中会生成实例及实例对应的example,example用于添加条件,相当where后面的部分
example.setOrderByClause(“字段名 ASC”); 添加升序排列条件,DESC为降序
example.setDistinct(false) 去除重复,boolean型,true为选择不重复的记录。
criteria.andXxxIsNull 添加字段xxx为null的条件
criteria.andXxxIsNotNull 添加字段xxx不为null的条件
criteria.andXxxEqualTo(value) 添加xxx字段等于value条件
criteria.andXxxNotEqualTo(value) 添加xxx字段不等于value条件
criteria.andXxxGreaterThan(value) 添加xxx字段大于value条件
criteria.andXxxGreaterThanOrEqualTo(value) 添加xxx字段大于等于value条件
criteria.andXxxLessThan(value) 添加xxx字段小于value条件
criteria.andXxxLessThanOrEqualTo(value) 添加xxx字段小于等于value条件
criteria.andXxxIn(List<?>) 添加xxx字段值在List<?>条件
criteria.andXxxNotIn(List<?>) 添加xxx字段值不在List<?>条件
criteria.andXxxLike(“%”+value+”%”) 添加xxx字段值为value的模糊查询条件
criteria.andXxxNotLike(“%”+value+”%”) 添加xxx字段值不为value的模糊查询条件
criteria.andXxxBetween(value1,value2) 添加xxx字段值在value1和value2之间条件
criteria.andXxxNotBetween(value1,value2) 添加xxx字段值不在value1和value2之间条件
@EnableAsync @SpringBootApplication @MapperScan("com.iyungu.mns.dao") @ComponentScan(basePackages = {"com.iyungu.mns.server","com.iyungu.mns.core","com.iyungu.mns.dao","com.iyungu.mns.common"}) @ConditionalOnClass(SpringfoxWebMvcConfiguration.class) @EnableCaching @EnableRedisHttpSession public class ServerApplication implements WebMvcConfigurer {
mybatis: mapper-locations: classpath:mapper/**/*.xml configuration.cache-enabled: true type-aliases-package: com.iyungu.mns.model.*
a). TkMybatis默认使用继承Mapper接口中传入的实体类对象去数据库寻找对应的表,因此如果表名与实体类名不满足对应规则时,会报错,这时使用@Table为实体类指定表。(这种对应规则为驼峰命名规则)
b). 使用TkMybatis可以无xml文件实现数据库操作,只需要继承tkMybatis的Mapper接口即可。
c). 如果有自定义特殊的需求,可以添加mapper.xml进行自定义sql书写,但路径必须与步骤4对应。