广告
返回顶部
首页 > 资讯 > 后端开发 > Python >TKMybatis的介绍和使用详解
  • 400
分享到

TKMybatis的介绍和使用详解

2024-04-02 19:04:59 400人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录一、什么是 TKmybatis二、TKMybatis 使用2.1 SpringBoot 项目中加入依赖2.2 使用讲解2.3 实际案例三、扩展介绍泛型(实体类)的类型必须符合要求

一、什么是 TKMybatis

TKMybatis 是基于 Mybatis 框架开发的一个工具,内部实现了对单表的基本数据操作,只需要简单继承 TKMybatis 提供的接口,就能够实现无需编写任何 sql 即能完成单表操作。

二、TKMybatis 使用

2.1 springboot 项目中加入依赖


<!--通用mapper起步依赖-->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.0.4</version>
</dependency>

在 POJO 类中加入依赖


<!--每个工程都有Pojo,都需要用到该包对应的注解-->
<dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>persistence-api</artifactId>
    <version>1.0</version>
    <scope>compile</scope>
</dependency>

在启动类中配置 @MapperScan 扫描


@SpringBootApplication
@MapperScan(basePackages = {"com.tom.order.mapper"})
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

2.2 使用讲解

2.2.1 实体类中使用

在实体类中,常用的注解和意义为:

@Table:描述数据库表信息,主要属性有name(表名)、schema、catalog、uniqueConstraints等。

@Id:指定表主键字段,无属性值。

@Column:描述数据库字段信息,主要属性有name(字段名)、columnDefinition、insertable、length、nullable(是否可为空)、precision、scale、table、unique、updatable等。

@ColumnType:描述数据库字段类型,可对一些特殊类型作配置,进行特殊处理,主要属性有jdbcType、column、typeHandler等。

其他注解如:@Transient、@ColumnResult、@JoinColumn、@OrderBy、@Embeddable等暂不描述

2.2.2 dao中使用

单表操作,只需要继承 tk.mybatis 下的 Mapper 接口即可使用


import tk.mybatis.mapper.common.Mapper;
 
@Repository
public interface BrandMapper extends Mapper<Brand> {
}

查看具体使用:内部都已经封装了基本的单表操作

 2.2.3 Service 层中使用

操作 类型 介绍
增加 Mapper.insert(record); 保存一个实体,null的属性也会保存,不会使用数据库默认值
Mapper.insertSelective(record); 保存一个实体,忽略空值,即没提交的值会使用使用数据库默认值
删除 Mapper.delete(record); 根据实体属性作为条件进行删除,查询条件使用等号
Mapper.deleteByExample(example) 根据Example条件删除数据
Mapper.deleteByPrimaryKey(key) 根据主键字段进行删除,方法参数必须包含完整的主键属性
修改 Mapper.updateByExample(record,example) 根据Example条件更新实体`record`包含的全部属性,null值会被更新
Mapper.updateByExampleSelective(record, example) 根据Example条件更新实体`record`包含的不是null的属性值
Mapper.updateByPrimaryKey(record) 根据主键更新实体全部字段,null值会被更新
Mapper.updateByPrimaryKeySelective(record) 根据主键更新属性不为null的值
查询 Mapper.select(record) 根据实体中的属性值进行查询,查询条件使用等号
Mapper.selectAll() 查询全部结果
Mapper.selectByExample(example) 根据Example条件进行查询
Mapper.selectByPrimaryKey(key) 根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号
Mapper.selectCount(record) 根据实体中的属性查询总数,查询条件使用等号
Mapper.selectCountByExample(example) 根据Example条件进行查询总数
Mapper.selectOne(record)

根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号。

但是如果存在某个属性为int,则会初始化为0。可能影响到实际使用

2.3 实际案例

2.3.1 dao 层使用


 
import tk.mybatis.mapper.common.Mapper;
 

@Repository
public interface BrandMapper extends Mapper<Brand> {
 
 
}

2.3.2 service 层使用


import com.GitHub.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
 
import java.util.List;
 
@Service
public class BrandServiceImpl implements BrandService {
 
    @Autowired
    private BrandMapper brandMapper;
 
    public Example createExample(Brand brand) {
        // 自定义条件搜索对象 Example
        Example example = new Example(Brand.class);
        Example.Criteria criteria = example.createCriteria(); //条件构造器
 
        if (brand != null) {
            if (!StringUtils.isEmpty(brand.getName())) {
                criteria.andLike("name", '%' + brand.getName() + '%');
            }
 
            if (!StringUtils.isEmpty(brand.getLetter())) {
                criteria.andEqualTo("letter", brand.getLetter());
            }
        }
        return example;
    }
 
    @Override
    public List<Brand> findAll() {
        return brandMapper.selectAll();
    }
 
    @Override
    public List<Brand> findList(Brand brand) {
        Example example = createExample(brand);
        return brandMapper.selectByExample(example);
    }
 
    @Override
    public Brand findById(Integer id) {
        return brandMapper.selectByPrimaryKey(id);
    }
 
    
    @Override
    public PageInfo<Brand> pageSearch(Integer page, Integer size) {
        // 分页实现
        // 后面的查询必须是紧跟集合查询
        PageHelper.startPage(page, size);
        // 查询集合
        List<Brand> brands = brandMapper.selectAll();
        return new PageInfo<Brand>(brands);
    }
 
    @Override
    public PageInfo<Brand> pageSearchAndCondition(Brand brand, Integer page, Integer size) {
        // 开始分页
        PageHelper.startPage(page, size);
        // 搜索数据
        Example example = createExample(brand);
        List<Brand> list = brandMapper.selectByExample(example);
        return new PageInfo<Brand>(list);
    }
 
    
    @Override
    public void add(Brand brand) {
        // 使用通用 Mapper.insertSelective
        // 方法中但凡带有selective就会忽略空值
        int i = brandMapper.insertSelective(brand);
    }
 
    
    @Override
    public void update(Brand brand) {
        // 使用通用mapper.update();
        brandMapper.updateByPrimaryKeySelective(brand);
    }
 
    
    @Override
    public void del(Integer id) {
        brandMapper.deleteByPrimaryKey(id);
    }
}

三、扩展介绍

使用


public interface BaseMapper<T> extends tk.mybatis.mapper.common.BaseMapper<T>, IdsMapper<T>, MysqlMapper<T>, oracleMapper<T> {
}

pom.xml引入
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.1.5</version>
</dependency>

注:为了演示所以同时引用了mysqlMapper和OracleMapper 正常情况是只能引用一种因为他们有一个相同的方法insertList(List list)

泛型(实体类)的类型必须符合要求

实体类按照如下规则和数据库表进行转换,注解全部是JPA中的注解:

  • 表名默认使用类名,驼峰转下划线(只对大写字母进行处理),如UserInfo默认对应的表名为user_info。
  • 表名可以使用@Table(name = “tableName”)进行指定,对不符合第一条默认规则的可以通过这种方式指定表名。
  • 字段默认和@Column一样,都会作为表字段,表字段默认为Java对象的Field名字驼峰转下划线形式。
  • 可以使用@Column(name = “fieldName”)指定不符合第3条规则的字段名。
  • 使用@Transient注解可以忽略字段,添加该注解的字段不会作为表字段使用。
  • 建议一定是有一个@Id注解作为主键的字段,可以有多个@Id注解的字段作为联合主键。

所有的mapper继承此类将具有以下通用方法

查询方法

BaseSelectMapper下的通用方法

方法名称 作用
List selectAll(); 查询全部数据
T selectByPrimaryKey(Object key); 通过主键查询
T selectOne(T record); 通过实体查询单个数据
List select(T record); 通过实体查询多个数据
int selectCount(T record); 通过实体查询实体数量
boolean existsWithPrimaryKey(Object key); 通过主键查询此主键是否存在

SelectByIdsMapper下的通用方法

方法名称 作用
List selectByIds(String var1); 通过多个主键查询数据

添加方法
BaseInsertMapper下的通用方法

 

方法名称 作用
int insert(T record); 全部添加
int insertSelective(T record); 选择性(不为null)的添加

MySqlMapper下的通用方法

方法名称 作用
int insertList(List list); 批量插入
int insertUseGeneratedKeys(T record); 如果主键为自增可使用此方法获取添加成功的主键

OracleMapper下的通用方法

方法名称 作用
int insertList(List list); 批量插入

修改方法

BaseUpdateMapper下的通用方法

方法名称 作用
int updateByPrimaryKey(T record); 按照实体进行修改
int updateByPrimaryKeySelective(T record); 按照实体进行有选择的修改

删除方法
BaseDeleteMapper下的通用方法

方法名称 作用
int delete(T record); 按照实体进行删除
int deleteByPrimaryKey(Object o); 按照主键进行删除

IdsMapper下的通用方法

方法名称 作用
int deleteByIds(String var1); 按照主键批量删除

到此这篇关于TKMybatis的介绍和使用详解的文章就介绍到这了,更多相关TKMybatis 使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: TKMybatis的介绍和使用详解

本文链接: https://www.lsjlt.com/news/158881.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • TKMybatis的介绍和使用详解
    目录一、什么是 TKMybatis二、TKMybatis 使用2.1 Springboot 项目中加入依赖2.2 使用讲解2.3 实际案例三、扩展介绍泛型(实体类)的类型必须符合要求...
    99+
    2022-11-12
  • 详解IdentityServer4介绍和使用
    目录一、概述1、OpenID认证用户的流程2、OAuth认证用户的流程3、IdentityServer4对象二、IdentityServer4实践1、构建非持久化认证服务项目2、构建...
    99+
    2022-11-13
  • Python JWT 介绍和使用详解
    1. JWT 介绍 ​jwt( JSON Web Tokens ),是一种开发的行业标准 RFC 7519 ,用于安全的表示双方之间的声明。目前,jwt广泛应用在系统的用户认证方面,特别是现在前后端分离项...
    99+
    2022-06-02
    Python JWT使用 Python JWT
  • libmp3lame及API介绍和使用详解
    目录API介绍简单使用API介绍 API地址是对libmp3lame.so的编码部分最基础接口的介绍,本库特包含了增加id3标签和mp3的解码的支持。这里并不是完整的文档,但是你可以...
    99+
    2023-05-18
    libmp3lame API使用 libmp3lame API
  • Java注解的介绍和使用详细讲解
    文章目录 注解注解基本介绍自定义注解元注解注解解析 注解 注解基本介绍 注解概述: Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 Java 语言中的类、构造器、方法...
    99+
    2023-08-16
    java junit 开发语言
  • PHP——thinkphp5的详解介绍与使用
    ThinkPHP5是一款基于PHP语言的轻量级开源框架,它具有简单、高效、灵活、安全等特点,非常适合快速开发Web应用程序。一、Th...
    99+
    2023-08-25
    PHP
  • React Fragment介绍与使用详解
    目录前言 Fragments出现动机 React Fragment介绍与使用 <React.Fragment> 与 <>区别 前言 在向 DOM 树批量添加...
    99+
    2022-11-12
  • Shell AWK编程的基本介绍和使用详解
    目录1、AWK介绍(1)AWK概述(2)printf格式化输出(3)printf命令说明2、AWK的基本使用(1)AWK命令说明(2)AWK命令使用1、AWK介绍 (1)AWK概述 AWK是一种处理文本文件的语言,是一个...
    99+
    2022-06-08
    Shell AWK使用 Shell AWK基本介绍
  • Kotlin集合ListSetMap使用介绍详解
    1.在Kotlin中可以通过以下方式创建ArrayList、LinkedList、HashSet、HashMap等。 val arrayList = ArrayList<...
    99+
    2022-11-13
  • 一文详解Mybatis-plus的介绍与使用
    目录Mybatis-Plus简介Mybatis-Plus特性Mybatis-Plus实操数据库相关配置小项目运行配置添加数据删除数据修改数据查询数据小结Mybatis-Plus简介 ...
    99+
    2022-11-13
  • Vuex详细介绍和使用方法
    目录一、什么是Vuex二、运行机制三、创建项目1、使用脚手架搭建Vue项目2、安装Vuex3、启动项目4、配置使用Vuex4.1、创建store文件夹4.2、配置全局使用store对...
    99+
    2022-11-13
  • KVM 介绍及作用详解
    目录一、虚拟化1、背景2、虚拟化技术介绍3、虚拟化技术发展4、虚拟化类型5、虚拟化的特性特性:二、KVM概述1、KVM简介2、KVM的作用3、KVM 虚拟化架构/三种模式4、KVM核...
    99+
    2022-11-13
  • C/C++指针介绍与使用详解
    目录什么是指针定义指针变量间接引用指针常or常常指向指针的指针指针与数组指针的运算堆内存分配C语言C++语言指针与函数数组名作为函数的入口参数函数名作为参数传入其他函数使用指针修改函...
    99+
    2022-11-13
  • MyBatis元素resultMap介绍及使用详解
    1.resultMap resultMap 元素是 MyBatis 中最重要最强大的元素。解决类属性名和数据库中表字段名不一致问题ResultMap 的设计思想是,对简单的语句做到零...
    99+
    2022-11-13
  • Vue中mixins混入的介绍与使用详解
    目录一、来自官网的描述二、如何创建Mixins三、项目中如何使用混入四、与vuex的区别五、与公共组件的区别一、来自官网的描述 混入 (mixins): 是一种分发 Vue 组件中可...
    99+
    2022-12-23
    Vue mixins混入 Vue mixins使用
  • Scrapy框架CrawlSpiders的介绍以及使用详解
    在Scrapy基础——Spider中,我简要地说了一下Spider类。Spider基本上能做很多事情了,但是如果你想爬取知乎或者是简书全站的话,你可能需要一个更强大的武器。CrawlSpider基于Spid...
    99+
    2022-06-04
    详解 框架 Scrapy
  • 详解Java中对象池的介绍与使用
    目录1. 什么是对象池2. 对象池解决什么问题3. 对象池的优缺点3.1 对象池的优点3.2 对象池弊端4. 对象池有什么特征5. 池的大小选择6. 对象池的使用6.1 接入6.2 ...
    99+
    2023-02-21
    Java对象池使用 Java对象池
  • React状态管理Redux的使用介绍详解
    目录1. 简介2. 核心概念3. redux工作流4. 模拟redux工作流程5. 使用redux6. react-redux1. 简介 Redux 是 JavaScript 应用的...
    99+
    2022-11-13
  • Fiddler的使用介绍及抓包分析(详解)
    (我的公众号“墨石测试攻略”,关注可免费获取全套接口测试实战项目) 文章目录 1 Fiddler简介2 Fiddler工作原理3 Fiddler安装4 Fiddler使用4.1 界面介绍4....
    99+
    2023-09-07
    fiddler 服务器 测试工具 功能测试
  • C++中模板和STL介绍详解
    目录一、模板1.1.函数模板1.1.1.两种函数模板的实例化1.1.2.模板参数的匹配原则1.2.类模板二、STL总结一、模板 对于一个交换函数,虽然C++支持函数重载,我们可以对多...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作