SpringBoot整合TKMyBatis实现单表增删改查操作

目录
  • 什么是TKMybatis
  • SpringBoot整合TKMybatis
  • 实体类注解
  • TKMapper接口如何使用
  • 基本增删改操作
  • 批量查询和删除
  • 批量添加
  • 自定义查询条件Example
    • Example 条件设置
    • Example 使用

什么是TKMybatis

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

SpringBoot整合TKMybatis

添加maven依赖

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

实体类注解

@Setter
@Getter
@Table(name = "user")
public class User {
    /**
     * 用户ID
     */
    @Id
    private String id;
    /**
     * 用户姓名
     */
    private String userName;
    /**
     * 用户密码
     */
    private String passWord;
    /**
     * 年龄
     */
    private Integer age;
    /**
     * 性别
     */
    private String gender;
}

@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等暂不描述

TKMapper接口如何使用

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

@Mapper
public interface UserMapper extends Mapper<User>, MySqlMapper {
}

基本增删改操作

@Service
public class UserService {
    @Resource
    private UserMapper userMapper;
    /**
     *  根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号
     */
    public User selectUserById(String userId){
        return userMapper.selectByPrimaryKey(userId);
    }
    /**
     *  查询全部结果
     */
    public List<User> selectAll(){
        return userMapper.selectAll();
    }
    /**
     *  根据实体中的属性值进行查询,查询条件使用等号
     */
    public List<User> selectByUserName(String userName){
        User user = new User();
        user.setUserName(userName);
        return userMapper.select(user);
    }
    /**
     *  根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号。
     *  但是如果存在某个属性为int,则会初始化为0。可能影响到实际使用
     */
    public User selectOneByUserName(String userName){
        User user = new User();
        user.setUserName(userName);
        return userMapper.selectOne(user);

    }
    /**
     *  根据实体中的属性查询总数,查询条件使用等号
     */
    public Integer selectUserCount(String userName){
        User user = new User();
        user.setUserName(userName);
        return userMapper.selectCount(user);
    }
    /**
     *  保存一个实体,null的属性也会保存,不会使用数据库默认值
     */
    public void addUser(String userName,String passWord,Integer age,String gender){
        User user = new User();
        user.setId(String.valueOf(UUID.randomUUID()));
        user.setUserName(userName);
        user.setAge(age);
        user.setGender(gender);
        user.setPassWord(passWord);
        userMapper.insert(user);
    }
    /**
     *  保存一个实体,忽略空值,即没提交的值会使用使用数据库默认值
     */
    public void addUserService(String userName,String passWord){
        User user = new User();
        user.setId(String.valueOf(UUID.randomUUID()));
        user.setUserName(userName);
        user.setPassWord(passWord);
        userMapper.insertSelective(user);
    }
    /**
     *  根据主键字段进行删除,方法参数必须包含完整的主键属性
     */
    public void deleteById(String userId){
        userMapper.deleteByPrimaryKey(userId);
    }
    /**
     *  根据实体属性作为条件进行删除,查询条件使用等号
     */
    public void deleteByName(String userName){
        User user = new User();
        user.setUserName(userName);
        userMapper.delete(user);
    }
    /**
     *  根据主键更新实体全部字段,null值会被更新
     */
    public void updateById(String userId,String userName){
        User user = new User();
        user.setId(userId);
        user.setUserName(userName);
        userMapper.updateByPrimaryKey(user);
    }
    /**
     *  根据主键更新属性不为null的值
     */
    public void updateByIdSelective(String userId,String userName){
        User user = new User();
        user.setId(userId);
        user.setUserName(userName);
        userMapper.updateByPrimaryKeySelective(user);
    }
}

批量查询和删除

批量查询 批量删除集成 SelectByIdsMapper, DeleteByIdsMappe 接口

@Mapper
public interface UserMapper extends Mapper<User>, SelectByIdsMapper, DeleteByIdsMapper {
}
     /**
     *  批量查询
     */
    public List<User> selectUserById(List<String> userIds){
        StringJoiner stringJoiner = new StringJoiner(",");
        for (String userId : userIds) {
            stringJoiner.add(userId);
        }
        return userMapper.selectByIds(stringJoiner.toString());
    }
    /**
     *  根据ID批量删除
     */
    public void deleteById(List<String> userIds){
        StringJoiner stringJoiner = new StringJoiner(",");
        for (String userId : userIds) {
            stringJoiner.add(userId);
        }
        userMapper.deleteByIds(stringJoiner.toString());
    }

批量添加

批量添加需要继承MySqlMappe接口

@Mapper
public interface UserMapper extends Mapper<User>, MySqlMapper, SelectByIdsMapper, DeleteByIdsMapper {
}
    /**
     *  批量添加
     */
    public void batchAdd(){
       List<User> list = new ArrayList();
        for (int i = 1; i < 6; i++) {
            User user = new User();
            user.setId(String.valueOf(i));
            user.setUserName("zs");
        }
        userMapper.insertList(list);
    }

自定义查询条件Example

图中接口都有一个共同点,就是需要 Example 对象作为方法的参数,Example 对象包含了我们各种自定义的查询条件,相当于 sql 语句中 where 部分的条件。

每个接口都包含了一个方法,供我们调用。总结如下表:

方法 功能描述
int deleteByExample(Object var1); 一般参数就是Example对象,按照条件进行删除,返回删除的记录数
List selectByExample(Object var1); 一般参数就是Example对象,按照条件进行查询,返回查询结果集
int selectCountByExample(Object var1); 一般参数就是Example对象,按照条件进行查询,返回符合查询条件的记录数
T selectOneByExample(Object var1); 一般参数就是Example对象,按照条件进行查询,结果只能为空或者一个,否则抛出异常
int updateByExample(@Param(“record”) T var1, @Param(“example”) Object var2); 第一个参数是新记录,第二参数是example对象,用新记录替换掉符合条件的旧记录
int updateByExampleSelective(@Param(“record”) T var1, @Param(“example”) Object var2); 功能同上,只是可以仅替换掉记录的部分字段
List selectByRowBounds(T var1, RowBounds var2); 第一个参数是查询条件,第二个参数是 RowBounds 对象(包含2个属性,offset 和 limit),offset 表示起始行,limit 表示需要的记录数;方法的功能是按照查询条件进行查询,再按照 offset 和 limit 在结果集中取相应数量的记录。
List selectByExampleAndRowBounds(Object var1, RowBounds var2); 第一个参数是 Example 对象,第二个参数是 RowBounds 对象,先根据 example 条件进行查询,再按照 offset 和 limit 取相应数量的记录。
List selectByConditionAndRowBounds(Object var1, RowBounds var2); 同上

Example 条件设置

先创建 Example 对象,再创建 Example.criteria 对象,借助这两个对象,可以灵活地设置各种条件。Example 对象可以理解为 sql 语句层次的设置, 而 Example.criteria 对象可以理解为 sql 语句中的一个单一的条件表达式设置。

原理上可以理解为:一个 example 包含了若干个 criteria ,每个 criteria 就是 sql 语句中条件部分的一个括号部分(没有嵌套),比如 (id = 5),criteria 包含了一个方法 void setAndOr(String andOr),它的意思相当于在括号前面加上 and 还是 or,比如执行了方法 setAndOr(“and”),那么 criteria 相当于 and (id = 5),而 example 就把这些 criteria 拼凑起了,比如 example 包含了 2 个 criteria,分别是 (id = 5) 和 and (name = “张三”),那么此 example 的效果就是 (id = 5) and (name = “张三”)。

Example example = new Example(User.class);
Example.Criteria criteria = example.createCriteria();
方法 功能描述
andAllEqualTo(Object param) 所有字段都作为 where 后面的判断条件,判断值就是参数实体对象
andBetween(String property, Object value1, Object value2) where property between value1 and value2 ,范围条件,包含两端
andEqualTo(Object param) 实体对象中不为 null 的字段作为 where 后面的判断条件
andEqualTo(String property, Object value) 某一个<字段,值>作为 where 后面的判等条件
andGreaterThan(String property, Object value) 大于条件,某个字段大于某个值
andGreaterThanOrEqualTo(String property, Object value) 大于等于条件,某个字段大于等于某个值
andIn(String property, Iterable values) where property in (),范围条件
andIsNotNull(String property) where property is not null,判空条件
andIsNull(String property) where property is null,判空条件
andLessThan(String property, Object value) 小于条件
andLessThanOrEqualTo(String property, Object value) 小于等于条件
andLike(String property, String value) where property like value,注意 value 应该是一个匹配表达式
andNotBetween(String property, Object value1, Object value2) 范围条件,不包含两端
andNotEqualTo(String property, Object value) 要求字段不等于某个值
andNotIn(String property, Iterable values) 要求字段不在某个范围内
andNotLike(String property, String value) 模糊查询,要求不 like。
void setAndOr(String andOr) 上面已经介绍过了

上表的方法都是“与”关系,即 and。 同样的,有相应的 “或” 关系,即 or。比如 orAllEqualTo、orGreaterThan 等等,都是将方法名中的 “and” 换成 “or”。

那 criteria 能否嵌套呢?能否有更方便的使用方式呢?回答:能,有。如下表:

方法 功能描述
Example.Criteria orCondition(String condition, Object value) condition参数是个sql字符串,可以拼接进 sql 语句的,value 是一个值,会拼接到 condition 后面的,此方法的最终结果为 or condition + value。
Example.Criteria orCondition(String condition) 功能同上,只是更加直接,一个字符串搞定,只是字符串参数可以写成类似这种 “id = ”+getId(),“( id = “+getId()+”)”,一样灵活,此方法的最终结果为 or condition。
Example.Criteria andCondition(String condition) 不再赘述
Example.Criteria andCondition(String condition, Object value) 不再赘述

Example 类包含的方法总结如下表:

方法 功能描述
void setDistinct(boolean distinct) 查询的结果是否要进行唯一性过滤,true表示过滤,false(默认)表示不过滤。
void setOrderByClause(String orderByClause) 查询结果按照某个,或者某些字段进行升序,降序。比如参数是 “id asc” 就是按照 id 进行升序,“id asc,age desc” 就是按照 id 升序,在 id 相等的情况下,按照 age 降序。
Example selectProperties(String… properties) 当利用 example 进行查询时,此方法可以设置想要查询的字段是哪些,比如我只需要查询一张表的部分字段。
Example.OrderBy orderBy(String property) 排序,与 setOrderByClause 功能一样,只是用法不同,比如 orderBy(“id”).asc() 表示按照 id 升序, orderBy(“id”).asc().orderBy(“age”).desc() 表示按照 id 升序,再按照 age 降序
Example.Criteria or() 创建一个 or 方式的、空的criteria,具体的 criteria 内容可以稍后设置。
void or(Example.Criteria criteria) 直接以 or 的方式添加一个现有的 criteria
Example.Criteria and() 同上,不过是 and 方式
void and(Example.Criteria criteria) 同上,and 方式

Example 使用

    public List<User> getUserByExample(String userName,String age){
        Example example = new Example(User.class);
        //Example.Criteria criteria = example.and();
        //criteria.andEqualTo("age",age)  这里直接简写了
        example.and().andEqualTo("age",age)
                .andLike("userName",'%' +userName + '%');
        List<User> users = userMapper.selectByExample(example);
        return users;
    }

到此这篇关于SpringBoot整合TKMyBatis实现单表增删改查操作的文章就介绍到这了,更多相关SpringBoot增删改查内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot整合mybatis-generator插件流程详细讲解

    mybatis-generator 插件 mybatis 相关依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>3.0.1</version> </dependency> <dependency> <gr

  • SpringBoot整合Mybatis之各种查询、模糊查询、批量删除、动态表名操作

    目录 一.普通查询 1. 若查询出的数据只有一条 2. 若查询出的数据有多条 二.模糊查询 like "%"#{name}"%" 三.批量删除 in (${ids}) 一.普通查询 1. 若查询出的数据只有一条 a>可以通过实体类对象接收 <!-- Dish getDishByName(@Param("name") String name);--> <select id="getDishByName"

  • IDEA创建SpringBoot项目整合mybatis时mysql-connector-java报错异常的详细分析

    目录 报错如图: 解决方式一: 解决方式二: 总结 For artifact {com.mysql:mysql-connector-j:null:jar}: The version cannot be empty.报错异常分析: 报错如图: 在pom.xml文件中 会是报红状态,我一直以为是导入不完全,是mysql-connector-java没有写全,所以一直解决不了,最后发现mysql-connector-java自8.0.31后更名为mysql-connector-j了. 现在分析一下它给

  • 手把手教你SpringBoot整合Mybatis

    目录 Mybatis的简单介绍 1 环境搭建 2 整合方式一:注解版 2.1 配置 2.2 编码 2.3 测试 3 整合方式二:XML版 3.1 配置 3.2 编码 3.3 测试 4 总结 Mybatis的简单介绍 ​ MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. ​ iBATIS一词来源于“internet”

  • SpringBoot整合Mybatis与MybatisPlus方法详细讲解

    目录 一.整合MyBatis操作 1.配置模式 2.注解模式 3.混合模式 二.整合 MyBatis-Plus 完成CRUD 1.什么是MyBatis-Plus 2.整合MyBatis-Plus 3.CRUD功能 一.整合MyBatis操作 官网:MyBatis · GitHub SpringBoot官方的Starter:spring-boot-starter-* 第三方的starter的格式: *-spring-boot-starter <dependency> <groupId>

  • SpringBoot整合Mybatis与thymleft实现增删改查功能详解

    首先我们先创建项目 注意:创建SpringBoot项目时一定要联网不然会报错 项目创建好后我们首先对 application.yml 进行编译 #指定端口号server: port: 8888#配置mysql数据源spring:  datasource:    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://localhost:3306/nba?serverTimezone=Asia/Shanghai    use

  • MySQL 详细单表增删改查crud语句

    MySQL 增删改查语句 1.创建练习表 这里练习表没有满足三范式 第一范式(又称 1NF):保证每列的原子性 数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性.满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了. 第二范式(又称 2NF):保证一张表只描述一件事情 满足1NF后要求表中的所有列,每一行的数据只能与其中一列相关,即一行数据只做一件事.只要数据列中出现数据重复,就要把表拆分开来. 第三范式(又称 3NF):保证每列都

  • SpringBoot模拟员工数据库并实现增删改查操作

    目录 1:首先创建一个pojo层在里面定义数据 2:编写dao层注入数据: 3:总结 1:首先创建一个pojo层在里面定义数据 Department部门: package com.example.springbootweb.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * @author ${范涛之} * @Description * @create

  • C语言数据结构之单链表与双链表的增删改查操作实现

    目录 前言 单链表的增删改查 定义结构体以及初始化 增加结点 删除结点 查找修改结点 移除结点 最终效果 双链表的基本操作 初始化建表 遍历双链表 指定位置插入结点 指定位置删除结点 查找结点位置 最终效果 结语 前言 上篇博客分享了创建链表传入二级指针的细节,那么今天就分享几个c语言课程实践设计吧.这些程序设计搞懂了的话相当于链表的基础知识牢牢掌握了,那么再应对复杂的链表类的题也就能慢慢钻研了.学习是一个积累的过程,想要游刃有余就得勤学苦练! 单链表的增删改查 (1)项目需求 构造带有头结点的

  • Android连接MySQL数据库并进行增删改查操作示例讲解

    1.Android 连接MySQL数据库 public class DBOpenHelper { private static String driver = "com.mysql.jdbc.Driver";//MySQL 驱动 private static String url = "jdbc:mysql://IP:3306/数据库";//MYSQL数据库连接Url private static String user = "root";//用

  • MySQL筑基篇之增删改查操作详解

    目录 一.增加表中数据 1.无自增列时 2.有自增列时 二.删除表中数据 1.使用delete 2.使用truncate 三.修改表中数据 四.*查询操作 1.简单查询 2.条件查询 3.排序 一.增加表中数据 1.无自增列时 1.指定字段添加数据 给表中的部分列添加数据:值的顺序必须跟指定列的顺序保持一致 语法:insert into 表名(列1,列2,...) values(值1,值2,...) 2.默认添加数据 向表中的所有列添加数据:值的顺序必须跟字段顺序保持一致 语法:insert i

  • MySQL中增删改查操作与常见陷阱详解

    目录 本文导读 一.MySQL的增删改查 1.insert语句 2.delete语句 3.update语句原理 4.select 二.15种MySQL数据操作语句 1.REPLACE语句 2.CALL语句 3.TABLE语句 4.WITH语句 三.MySQL查询陷阱 总结 本文导读 本文作为MySQL系列第二篇文章,详细讲解了MySQL的增删改查的语句.语义和一些我们经常在开发工作中暴露的问题,MySQL的增删改查又叫数据操作语句,本文有讲些了一些常用的数据操作语句,select语句后续将作为一

  • MyBatis存储过程、MyBatis分页、MyBatis一对多增删改查操作

    一.用到的实体类如下: Student.java package com.company.entity; import java.io.Serializable; import java.util.Date; public class Student implements Serializable{ private static final long serialVersionUID = 1L; private int id; private String name; private Date

  • Java语言实现对MySql数据库中数据的增删改查操作的代码

    简单说操作的步骤: 1.连接数据库 2.将SQL语句发送到数据库 3.执行SQL语句 这里举个例子: 在一个数据库中有个students表,表中有学号(Id),姓名(Name),性别(Sex),地址(Address),电话(Phone),专业(Dept). 这里把这个表写成一个学生信息类(Info_student) (请先确保看了例子说明,不然代码有的地方可能看不明白) 要实现操纵我们首先得连接数据库,因为每个操作都要进行连接操作,所以我们直接把连接的操作封装在一个类中,需要连接的时候直接调用可

  • hibernate增删改查操作代码

    Hibernate对数据删除操作 删除User表中个一条数据,是需要更具User表的主键id值来删除的.首先根据id值向数据库中查询出来对应的对象.可以采用两种方式一是session的get方法,一个是session的load方法. Session的Get方法:调用这个方法会返回一个Object对象.然后我们对其强制转换.Useruser = (User)session.get(User.class," 402881e5441c035e01441c0360510003"); 当我们传递

随机推荐