tk_Mapper

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,catalogschema 三个属性,配置 name 属性后,直接使用提供的表名,不再根据实体类名进行转换。其他两个属性中,同时配置时,catalog 优先级高于 schema,也就是只有 catalog 会生效。

eg:

@Table(name = "sys_user")
public class User{
    
}

3、@Column 注解

@Column 注解支持 name, insertableupdateable 三个属性。

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 中经常会需要判断属性值是否为空,所以不要在类中使用基本类型,否则会遇到莫名其妙的错误。

未完待续。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值