SpringBoot学习(三)—————— 框架整合其他框架之三(tk-mybatis)


前言

本篇记录学习SpringBoot时,引入tk-mybatis(通用mybatis)的学习经验

提示:以下是本篇文章正文内容,下面案例可供参考

一、整合tk-mybatis

1.1 启动器

tk_mybatis也是需要手动导入启动器坐标,然后再配置文件中配置Bean别名和映射配置文件的路径就可以使用了

  <!-- tk-mybatis启动器坐标 -->
  <dependency>
	  <groupId>tk.mybatis</groupId>
	  <artifactId>mapper-spring-boot-starter</artifactId>
	  <version>2.1.5</version>
  </dependency>
	# 别名
	mybatis.type-aliases-package=com.kaikeba.entity
	# 映射配置文件
	mybatis.mapper-locations=com.kaikeba.mapper/*.xml

1.2 常用注解

1.2.1 @Table

@Table() 作用在实体类上,用来绑定java类和数据库表的关系,若是类名与数据库表明不一致,课使用name属性,指定数据库表名,

1.2.2 @Id

@Id指定是否是主键列

1.2.3 @GeneratedValue

@GeneratedValue字段的生成方式,如
自增长(GenerationType.IDENTITY)、
序列(GenerationType.SEQUENCE)、
特定表格存储(GenerationType.TABLE)
或者持久层引擎根据特性在前三种方式中选择一种生成(GenerationType.AUTO);

GenerationType.AUTO 是默认的方式,若是这种方式,就可以写成@GeneratedValue(strategy = GenerationType.AUTO)也可以直接@GeneratedValue

1.2.4 @Column

@Column绑定ava类中的属性与数据库表中的字段,若是属性名与字段名称不一致,课通过name属性指定。

1.2.5 @Transient

注释字段,表示该属性不与数据库字段绑定;

1.3 注意项

1.3.1 Mapper接口

tk-mybatis的Mapper接口需要在使用Mybatis中的@Mapper注解的同时,继承tk-mybatis中的的Mapper
@Mapper注解 是为了向SpringBoot中注册接口
继承tk-mybatis的Mapper接口是为了获取其中增强的相关能力
在这里插入图片描述

1.3.3 启动类

启动类同时同时要添加tkmybatis的@MapperScan注解;扫描tk-mybatis的接口
在这里插入图片描述

1.3.4 内置方法

继承 tk-mybatis 的Mapper之后,或得到其中的已经封装好的一些方法如selectAll(),selectByPrimaryKey()等,这里不做介绍,我们如果是使用这些方法,可以不用书写对应的映射配置文件,若是有自定义的sql语句,则再添加映射配置文件。

PS: 自定义的方法不能和tk-mybatis中的内置方法冲突。

二、使用步骤

1 pom文件坐标

在pom文件中引入所需要的依赖做标;
代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.kaikeba</groupId>
    <artifactId>sb-tk-mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.3.11.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

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

        <!-- tk-mybatis 非官方提供 手动控制版本 -->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.1.5</version>
        </dependency>
    </dependencies>

</project>

2 配置文件

application.properties配置文件内容

	server.port=8080
	logging.level.com.kaikeba=debug
	
	# 数据库连接信息
	spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
	spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot-jdbc?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
	spring.datasource.username=root
	spring.datasource.password=root
	
	# 别名
	mybatis.type-aliases-package=com.kaikeba.entity
	# 映射配置文件
	mybatis.mapper-locations=com.kaikeba.mapper/*.xml

3 实体类User.java

package com.kaikeba.entity;

import javax.persistence.*;
import java.util.Date;

/**
 * @author sunyang
 * @date 2021/5/28 13:41
 */
@Table(name = "tbs_user")
public class Users {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @Column(name = "user_name")
    private String userName;
    private String password;
    private String name;
    private Integer age;
    private Integer sex;
    private Date birthday;
    private Date created;
    private Date updated;
    private String note;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public Date getCreated() {
        return created;
    }

    public void setCreated(Date created) {
        this.created = created;
    }

    public Date getUpdated() {
        return updated;
    }

    public void setUpdated(Date updated) {
        this.updated = updated;
    }

    public String getNote() {
        return note;
    }

    public void setNote(String note) {
        this.note = note;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", password='" + password + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                ", birthday=" + birthday +
                ", created=" + created +
                ", updated=" + updated +
                ", note='" + note + '\'' +
                '}';
    }
}

4 接口UserMapper.java

package com.kaikeba.mapper;

import com.kaikeba.entity.Users;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * @author sunyang
 * @date 2021/5/28 13:44
 */
@Mapper
public interface UserMapper extends tk.mybatis.mapper.common.Mapper<Users> {
    List<Users> findByParam(Users users);
}

5 SQL文件

<?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.kaikeba.mapper.UserMapper">
    <select id="findByParam" resultType="Users">
        <include refid="selectSql"></include>
        <where>
            <if test="name != null">
                name like '%${name}%'
            </if>

            <if test="note != null">
                and note like '%${note}%'
            </if>
        </where>
    </select>
    <sql id="selectSql">
        select
        id,
        user_name as userName,
        password,
        name,
        age,
        sex,
        birthday,
        created,
        updated,
        note

        from tbs_user
    </sql>
</mapper>

6 启动类

package com.kaikeba;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;

/**
 * @author sunyang
 * @date 2021/5/28 13:36
 */
@SpringBootApplication
@MapperScan("com.kaikeba.mapper")
public class TkMybatisApplication {
    public static void main(String[] args) {
        SpringApplication.run(TkMybatisApplication.class);
    }
}

7 测试方法UserMapperTest.java

package com.kaikeba;
import com.kaikeba.entity.Users;
import com.kaikeba.mapper.UserMapper;
import org.apache.catalina.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {

    @Resource
    private UserMapper userMapper;

    /**
     * tk-mybatis内置方法
     */
    @Test
    public void findAll() {
        userMapper.selectAll().stream().forEach(user -> System.out.println(user));
    }

    @Test
    public void findById() {
        Users byId = userMapper.selectByPrimaryKey(1);
        System.out.println(byId);
    }

    /**
     * 自定义方法
     */
    @Test
    public void findByParam() {
        Users users =  new Users();
        users.setName("a");
        List<Users> userss = userMapper.findByParam(users);
        userss.stream().forEach(users1 -> System.out.println(users1));
    }
}

8 测试结果

findAll
在这里插入图片描述
findById
在这里插入图片描述
自定义的findByParam
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot 是一个快速开发的框架,可以轻松集成 MyBatis 持久层框架Spring BootMyBatis 的结合可以让我们更加方便地开发应用程序,提高开发效率。 下面是一个简单的 Spring Boot + MyBatis 的示例: 1. 在 pom.xml 中添加 MyBatis 和 MySQL 驱动的依赖: ```xml <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ``` 2. 创建一个 Spring Boot 应用程序,并在 application.properties 中添加数据库配置: ``` spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 3. 创建一个 User 实体类: ```java public class User { private Long id; private String name; private Integer age; // 省略 getter 和 setter } ``` 4. 创建一个 UserMapper 接口: ```java @Mapper public interface UserMapper { @Select("SELECT * FROM user WHERE id = #{id}") User findById(Long id); @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})") @Options(useGeneratedKeys = true, keyProperty = "id") void save(User user); } ``` 5. 在 Spring Boot 应用程序中使用 UserMapper: ```java @RestController public class UserController { @Autowired private UserMapper userMapper; @GetMapping("/users/{id}") public User findById(@PathVariable Long id) { return userMapper.findById(id); } @PostMapping("/users") public void save(@RequestBody User user) { userMapper.save(user); } } ``` 这样,我们就可以使用 Spring Boot + MyBatis 快速开发应用程序了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值