柏竹 柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档

柏竹

奋斗柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档
  • Java基础

  • JavaWeb

  • 拓展技术

  • 框架技术

  • 数据库

  • 数据结构

  • Spring

  • SpringMVC

  • SpringBoot

    • SpringBoot
    • SpringBoot3基础特性
    • SpringBoot3核心原理
    • 框架整合

      • SpringBoot SpringMVC 整合
      • SpringBoot JDBC 整合
      • SpringBoot MyBatis 整合
      • SpringBoot tk-MyBatis 整合
        • tk-MyBatis 整合
          • 应用实现
          • 自定义映射文件查询
      • SpringBoot Shiro 整合
      • SpringBoot Redis 整合
      • SpringBoot MyBatisPlus 整合
      • SpringBoot JSON 整合
      • SpringBoot Thymeleaf 整合
      • 整合WebSocket实现聊天功能
    • SpringBoot部署
  • SpringClound

  • Ruoyi-Vue-Plus

  • 后端
  • SpringBoot
  • 框架整合
Bozhu12
2023-06-10
目录

SpringBoot tk-MyBatis 整合

# tk-MyBatis 整合

由于MyBatis的使用会出现一些功能上的问题,和大量的xml文件。当库表结构进行改动,则实体和xml文件都需要重新更改。因此为了避免以上情况 ,应用 tk-MyBatis框架

使用前注意事项:

  • tk-MyBatis依赖引入 后就无需再引入MyBatis依赖
  • 支持 驼峰、下划线 命名方式,需要手动纠正
  • 实体类中 主键一定要映射 @GeneratedValue注解 映射主键策略(该字段自增、...等其他索引约束)
  • 类与表不匹配的情况,使用 jpa注解 纠正(名相同无需添加注解)
    1. 类名 ≠ 表名 ,在类上添加 @Table注解 name参数为 纠正的表名
    2. 属性名 ≠ 字段名,在属性上添加 @Column注解 name参数为 纠正的字段名
  • 如果 前面有导入 MyBatis构件的类 ,需要更改为 tk-mybatis构件的类
  • 接口一旦继承了 tk.mybatis.mapper.common.Mapper接口 就可实现以下Mapper通用方法

Mapper通用方法

返回 方法 说明
List<T> select(T record) 查询 根据实体类属性值进行查询
T selectByPrimaryKey(Object key) 查询 根据主键进行查询
List<T> selectAll() 查询 所有结果
T selectOne(T record) 查询 根据实体类属性值进行查询,只能返回一个,多个则异常
int selectCount(T record) 查询 表中的总条数
int insert(T record) 插入 一个实体类 ,null属性值也会保存,而不是库中的默认值
int insertSelective(T record) 插入 一个实体类 ,null属性值不会保存,而应用库中的默认值
int updateByPrimaryKey(T record) 更新 根据主键更新所有字段,null属性值也会被更新
int updateByPrimaryKeySelective(T record) 更新 根据主键更新字段,null属性值不会被更新
int delete(T record) 删除 根据实体类属性值进行条件删除
int deleteByPrimaryKey(Object key) 删除 根据主键进行删除
List<T> selectByExample(Object example) 查询 根据Example条件进行查询
int selectByExample(Object example) 查询 根据Example条件进行查询总条数
int updateByExample(@Param("record") T record, @Param("example") Object example) 更新 根据Example条件进行更新为 record实体类 全部属性,null属性值也会被更新
int updateByExampleSelective(@Param("record") T record, @Param("example") Object example) 更新 根据Example条件进行更新为 record实体类 全部属性,null属性值不会被更新
int deleteByExample(Object example) 删除 根据Example条件进行删除

# 应用实现

以下应用实例:

数据库展示

tb_user表 (其他数据自行引入)

字段名 类型 主键
id bigint T
user_name varchar F
password varchar F
name varchar F
age int F
sex int F
birthday date F
  1. 引入依赖 pom.xml

    <dependency>
        <groupId>tk.mybatis</groupId>
        <artifactId>mapper-spring-boot-starter</artifactId>
        <version>2.0.2</version>
    </dependency>
    
  2. 创建 User实体类 (指定库中的表列属性信息)

    package com.pojo;
    
    import javax.persistence.*;
    import java.io.Serializable;
    import java.util.Date;
    
    @Table(name = "tb_user")
    public class User implements Serializable {
        
        //主键 ,主键策略为 自增
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        // 用户名
        @Column(name = "user_name")
        private String userName;
        // 密码
        private String password;
        // 姓名
        private String name;
        // 年龄
        private Integer age;
        // 性别,1男性,2女性
        private Integer sex;
        // 出生日期
        private Date birthday;
        
        //省略 get 、 set 和 toString
    }
    
  3. 创建 UserMapping接口 ,全限定名 com.mapping.UserMapping (继承接口即可实现Mapper通用方法)

    package com.mapping;
    
    import com.domain.User;
    import tk.mybatis.mapper.common.Mapper;
    
    public interface UserMapping extends Mapper<User> {
    }
    

    不要忘记应用的是 tk.mybatis.mapper.common.Mapper接口 构件

  4. 使用 @MapperScan注解 扫描的包 在 @SpringBootApplication注解下的启动类,添加@MapperScan注解 value参数为 扫描的包路径

    package com;
    // import org.mybatis.spring.annotation.MapperScan;
    import tk.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    // 启动类
    @SpringBootApplication
    @MapperScan("com.mapping")
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class , args);
        }
    }
    

    不要忘记应用的是 tk.mybatis.mapper.common.Mapper接口 构件

  5. 测试

    package com.mapping;
    
    import com.domain.User;
    import junit.framework.TestCase;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    import tk.mybatis.mapper.entity.Example;
    import java.util.List;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class UserMappingTest extends TestCase {
        
        @Autowired
        private UserMapping userMapping;
        
        //查所有
        @Test
        public void testFindAll() {
            userMapping.selectAll().forEach(user -> {
                System.out.println(user);
            });
        }
        
        //查id
        @Test
        public void testFindById() {
            User user = userMapping.selectByPrimaryKey(5);
            System.out.println("user : " + user);
        }
        
        //插入
        @Test
        public void testInsert(){
            User user = new User();
            user.setUserName("lishi");
            user.setName("李四");
            user.setPassword("1");
            user.setAge(21);
            user.setSex(1);
            int i = userMapping.insertSelective(user);
            System.out.println("插入结果 : " + i);
        }
        
        // Example条件查询
        @Test
        public void testFindByExample() {
            Example example = new Example(User.class);
            
            // 展示1
            // SQL:SELECT * FROM tb_user WHERE ( name like '%张%' )
            example.createCriteria().andLike("name","%张%");
            
            // 展示2
            // SQL:SELECT * FROM tb_user WHERE ( name like '%张%' and password = '1' )
            // example.createCriteria().andLike("name","%张%").andEqualTo("password","1");
            userMapping.selectByExample(example).forEach(user -> {
                System.out.println(user);
            });
        }
    }
    

# 自定义映射文件查询

自定义映射文件用于进行复杂的SQL语句进行对库编辑

应用前说明:

  • 应用后 驼峰、下划线 命名失效

应用实现 在以上代码原有的基础上进行编辑!

  1. 在SpringBoot的 全局属性(application.properties文件) 添加参数

    # mybatis 别名扫描
    mybatis.type-aliases-package=com.pojo
    # mapper.xml文件位置 (使用在有映射的前提)
    mybatis.mapper-locations=classpath:mappers/*.xml
    
  2. 创建 UserMapper.xml文件 资源路径 resources/mappers/UserMapper.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.mapping.UserMapping">
    
        <select id="findByUser" resultType="user">
            SELECT * FROM
            tb_user
            <where>
                <if test="name != null">
                    name like '%${name}%'
                </if>
                <if test="password != null">
                    and password like '%${password}%'
                </if>
            </where>
        </select>
    
    </mapper>
    

    注意 mapper节点 映射指定的接口路径

  3. 编辑 UserMapping接口 ,全限定名 com.mapping.UserMapping

    package com.mapping;
    
    import com.domain.User;
    import tk.mybatis.mapper.common.Mapper;
    import java.util.List;
    
    public interface UserMapping extends Mapper<User> {
        // 自定义复杂sql方法
        public List<User> findByUser(User user);
    }
    
  4. 测试, 在 UserMappingTest测试类 中

    // 自定义方法
    @Test
    public void testfindByUser() {
        
        User user = new User();
        user.setName("张");
        // user.setPassword("1");g
        userMapping.findByUser(user).forEach(u -> {
            System.out.println(u);
        });
        
    }
    
#tk-MyBatis

← SpringBoot MyBatis 整合 SpringBoot Shiro 整合→

最近更新
01
HTTPS自动续签
10-21
02
博客搭建-简化版(脚本)
10-20
03
ruoyi-vue-plus-部署篇
07-13
更多文章>
Theme by Vdoing | Copyright © 2019-2024 | 桂ICP备2022009417号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式