Spring Boot学习日志(四)使用Mybatis

本文介绍如何在SpringBoot项目中集成MyBatis,并通过具体案例演示增删改查等基本操作。从添加依赖、配置文件设定到实体类、Mapper接口及XML文件的创建,再到RESTful风格API的实现,提供了详细的步骤说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

之前简单介绍了一下Soring Boot Jpa操作Mysql数据库的相关方法,但是在使用Jpa的时候总有写不习惯,比如:复杂的逻辑使用Jpa的规则生成Sql总觉得很麻烦,如果直接在 @Query里面写Sql总是不那么的“舒服”,下面开始关于MyBatis相关的使用。

添加依赖

<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>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

配置文件application.properties

spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&allowMultiQueries=true&&useSSL=false
spring.datasource.username = root
spring.datasource.password = root
#mapper扫描范围
mybatis.mapperLocations=classpath:mapper/**/*.xml
#entity位置
mybatis.typeAliasesPackage=com.example.mybatis_demo.entity

使用mybatis有两种方法,一种是使用注解的方式,一种是使用xml配置文件的方式,这里选择xml配置文件的形式介绍。
mybatis.mapperLocations:设置xml文件的位置,这里xml里写sql语句
mybatis.typeAliasesPackage:设置实体类所在位置

测试表结构

CREATE TABLE `tb_user` (
  `id` int(11) NOT NULL,
  `username` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
  `group` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

CREATE TABLE `tb_group` (
  `id` varchar(20) DEFAULT NULL,
  `group` int(11) NOT NULL DEFAULT '0',
  `groupname` varchar(20) CHARACTER SET utf8mb4 DEFAULT NULL,
  PRIMARY KEY (`group`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

创建实体类

public class User {
    private Integer id;

    private String userName;

    private Integer group;

    省略getset方法
}

创建Mybatis配置文件

由于spring在启动时不知道mapper接口位置在什么地方,所以要做一个设置告诉spring程序mapper所在的位置,数据源就会自动注入到sqlSessionFactory中

@Configuration
public class MyBatisMapperConfig {
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
        mapperScannerConfigurer.setBasePackage("com.example.mybatis_demo.mapper");
        return mapperScannerConfigurer;
    }

}

创建Mapper接口

public interface UserMapper {
    /**
     * 查找用户
     * @param user
     * @return
     */
    List<User> queryUser(User user);

    /**
     * 添加用户
     * @param user
     * @return
     */
    Integer insertUser(User user);

    /**
     * 更新用户信息
     * @param user
     * @return
     */
    Boolean updateUser(User user);
       /**
     * 删除用户
     * @param user
     * @return
     */
    Integer deleteUser(User user);
}

创建Mapper对应的sql

上边的操作已经创建了用户相关的增改查,但是仅仅创建了接口,还没有具体的实现,具体的实现怎么做呢?

#mapper扫描范围
mybatis.mapperLocations=classpath:mapper/**/*.xml

配置文件里已经设定了mapper的扫描范围,在这里创建相应的.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.example.mybatis_demo.mapper.UserMapper">
    <select id="queryUser" resultType="com.example.mybatis_demo.entity.User">
        select * from tb_user
        <where>
            <if test="id!= null ">
                   id =#{id}
            </if>
        </where>
    </select>


    <insert id="insertUser"  parameterType="com.example.mybatis_demo.entity.User">
        insert into tb_user(
        id,
        username,
        groupid
        )
        values(
        #{id},
        #{userName},
        #{groupid}
        )
    </insert>

    <update id="updateUser" parameterType="com.example.mybatis_demo.entity.User">
        UPDATE tb_user
        <set>
            <if test="userName!=null and userName!='' ">
                username= #{userName},
            </if>
            <if test="groupid!=null">
                groupid= #{groupid},
            </if>
        </set>
        WHERE id= #{id};
    </update>

    <delete id="delete" parameterType="int">
        delete from tb_user where id=#{id}
    </delete>
</mapper>

需要注意的地方有:
.xml配置文件

<mapper namespace="com.example.mybatis_demo.mapper.UserMapper">

这里写的是之前创建的接口的地址,地址要写全(包名+接口名)

resultType="com.example.mybatis_demo.entity.User"

sql查询之后数据返回类型

parameterType="com.example.mybatis_demo.entity.User"

sql添加或者修改返回操作后的实体

parameterType="int"

sql删除数据之后返回操作成功的个数

<set>
            <if test="username!=null and username!='' ">
                username= #{username},
            </if>
            <if test="group!=null">
                group= #{group},
            </if>
        </set>
#{userName}表示mapper接口传递过来的User类的userName属性的值

这里因为username是String类型,所以要判断username不为null并且不为空
而group是Integer,只要判断是否为空就可以了

编写控制器

@RestController
@RequestMapping(value = "/user")
public class UserController {
    @Autowired
    private UserMapper mapper;

    @RequestMapping(value = "/list",method = RequestMethod.GET)
    public Object queryUser(User user) {
        return mapper.queryUser(user);
    }

    @RequestMapping(value = "/insert",method = RequestMethod.GET)
    public Object insertUser(User user) {
        return mapper.insertUser(user);
    }

    @RequestMapping(value = "/update",method = RequestMethod.GET)
    public Object updateUser(User user) {
        return mapper.updateUser(user);
    }
    @RequestMapping(value = "/delete",method = RequestMethod.GET)
    public Object deleteUser(User user) {
        return mapper.deleteUser(user);
    }
}

这里的UserMapper和Jpa一样,无需实例化,只需添加 @Autowired注解就可以使用,mybatis会自动运行.xml文件里的sql语句。

测试

和上一章一样,数据库理有三条数据如下所示
数据库
先测试一下检索,如果不加参数,会检索出所有数据

http://127.0.0.1:8080/user/list

检索
可以看到和预期一样,三条数据都被检索出来了。
再测试一下条件检索

http://127.0.0.1:8080/user/list?id=1

条件检索
只检索出来了一条数据,也是符合预期的
再测试一下添加数据

http://127.0.0.1:8080/user/insert?id=4&userName=测试&groupid=2

添加数据
结果
可以看到数据已经添加进去了
更新数据

http://127.0.0.1:8080/user/update?id=4&groupid=3

删除数据

http://127.0.0.1:8080/user/delete?id=4

结果和过程大致相同,就不再一一描述

项目目录结构

项目目录结构

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值