tk_Mapper
大体上,通用Mapper是一个MyBatis的插件,能够自动生成生成单表操作的方法,方便开发。
gitee文档:https://gitee.com/free/Mapper/wikis/Home?sort_id=14104
bilibili学习视频:https://www.bilibili.com/video/BV18f4y197Pr?p=1
1、一个简单的SpringBoot集成tk_Mapper的示例
1、导入依赖
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
2、实体类
@Table(name = "`tf_process_task`")//配置实体类对应的表名
public class TfProcessTask {
@Id//标记字段为主键
@Column(name = "`id`")
@GeneratedValue(generator = "JDBC")
private Long id;
/**
* 待办来源节点
*/
@Column(name = "`node_id`")
private Long nodeId;
/**
* 任务内容
*/
@Column(name = "`content`")
private String content;
/**
* 附件(存地址)
*/
@Column(name = "`appendix`")
private String appendix;
/**
* @return id
*/
public Long getId() {
return id;
}
/**
* @param id
*/
public void setId(Long id) {
this.id = id;
}
/**
* 获取待办来源节点
*
* @return node_id - 待办来源节点
*/
public Long getNodeId() {
return nodeId;
}
/**
* 设置待办来源节点
*
* @param nodeId 待办来源节点
*/
public void setNodeId(Long nodeId) {
this.nodeId = nodeId;
}
/**
* 获取任务内容
*
* @return content - 任务内容
*/
public String getContent() {
return content;
}
/**
* 设置任务内容
*
* @param content 任务内容
*/
public void setContent(String content) {
this.content = content;
}
/**
* 获取附件(存地址)
*
* @return appendix - 附件(存地址)
*/
public String getAppendix() {
return appendix;
}
/**
* 设置附件(存地址)
*
* @param appendix 附件(存地址)
*/
public void setAppendix(String appendix) {
this.appendix = appendix;
}
}
注意:
- 如果实体类中没有一个标记
@Id
的字段,当你使用带有ByPrimaryKey
的方法时,所有的字段会作为联合主键来使用,也就会出现类似where id = ? and countryname = ? and countrycode = ?
的情况。 - 在类中,基本类型会有默认值,而 MyBatis 中经常会需要判断属性值是否为空,所以不要在类中使用基本类型,否则会遇到莫名其妙的错误
3、Mapper接口
import com.tongfun.module.yanwu.stream.pojo.TfProcessTask;
import tk.mybatis.mapper.common.Mapper;
public interface TfProcessTaskMapper extends Mapper<TfProcessTask> {
}
Mapper接口中有大量的已定义方法,但是仅支持单表操作
- selectOne
- select
- selectAll
- selectCount
- selectByPrimaryKey
- … …
可以在Mapper接口中自定义方法,方式同Mybatis一样,
接口方法+mapper.xml
,但是不能出现和继承接口中同名的方法!
4、主启动类
- 你可以给带有
@Configuration
的类配置该注解,或者直接配置到 Spring Boot 的启动类上 - 也可以在
3
的Mapper接口上标注@Mapper
注解
@SpringBootApplication
@MapperScan("com.tongfun.module.yanwu.stream.mapper")
public class ApprovalStreamStart {
public static void main(String[] args) {
SpringApplication.run(ApprovalStreamStart.class,args);
}
}
2、实体类相关注解
1、@NameStyle
注解
这个注解可以在类上进行配置,优先级高于对应的 style
全局配置,可选项如下
normal, //原值
camelhump, //驼峰转下划线
uppercase, //转换为大写
lowercase, //转换为小写
camelhumpAndUppercase, //驼峰转下划线大写形式
camelhumpAndLowercase, //驼峰转下划线小写形式
eg:
@NameStyle(Style.camelhumpAndUppercase)
public class Country{
}
2、@Table
注解
@Table
注解可以配置 name
,catalog
和 schema
三个属性,配置 name
属性后,直接使用提供的表名,不再根据实体类名进行转换。其他两个属性中,同时配置时,catalog
优先级高于 schema
,也就是只有 catalog
会生效。
eg:
@Table(name = "sys_user")
public class User{
}
3、@Column
注解
@Column
注解支持 name
, insertable
和 updateable
三个属性。
name
配置映射的列名。
insertable
对提供的 insert
方法有效,如果设置 false
就不会出现在 SQL 中。
updateable
对提供的 update
方法有效,设置为 false
后不会出现在 SQL 中。
eg:
@Column(name = "user_name")
private String name;
4、@ColumnType
注解
这个注解提供的 column
属性和 @Column
中的 name
作用相同。但是 @Column
的优先级更高。
除了 name
属性外,这个注解主要提供了 jdbcType
属性和 typeHandler
属性。
jdbcType
用于设置特殊数据库类型时指定数据库中的 jdbcType
。
typeHandler
用于设置特殊类型处理器,常见的是枚举。
eg:
@ColumnType(
column = "countryname",
jdbcType = JdbcType.VARCHAR,
typeHandler = StringTypeHandler.class)
private String countryname;
5、@Transient
注解
一般情况下,实体中的字段和数据库表中的字段是一一对应的,但是也有很多情况我们会在实体中增加一些额外的属性,这种情况下,就需要使用 @Transient
注解来告诉通用 Mapper 这不是表中的字段。
eg:
@Transient
private String otherThings; //非数据库表中字段
6、@Id
注解
@Id
注解和映射无关,它是一个特殊的标记,用于标识数据库中的主键字段。
正常情况下,一个实体类中至少需要一个标记 @Id
注解的字段,存在联合主键时可以标记多个。
如果表中没有主键,类中就可以不标记。
当类中没有存在标记 @Id
注解的字段时,你可以理解为类中的所有字段是联合主键。使用所有的 ByPrimaryKey
相关的方法时,有 where
条件的地方,会将所有列作为条件。
@Id
private Integer id;
7、@KeySql
注解
主键策略注解,用于配置如何生成主键。
这是通用 Mapper 的自定义注解,改注解的目的就是替换 @GeneratedValue
注解。
@Id
@KeySql(useGeneratedKeys = true)
private Long id;
这种情况首先需要数据库支持自增,其次数据库提供的 JDBC 支持 getGeneratedKeys
方法。
常见的如 MySql,SqlServer 支持这种模式。
8、@GeneratedValue
注解(JPA)
主键策略注解,用于配置如何生成主键。
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
这种情况首先需要数据库支持自增,其次数据库提供的 JDBC 支持 getGeneratedKeys
方法。
常见的如 MySql,SqlServer 支持这种模式。
9、@Version
注解
@Version
是实现乐观锁的一个注解,大多数人都不需要。
注意:
- 在类中,基本类型会有默认值,而 MyBatis 中经常会需要判断属性值是否为空,所以不要在类中使用基本类型,否则会遇到莫名其妙的错误。
未完待续。