springboot集成Mybatis的详细教程

SpringBoot 是一个非常流行的Java Web框架,与 Mybatis 结合使用可以快速地实现数据操作和服务构建。下面将为你提供 SpringBoot 集成 Mybatis 的详细教程。

准备工作

在开始之前,请确保已经完成以下准备工作:

  1. 搭建好了 Java 开发环境,并确保已经安装了 Maven。
  2. 创建一个 SpringBoot 项目。

添加依赖

在项目的pom.xml中添加以下依赖:

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

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.0</version>
    </dependency>

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

具体内容包括:

  • spring-boot-starter-web:SpringBoot Web 启动器,提供了Web开发所需要的基础框架和功能。
  • mybatis-spring-boot-starter:SpringBoot 集成 Mybatis 的依赖。
  • mysql-connector-java:用来连接数据库。

添加配置

在项目的 application.properties 中添加以下配置:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=root

mybatis.type-aliases-package=com.example.demo.entity
mybatis.mapper-locations=classpath:mapper/*.xml

上面的配置中,配置了连接数据库的相关信息,以及 Mybatis 的配置信息。

创建实体类

在 com.example.demo.entity 包下创建实体类 User:

public class User {
    private Long id;
    private String name;
    private Integer age;
    // 省略 getters 和 setters
}

创建 Mapper 接口

在 com.example.demo.mapper 包下创建 UserMapper 接口:

@Mapper
public interface UserMapper {
    void insert(User user);
    void delete(Long id);
    void update(User user);
    User getById(Long id);
    List<User> getAll();
}

创建 Mapper XML

在 resources 目录下创建 mapper 目录,再创建 UserMapper.xml 文件:

<mapper namespace="com.example.demo.mapper.UserMapper">
    <resultMap id="BaseResultMap" type="com.example.demo.entity.User">
        <id column="id" jdbcType="BIGINT" property="id"/>
        <result column="name" jdbcType="VARCHAR" property="name"/>
        <result column="age" jdbcType="INTEGER" property="age"/>
    </resultMap>

    <sql id="Base_Column_List">
        id, name, age
    </sql>

    <select id="getById" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from user
        where id = #{id,jdbcType=BIGINT}
    </select>

    <select id="getAll" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from user
    </select>

    <insert id="insert" parameterType="com.example.demo.entity.User">
        insert into user
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">
                id,
            </if>
            <if test="name != null">
                name,
            </if>
            <if test="age != null">
                age,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">
                #{id,jdbcType=BIGINT},
            </if>
            <if test="name != null">
                #{name,jdbcType=VARCHAR},
            </if>
            <if test="age != null">
                #{age,jdbcType=INTEGER},
            </if>
        </trim>
    </insert>

    <update id="update" parameterType="com.example.demo.entity.User">
        update user
        <set>
            <if test="name != null">
                name = #{name,jdbcType=VARCHAR},
            </if>
            <if test="age != null">
                age = #{age,jdbcType=INTEGER},
            </if>
        </set>
        where id = #{id,jdbcType=BIGINT}
    </update>

    <delete id="delete" parameterType="java.lang.Long">
        delete from user
        where id = #{id,jdbcType=BIGINT}
    </delete>
</mapper>

上面的 XML 中定义了增删改查的 SQL语句。

创建 Service 层

在 com.example.demo.service 包下创建 UserService 接口和 UserServiceImpl 类:

public interface UserService {
    void insert(User user);
    void delete(Long id);
    void update(User user);
    User getById(Long id);
    List<User> getAll();
}

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public void insert(User user) {
        userMapper.insert(user);
    }

    @Override
    public void delete(Long id) {
        userMapper.delete(id);
    }

    @Override
    public void update(User user) {
        userMapper.update(user);
    }

    @Override
    public User getById(Long id) {
        return userMapper.getById(id);
    }

    @Override
    public List<User> getAll() {
        return userMapper.getAll();
    }
}

创建 Controller

在 com.example.demo.controller 包下创建 UserController 类:

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

    @Autowired
    private UserService userService;

    @GetMapping("/getById/{id}")
    public User getById(@PathVariable("id") Long id) {
        return userService.getById(id);
    }

    @GetMapping("/getAll")
    public List<User> getAll() {
        return userService.getAll();
    }

    @PostMapping("/insert")
    public void insert(@RequestBody User user) {
        userService.insert(user);
    }

    @PostMapping("/update")
    public void update(@RequestBody User user) {
        userService.update(user);
    }

    @DeleteMapping("/delete/{id}")
    public void delete(@PathVariable("id") Long id) {
        userService.delete(id);
    }
}

上述代码中,添加了一些映射,用于处理页面请求。

运行项目

在运行项目之前,我们需要创建一个名为 user 的表,来存储用户数据。

CREATE TABLE user (
    id BIGINT NOT NULL AUTO_INCREMENT,
    name VARCHAR(20),
    age INT,
    PRIMARY KEY(id)
);

启动项目后,在浏览器中输入以下地址可以测试项目是否成功:

  • 查询所有用户:http://localhost:8080/user/getAll
  • 根据 ID 查询用户:http://localhost:8080/user/getById/1

示例

这里提供两个示例,用以更好地理解 SpringBoot 集成 Mybatis 的过程和使用。

示例1

该示例是对 User 表进行增加、删除、修改和查询的操作。

@SpringBootTest
public class UserMapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testInsert() {
        User user = new User();
        user.setName("Tom");
        user.setAge(20);
        userMapper.insert(user);
        Assert.assertNotNull(user.getId());
    }

    @Test
    public void testDelete() {
        User user = new User();
        user.setName("Jerry");
        user.setAge(30);
        userMapper.insert(user);
        Long id = user.getId();
        userMapper.delete(id);
        Assert.assertNull(userMapper.getById(id));
    }

    @Test
    public void testUpdate() {
        User user = new User();
        user.setName("Alex");
        user.setAge(25);
        userMapper.insert(user);
        Long id = user.getId();
        User update = new User();
        update.setId(id);
        update.setName("Jack");
        update.setAge(28);
        userMapper.update(update);
        User updated = userMapper.getById(id);
        Assert.assertEquals("Jack", updated.getName());
        Assert.assertEquals(28, updated.getAge().intValue());
    }

    @Test
    public void testGetById() {
        User user = new User();
        user.setName("Amy");
        user.setAge(22);
        userMapper.insert(user);
        Long id = user.getId();
        User queried = userMapper.getById(id);
        Assert.assertEquals("Amy", queried.getName());
        Assert.assertEquals(22, queried.getAge().intValue());
    }

    @Test
    public void testGetAll() {
        User user1 = new User();
        user1.setName("Lucy");
        user1.setAge(18);
        userMapper.insert(user1);

        User user2 = new User();
        user2.setName("Mike");
        user2.setAge(19);
        userMapper.insert(user2);

        List<User> allUsers = userMapper.getAll();
        Assert.assertEquals(2, allUsers.size());
    }
}

示例2

该示例是利用 SpringBoot 集成 Mybatis 对支付宝交易记录进行查询的操作。

@Service
public class TradeServiceImpl implements TradeService {

    @Autowired
    private TradeMapper tradeMapper;

    @Override
    public List<Trade> getByTradeNo(String tradeNo) {
        return tradeMapper.getByTradeNo(tradeNo);
    }

    @Override
    public List<Trade> getByOrderNo(String orderNo) {
        return tradeMapper.getByOrderNo(orderNo);
    }

    @Override
    public List<Trade> getByMerchantNo(String merchantNo) {
        return tradeMapper.getByMerchantNo(merchantNo);
    }

    @Override
    public List<Trade> getByCreateTime(Date startTime, Date endTime) {
        return tradeMapper.getByCreateTime(startTime, endTime);
    }

    @Override
    public List<Trade> getByUpdateTime(Date startTime, Date endTime) {
        return tradeMapper.getByUpdateTime(startTime, endTime);
    }
}

上述代码中,根据订单号、商户号、交易号、创建时间、最近修改时间查询交易记录。

总结

本文介绍了 SpringBoot 集成 Mybatis 的详细教程,从添加依赖、配置信息到创建实体类、Mapper 接口、Mapper XML、Service 层和 Controller 层的代码编写,再到实际应用的示例,一步步为你讲解。希望本文内容能够对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot集成Mybatis的详细教程 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • java8学习教程之lambda表达式的使用方法

    Java 8 学习教程之Lambda表达式的使用方法 Lambda表达式是什么? Lambda表达式是Java 8中的一个新特性,它允许我们以一种更简洁的方式来定义匿名内部类。通过使用Lambda表达式,我们可以在一行代码中定义函数接口的实现,并且可以直接将Lambda表达式传递给接口方法。 Lambda表达式的语法 Lambda表达式的语法非常简单,它有以…

    Java 2023年5月26日
    00
  • Sprint Boot @CacheEvict使用方法详解

    在Spring Boot中,@CacheEvict注解用于从缓存中删除数据。使用@CacheEvict注解可以指定在何时从缓存中删除数据,例如在更新数据时。本文将详细介绍@CacheEvict注解的作用和使用方法,并提供两个示例说明。 @CacheEvict注解作用 在Spring Boot中,@CacheEvict注解的作用是从缓存中删除数据。使用@Cac…

    Java 2023年5月5日
    00
  • 深入理解JavaScript中的对象

    深入理解JavaScript中的对象 什么是JavaScript中的对象 在JavaScript中,对象是一种复合数据类型,可以将它们看作是键值对的集合,其中每个键都是字符串类型,每个值可以是任何数据类型,包括更多的对象。JavaScript中的对象有两种基本类型:内置对象和自定义对象。内置对象指的是在JavaScript中已经定义好的对象,例如Math、D…

    Java 2023年5月26日
    00
  • 两个JSP页面父页面获取子页面内容的两种方法

    我们来详细讲解一下如何在JSP页面中实现父页面获取子页面内容的两种方法。 概述 在JSP中,子页面中可能会包含一些重要的内容,而父页面需要获取这些内容。常见的想法是通过使用JavaScript解析DOM树,但这种方法存在一些繁琐和困难。因此,在这里我们介绍两种非常简单的方法来实现该功能: 使用JSP隐式对象 使用标签 方法一:使用JSP隐式对象 JSP页面中…

    Java 2023年6月15日
    00
  • Java程序实现导出Excel的方法(支持IE低版本)

    Java程序实现导出Excel的方法是一种常用的功能,在实际开发中也比较常见。下面将在以下几方面详细阐述Java程序实现导出Excel的方法: Excel导出的基本概念 Java程序实现导出Excel的方法 一、Excel导出的基本概念 1. Excel简介 Excel是一种常用的电子表格软件,是由微软公司开发的。Excel具有良好的数据处理和计算功能,可以…

    Java 2023年6月15日
    00
  • Java C++ leetcode执行一次字符串交换能否使两个字符串相等

    题目描述: 给定字符串t和字符串s,你需要执行一次字符串交换,将t中的某个位置上的字符替换为另外一个字符。 请你判断在执行若干次字符串交换操作后,两个字符串是否可以变成相同的字符串。 示例1: 输入: s = “bank”, t = “kanb”输出: true解释: 交换 s[1] 和 t[1],然后两个字符串就相等了。 示例2:输入: s = “atta…

    Java 2023年5月27日
    00
  • Java8 Stream流的合并

    最近的需求里有这样一个场景,要校验一个集合中每个对象的多个Id的有效性。比如一个Customer对象,有3个Id:id1,id2,id3,要把这些Id全部取出来,然后去数据库里查询它是否存在。 @Data @AllArgsConstructor public class Customer { private String name; private Stri…

    Java 2023年5月6日
    00
  • spring对JDBC和orm的支持实例详解

    Spring对JDBC和ORM的支持实例详解 Spring框架是一个非常流行的应用程序开发框架,它提供了许多不同的特性和功能来帮助开发者构建高质量的应用程序。其中,Spring对JDBC和ORM的支持特性是非常重要的,今天我们将对此进行详细讲解。 JDBC支持 JDBC是Java Database Connectivity的缩写,是Java平台上的一种用于访…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部