SpringBoot 整合Mybatis

简介

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

添加依赖

在pom.xml文件添加mysql与mybatis的依赖,如下:

<!-- mysql 依赖 -->
<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- mybatis 依赖 -->
<dependency>
       <groupId>org.mybatis.spring.boot</groupId>
       <artifactId>mybatis-spring-boot-starter</artifactId>
       <version>2.2.2</version>
</dependency>

在添加了mysql与mybatis依赖后,我们需要接着配置mysql连接信息,在application.yml配置文件中,如下:

spring:
  datasource:
    username: root   # 数据库用户名
    password: 123456  # 数据库密码
    url: jdbc:mysql://localhost:3311/yun?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8  # 数据库连接串
    driver-class-name: com.mysql.cj.jdbc.Driver  # mysql连接驱动
mybatis:
  configuration:
    map-underscore-to-camel-case: true   #是否启用驼峰命名法

新版本的mybatis提供了两种方式进行数据库的操作,分别可以通过注解标注的方式和XML配置文件的方式对数据库进行相关的操作。

使用注解方式

1、新建数据库表并添加测试数据

CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(225) DEFAULT NULL,
  `city` varchar(255) DEFAULT NULL,
  `created_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

BEGIN;
INSERT INTO `user` VALUES (1, 'xiaoyuan', 'shenzhen', '2022-09-25 18:30:11');
COMMIT;

2、新建数据库表实体类User

新建一个dao的类包,在该类包中新建User实体类

@Data
public class User {
    private Integer id;
    private String name;
    private String city;
    private LocalDateTime createdTime;
}

3、新建myBatis Mapper接口

新建一个mapper的类包,在该类包下新建一个UserMapper的接口类,

@Mapper
public interface UserMapper {

    @Select("select * from user where id=#{id}")
    public User getUserInfo(Integer id);
}

在这个接口类上需要标注上@Mapper注解,这个一定不能忘记,@Select则代表这是一个查询操作,在@Select 注解里直接填写我们需要查找的SQL语句,#{id}代表的预编译占位符,在SQL语句正式执行时,会用参数id的值来代替#{id}。

4、编写Controller执行测试

新建一个UserController的类文件,里面调用UserMapper进行查询操作,如下:

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

    @Autowired
    private UserMapper userMapper;

    @GetMapping
    public User getUserInfo(){
        User user = userMapper.getUserInfo(1);
        return user;
    }
}

private UserMapper userMapper使用用了@Autowired自动注入注解获取容器中的Bean,在getUserInfo()方法中传入参数1。启动应用,访问URL: http://localhost:8080/user ,接口返回结果如下:

{
    "id": 1,
    "name": "xiaoyuan",
    "city": "shenzhen",
    "createdTime": "2022-09-25T18:30:11"
}

整个项目的目录如下:

SpringBoot 整合Mybatis

到这里结束,SpringBoot已经初步整合了myBatis。

使用XML方式

mybatis不但可以使用注解的方式对数据库进行相关操作,也可以使用传统XML的方式。

1、新建xml映射文件包mapper

这个mapper包是建在resources资源包下的,该包主要保存以xml结尾的xxxxMapper.xml文件,如下:

SpringBoot 整合Mybatis

2、更改配置文件项

在applicaton.yml配置中,添加mapper-locations: classpath:mapper/*.xml的配置项

mybatis:
  configuration:
    map-underscore-to-camel-case: true   #是否启用驼峰命名法
  mapper-locations: classpath:mapper/*.xml   # 配置xml的配置路径
  type-aliases-package: com.example.demo2.dao   #定义数据表与实体类的包路径

mapper-location配置项主要是配置xxxMapper.xml文件存放目录。

3、新建XML映射文件

resources/mapper包下新建一个XML映射文件,文件名为UserMapper.xml,一般情况我们在这里的文件名与之前定义的xxxMapper.java同名,如下

SpringBoot 整合Mybatis

新建好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.example.demo2.mapper.UserMapper">  @1
</mapper>

@1:namespace的内容为需要映射的接口类,在这里这个XML与之映射的是com.example.demo2.mapper.UserMapper类,即我们上面定义的接口类。

4、Mapper接口类定义

由于我们现在是使用XML来进行数据库的相关操作,因此,需要对上面定义的Mapper接口类进行修改,去除掉@Select()查询注解,如下:

@Mapper
public interface UserMapper {
    User getUserInfo(Integer id);
}

5、添加getUserInfo方法映射

<?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.demo2.mapper.UserMapper">
    <select id="getUserInfo" resultType="com.example.demo2.dao.User"> @1
        select * from user where id=#{id}
    </select>
</mapper>

@1: 这里定义一个select查询语句串,这里有两个需要注意的点:

1、<select>标签的id值需要与UserMapper文件中的getUserInfo方法一致,一一对应,并且在同一个xml里不能重点,需唯一。

2、resultType:为查询结果返回值,在这里返回的是User类。

6、编写Controller测试

新建一个UserController的类文件,里面调用UserMapper进行查询操作,如下:

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

    @Autowired
    private UserMapper userMapper;

    @GetMapping
    public User getUserInfo(){
        User user = userMapper.getUserInfo(1);
        return user;
    }
}

private UserMapper userMapper使用用了@Autowired自动注入注解获取容器中的Bean,在getUserInfo()方法中传入参数1。启动应用,访问URL: http://localhost:8080/user ,接口返回结果如下:

{
    "id": 1,
    "name": "xiaoyuan",
    "city": "shenzhen",
    "createdTime": "2022-09-25T18:30:11"
}

原创文章,作者:jiafegn,如若转载,请注明出处:https://www.techlearn.cn/archives/2165

Previous 2024年8月28日 上午11:25
Next 2024年9月13日

相关推荐

  • Springboot 注解 @Configuration

    作用 @Configuration用于定义配置类,标注在类上,配置spring容器(应用上下文)。相当于把该类作为spring的xml配置文件中的beans。@Configurat…

    springboot 2022年9月2日
    224
  • SpringBoot 整合Druid数据源

    简介 Druid是阿里巴巴开源的数据库连接池,号称是Java语言中最好的数据库连接池,能够提供强大的监控和扩展功能。 优点 引入依赖 这里使用的是SpringBoot整合版的Dru…

    2023年3月26日
    168
  • Springboot 注解 @Primary

    作用 在注入依赖的过程中,当有多个候选者的时候,可以指定哪个候选者为主要的候选者。可以用在类上或者方法上面。通常定义bean常见的有2种方式:1、在类上标注@Component注解…

    springboot 2022年9月26日
    238
  • Springboot 注解 @Resource

    作用 和@Autowired注解类似,也是用来注入依赖对象的,spring容器会对bean中所有的字段、方法进行遍历,标注有@Resouce注解的,都会进行注入。@Autowire…

    springboot 2022年9月14日
    269
  • SpringBoot 过滤器

    简介 SpringBoot过滤器在web开发中可以过滤指定的URL,比如拦截掉不需要的接口请求,同时也可以对request和response的内容进行修改。 使用场景 Spring…

    springboot 2023年4月30日
    240
  • SpringBoot 整合SpringSecurity认证

    简介 Spring Security 是Spring家族中的一个安全管理框架。相比与另外一个安全框架shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。 —般Web应用的…

    2023年12月31日
    424
  • SpringBoot CRUD基础开发 入门

    需求简介 环境准备 1、新建项目 新建一个crud的项目,如下: 2、新建数据库脚本 新建curd数据库 初始化数据库 引入依赖 1、引入web依赖 2、引入Lombok依赖 3、…

    2023年3月26日
    178
  • SpringBoot 依赖注入

    前言 SpringBoot 中通过注解实现依赖注入主要有以下几种: @Autowired注解 @Qualifier注解 @Resource注解 @Primary注解 @Autowi…

    springboot 2024年1月15日
    631
  • SpringBoot拦截器

    简介 拦截器可以根据 URL 对请求进行拦截,主要应用于登陆校验、权限验证、乱码解决、性能监控和异常处理等功能。 使用步骤 在SpringBoot中使用拦截器功能通常需要以下3步:…

    springboot 2023年4月29日
    123
  • SpringBoot 整合Mybatis-Plus

    简介 MyBatis-Plus是一个MyBatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发,提高效率而生。 添加依赖 注意:添加Mybatis-Plus即可…

    springboot 2023年3月26日
    131