tk.mapper框架使用

news2024/12/23 10:43:55

说明:tk.mapper是一款DAO框架,也是基于Mybatis的,个人感觉,他是基于MyBatis和MyBatis-plus、MyBatis-Flex之间的过渡框架——能调用DAO的API,不手写SQL,但功能没有后面这两款框架多。本文介绍tk.mapper框架的使用。

一、使用

第一步:引入依赖

Spring-Boot项目,导入以下依赖

	<dependency>
	    <groupId>tk.mybatis</groupId>
	    <artifactId>mapper</artifactId>
	    <version>4.1.5</version>
	</dependency>
	
	<dependency>
	    <groupId>org.mybatis.spring.boot</groupId>
	    <artifactId>mybatis-spring-boot-starter</artifactId>
	    <version>2.2.2</version>
	</dependency>

当然,还需要导入数据库驱动依赖,这个取决于你的数据库。

如果是MySQL

8.x版本

    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <scope>runtime</scope>
    </dependency>

5.x版本

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

如果是Postgresql

	<dependency>
	    <groupId>org.postgresql</groupId>
	    <artifactId>postgresql</artifactId>
	    <version>42.7.3</version>
	</dependency>

第二步:实体类关联数据库表

在实体类上,加上@Table(name = “i_users”)注解,name的属性值表示数据库表的名称,如下:

import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;

@Table(name = "i_users")
@Data
public class User implements Serializable {

    @Id
    private Integer id;

    @Column(name = "username")
    private String username;

    private String password;
}

@Id注解,表示改字段为该表的主键

@Column注解,name属性值表示在数据库该字段的名称,当字段名与属性名不一致时,可以用这个注解取别名,建立映射

第三步:创建Repository

创建针对User表的数据库访问对象(DAO),如下:

import com.hezy.pojo.User;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

@Repository
public interface UserRepository extends Mapper<User> {
}

继承Mapper,尖括号里面填实体类,后面就可以用框架自带的API操作数据库了。

第四步:测试

创建一个UserController,用框架自带的全查API,selectAll(),小试一下。

import com.hezy.pojo.User;
import com.hezy.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("user")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping
    public List<User> getUser() {
        return userRepository.selectAll();
    }
}

数据库表如下:

在这里插入图片描述

启动项目,调用接口,如下:

在这里插入图片描述

整合完成

二、API

下面介绍框架自带的API使用,分为添加、删除、修改和查询;

(1)添加数据

@Test
public void insertUserTest() {
	// 1.全字段插入
	User user1 = new User();
	user1.setUsername("wangwu");
	user1.setPassword("123465");
	userRepository.insert(user1);
	
	// 2.部分字段插入
	User user2 = new User();
	user2.setUsername("zhaoliu");
	userRepository.insertSelective(user2);
}

注:在需要使用数据库默认值时,需要用部分字段插入,insertSelective()。如密码字段数据库默认值为123456,如果用全字段插入insert(),那么插入的数据密码字段会是null

(2)删除数据

@Test
public void deleteUserTest() {
	// 1.根据对象删除,用这种方式最好给对象set一个唯一约束的字段,不然会删掉所有password=123456的记录
	User user1 = new User();
	user1.setPassword("123456");
	userRepository.delete(user1);
	
	// 2.根据主键删除
	userRepository.deleteByPrimaryKey(5);
	
	// 3.构建条件删除,username等于zhaoliu的记录
	Example example = new Example(User.class);
	example.createCriteria().andEqualTo("username", "zhaoliu");
	userRepository.deleteByExample(example);
}

(3)修改数据

@Test
public void updateUserTest() {
    // 1.根据主键全字段更新,未设置的字段为null或者用数据库默认值
    User user1 = new User();
    user1.setId(4);
    user1.setUsername("zhangsan");
    user1.setPassword("123456");
    userRepository.updateByPrimaryKey(user1);

    // 2.根据主键部分字段更新,未设置的字段保持原样
    User user2 = new User();
    user2.setId(4);
    user2.setUsername("lisi");
    userRepository.updateByPrimaryKeySelective(user2);

    // 3.构建条件全字段更新,更新username=lisi的记录,password字段为123456,username字段未设置,更新后,username=null
    User user3 = new User();
    user3.setPassword("123456");
    Example example1 = new Example(User.class);
    example1.createCriteria().andEqualTo("username", "lisi");
    userRepository.updateByExample(user3, example1);

    // 4.构建条件部分字段更新,更新username=lisi的记录,password字段为123456,username字段未设置,更新后,username保持原样
    User user4 = new User();
    user4.setPassword("123456");
    Example example2 = new Example(User.class);
    example2.createCriteria().andEqualTo("username", "lisi");
    userRepository.updateByExampleSelective(user4, example2);
}

注意区分全字段更新和部分字段更新

(4)查询数据

@Test
public void selectUserTest() {
    // 1.全查
    List<User> users = userRepository.selectAll();
    System.out.println(users);

    // 2.根据主键查
    User user = userRepository.selectByPrimaryKey(4);
    System.out.println(user);

    // 3.查询password=123456的一条记录,如果有多个会报TooManyResultsException
    User user2 = new User();
    user2.setPassword("123456");
    User user3 = userRepository.selectOne(user2);
    System.out.println(user3);

    // 4.统计password=123456的记录数
    User user4 = new User();
    user4.setPassword("123456");
    int count1 = userRepository.selectCount(user4);
    System.out.println(count1);

    // 5.构建条件查询,username字段为null的记录
    Example example1 = new Example(User.class);
    example1.createCriteria().andIsNull("username");
    List<User> userList = userRepository.selectByExample(example1);
    System.out.println(userList);

    // 6.构建条件统计,统计记录以li开头的记录,注意这里andLike的value里面写的是like后面的完整部分,要带上通配符
    Example example2 = new Example(User.class);
    example2.createCriteria().andLike("username", "li%");
    int count2 = userRepository.selectCountByExample(example2);
    System.out.println(count2);

    // 7.分页查询,假设每页显示2条,查询第2页的内容
    int pageIndex = 2;
    int pageSize = 2;
    int offset = (pageIndex - 1) * pageSize;
    RowBounds rowBounds = new RowBounds(offset, pageSize);
    List<User> bounds = userRepository.selectByRowBounds(new User(), rowBounds);
    System.out.println(bounds);

    // 8.根据条件分页查询,查询password=123456的记录,并且按照每页显示2条,查询第2页的内容
    Example example = new Example(User.class);
    example.createCriteria().andEqualTo("password", "123456");
    List<User> andRowBounds = userRepository.selectByExampleAndRowBounds(example, rowBounds);
    System.out.println(andRowBounds);
}

注意andLike()查询,里面要填通配符,不能像MyBatis-Plus那样,有细分左like、右like的API;

总结

本文介绍了tk.mapper框架的使用,实际上就是整合加API的使用,没有什么技术点,这些API在实际用的时候再去看都来得及,完全不用记。

Mybatis、MyBatis-Plus介绍参看下面这两篇文章:

  • MyBatis操作数据库实现

  • MyBatis-Plus框架

完整代码:https://github.com/HeZhongYing/tk_mapper_demo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2183478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyInstaller打包并设置图标

PyInstaller 是一个用于将 Python 代码打包成独立可执行文件的工具。如果你的 Python 代码中使用了一些资源文件&#xff08;如图片、音频、配置文件等&#xff09;&#xff0c;那么你需要将这些资源文件一起打包到可执行文件中&#xff0c;以便在运行时能够访问这些资源。 以…

STM32新建工程-基于库函数

一、创建一个新工程 我这里选择STM32F103C8的型号&#xff0c;然后点击OK。 keil5里面的小助手&#xff0c;暂时不用&#xff0c;叉掉 二、为工程添加文件和路径 在工程模板中还需要添加启动文件、系统头文件、系统时钟文件&#xff0c;创建一个文件夹start&#xff0c;将下面…

【韩顺平Java笔记】第5章:程序控制结构

文章目录 102. 回顾上一章节103. 顺序控制103.1 顺序控制 104. 单分支使用104.1 分支控制 if-else 介绍104.2 单分支 105. 单分支流程图106. 双分支使用107. 双分支流程图108. 双分支练习题109. 多分支使用109.1 多分支的流程图 110. 多分支练习1111. 多分支练习2112. 嵌套分支…

Fibonacci数列最小步数

1.题目&#xff1a; 2.解析&#xff1a; 让a,b,c回滚构造斐波那契数列 &#xff1a;ab, bc, cab; 输入的数 n小于c,在b,c之间&#xff0c;只要 n1 或者 n-1&#xff08;贪心思想&#xff1a;n只加一或者只减一&#xff09; 最后再求n-b,c-n的最小值&#xff0c;获得最小步数 …

《Linux从小白到高手》理论篇(八):Linux的进程管理详解

本篇将介绍Linux的进程管理相关知识&#xff0c;并将深入介绍Linux的进程间相互通信。 进程就是运行中的程序&#xff0c;一个运行着的程序&#xff0c;可能有多个进程。 比如Oracle DB&#xff0c;启动Oracle实例服务后&#xff0c;就会有多个进程。 Linux进程分类 在 Linux…

csp-j模拟一补题报告

前言 又要开始写补题报告了&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; &#xff08;“关于二进制中1的个数的研究”这篇文章可能会延期&#xff09; 第一题 题目 交替出场 (alter.cpp/c) 问题描述 给定一个字符串&#xff0c…

DC00024基于ssm实验室预约管理系统java web项目web教师预约jsp预约管理系统

1、项目功能演示 DC00024基于web实验室预约管理系统ssm教室预约实验室预约管理系统java web项目MySQL 2、项目功能描述 基于ssm实验室预约管理系统分为用户和系统管理员两个角色。 2.1 系统管理员 1、系统登录 2、用户管理&#xff1a;修改个人信息、修改个人密码、教师管理…

Forrester 报告揭示 2024 年十大云市场趋势:AI 与边缘计算融合带来机遇与挑战

云计算de小白 Forrester 在其“2024 年十大云计算趋势”报告中表示&#xff1a;“2024 年&#xff0c;基于云端的 AI 产品的市场采用和普及度将达到高潮。” Forrester 表示&#xff1a;“企业用户已经投资了微软 M365 Copilot 等人工智能服务作为提高生产力的工具&#xff0…

2024新淘宝镜像地址下载【vue-cli】

需要先安装NodeJS&#xff0c;然后再安装Vue-cli NodeJS下载 nodejs下载&#xff0c;直接搜官网 网址&#xff1a;https://nodejs.org/zh-cn LTS为长期稳定版本&#xff1a; 安装过程 只需要配置一下安装目录&#xff0c;其他都点下一步next 注意安装目录无中文无空格 验证…

vulnhub-Basic Pentesting 2靶机

vulnhub&#xff1a;https://www.vulnhub.com/entry/basic-pentesting-2,241/ 导入靶机(建议VirtualBox&#xff0c;VMWare扫不到)&#xff0c;放在kali同网段&#xff0c;扫描 靶机在192.168.81.3&#xff0c;扫描端口 很多端口&#xff0c;存在网站服务&#xff0c;访问 啥也…

加密与安全_HTOP 一次性密码生成算法

文章目录 HOTP 的基础原理HOTP 的工作流程HOTP 的应用场景HOTP 的安全性安全性增强措施Code生成HOTP可配置项校验HOTP可拓展功能计数器&#xff08;counter&#xff09;计数器在客户端和服务端的作用计数器的同步机制客户端和服务端中的计数器表现服务端如何处理计数器不同步计…

centos7安装docker-ce服务

docker服务安装 前言一、使用阿里云源进行安装二、使用清华源安装三、使用官网源安装 前言 centos7安装docker-ce 服务 一、使用阿里云源进行安装 centos7安装docker在国内使用阿里云的源安装比较快速。 # 获取yum源 sudo yum install -y yum-utils; sudo yum-config-manager …

(Linux驱动学习 - 4).Linux 下 DHT11 温湿度传感器驱动编写

DHT11的通信协议是单总线协议&#xff0c;可以用之前学习的pinctl和gpio子系统完成某IO引脚上数据的读与写。 一.在设备树下添加dht11的设备结点 1.流程图 2.设备树代码 &#xff08;1&#xff09;.在设备树的 iomuxc结点下添加 pinctl_dht11 &#xff08;2&#xff09;.在根…

解决Excel时出现“被保护单元格不支持此功能“的解决办法,详细喂饭级教程

今天有个朋友发过来一个excel文件&#xff0c;本来想修改表格的内容&#xff0c;但是提示&#xff0c;被保护单元格不支持此功能&#xff0c;对于这个问题&#xff0c;找到一个解决方法&#xff0c;现记录下来&#xff0c;分享给有需要的朋友。 表格文件名为aaa.xls,以WPS为例。…

十一、磁盘的结构

1.磁盘的结构 磁盘 磁盘由表面涂有磁性物质的圆形盘片组成 磁道 每个盘片被划分为一个个磁道 扇区 每个磁道又划分为一个个扇区&#xff0c;每个扇区就是“磁盘块”&#xff0c;由于其容量相等&#xff0c;内磁道扇区面积小&#xff0c;故密度大。 盘面 磁盘有多个盘片“…

【AIGC】ChatGPT提示词解析:如何打造个人IP、CSDN爆款技术文案与高效教案设计

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;打造个人IP爆款文案提示词使用方法 &#x1f4af;CSDN爆款技术文案提示词使用方法 &#x1f4af;高效教案设计提示词使用方法 &#x1f4af;小结 &#x1f4af;前言 在这…

时序必读论文14|VLDB24 TFB:全面且公平的时间序列预测方法框架

论文标题&#xff1a;TFB: Towards Comprehensive and Fair Benchmarking of Time Series Forecasting Methods 论文链接&#xff1a;https://arxiv.org/pdf/2403.20150.pdf 代码链接&#xff1a;https://github.com/decisionintelligence/TFB 前言 五一过后读的第一篇文章…

MySQL 大数据量导入与导出全攻略

《MySQL 大数据量导入与导出全攻略》 在实际的数据库应用中&#xff0c;我们经常会遇到需要处理大数据量的导入和导出的情况。无论是数据迁移、备份恢复&#xff0c;还是数据共享&#xff0c;高效地处理大数据量都是至关重要的。那么&#xff0c;MySQL 是如何应对大数据量的导…

深度学习 Transformer 的标签平滑(Label Smoothing)

01 引言 标签平滑&#xff08;Label Smoothing&#xff09;是一种正则化技术&#xff0c;用于深度学习中的分类任务&#xff0c;尤其是在Transformer模型中。它的目的是减少模型对于训练数据中硬标签&#xff08;hard labels&#xff0c;即标准的one-hot编码&#xff09;的过…

期权卖方怎么选择权利金高的品种,期货VIX高低对行情有什么影响

VIX指数——全称为芝加哥期权交易所市场波动率指数&#xff0c;俗称恐慌指数。 是衡量波动性的重要指标。VIX指数上升&#xff0c;预期未来市场波动性会增加。VIX指数下降&#xff0c;预期未来市场波动性会降低。 期货VIX指数最新价格排序 期权卖方尽量选择期货VIX指数在25以…