springboot集成mybatis项目示例

112 篇文章 0 订阅
40 篇文章 0 订阅

MyBatis官方为了方便Spring Boot集成MyBatis,专门提供了一个符合Spring Boot规范的starter项目mybatis-spring-boot-starter,

现在只需要在pom.xml中添加上面的依赖即可,符合Spring Boot规范的starter依赖都会按照默认的配置方式在系统启动时自动配置好,因此不用对 MyBatis 进行任何额外的配置,MyBatis就已经集成好了。

导入依赖

pom.xml

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <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.3.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

项目具体情况

 

 数据库,建表

drop table if exists n_sysdict;
create table n_sysdict(
	id int not null auto_increment,
	code varchar(64) not null comment '类型',
	name varchar(64) not null comment '字典名',
	value varchar(64) not null comment '字典值',
	primary key(id)
) comment '字典表';

insert into n_sysdict values (1,'性别','男','女');
insert into n_sysdict values (2,'性别','女','女');
insert into n_sysdict values (3,'季度','第一季度','1');
insert into n_sysdict values (4,'季度','第二季度','2');
insert into n_sysdict values (5,'季度','第三季度','3');
insert into n_sysdict values (6,'季度','第四季度','4');

drop table if exists n_country;
create table n_country(
	id int not null auto_increment primary key,
	country_name varchar(50) not null,
	country_code varchar(20) null
);

insert into n_country(country_name,country_code) values('中国','CN');
insert into n_country(country_name,country_code) values('美国','US');
insert into n_country(country_name,country_code) values('俄罗斯','RU');
insert into n_country(country_name,country_code) values('美国','GB');
insert into n_country(country_name,country_code) values('法国','FR');

drop table if exists n_sysuser;
create table n_sysuser(
	id int not null auto_increment primary key,
	loginName varchar(30) not null,
	userName varchar(30) null,
	age int null,
	password varchar(30) not null,
	tel varchar(20) null
);

insert into n_sysuser(loginName,userName,age,password,tel) values ('admin','管理员',99,'1234','110');

添加CountryMapper接口

先在com.shrimpking.pojo包下新建Country类。

Country.java

package com.shrimpking.pojo;

import lombok.Data;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/12 19:23
 */
@Data
public class Country
{
    private Integer id;
    private String countryName;
    private String countryCode;

}

然后在com.shrimpking.mapper包下新建CountryMapper接口。

CountryMapper.java

package com.shrimpking.mapper;

import com.shrimpking.pojo.Country;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/12 19:25
 */
@Mapper
public interface CountryMapper
{
    /**
     *
     * @return
     */
    List<Country> selectAll();
}

这个接口和前面的接口最大的区别是,这里使用了@Mapper注解,增加这个注解之后,Spring启动时会自动扫描该接口,这样就可以在需要使用时直接注入Mapper了。

添加CountryMapper.xml

映射文件在src/main/resources下面创建mapper目录,然后新建CountryMapper.xml映射文件。

CountryMapper.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.shrimpking.mapper.CountryMapper">

    <select id="selectAll"  resultType="com.shrimpking.pojo.Country">
        select id,country_name,country_code from n_country
    </select>

</mapper>

配置MyBatis

在application.properties配置文件中添加如下内容。

server.port=8099
#数据源
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimeZone=UTC
spring.datasource.username=root
spring.datasource.password=mysql123
#起别名
mybatis.type-aliases-package=com.shrimpking.pojo
#mapper xml
mybatis.mapper-locations=classpath:mapper/**/*.xml
#驼峰转换
mybatis.configuration.map-underscore-to-camel-case=true

测试

package com.shrimpking;

import com.shrimpking.mapper.CountryMapper;
import com.shrimpking.pojo.Country;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class Springboot59MybaitsApplicationTests
{

    @Autowired
    private CountryMapper countryMapper;

    @Test
    void test()
    {
        List<Country> countries = countryMapper.selectAll();
        countries.forEach(System.out::println);
    }

}

 到这里,Spring Boot集成MyBatis就完成了。其中还存在很多和配置相关的细节,并且我们还想把前面章节中开发的MyBatis代码集成到Spring Boot中,那么继续来看下一节的配置介绍。

MyBaits 在不同用法中的配置方式不同,但是所有可配置的属性含义和作用都是相同的,由于Spring Boot方式有特殊的配置规范,所以这里将特别介绍。

Spring Boot可以通过@ConfigurationProperties注解自动将配置文件中的属性组装到对象上,这个注解一般都需要配置与属性匹配的前缀,此处前缀为“mybatis”,因此对MyBatis的配置都是以“mybatis.”作为前缀的。属性类中的字段如果是驼峰形式的,在配置文件中进行配置时建议改为横杠(-)和小写字母连接的形式,虽然Spring Boot仍然能正确匹配驼峰形式的属性,但是支持 Spring Boot 的 IDE 在自动提示时会使用标准的形式,例如configLocation在配置时应改写成mybatis.config-location的形式。

MybatisProperties 并没有把所有的属性都列举出来,但是这个类提供了一个嵌套的Configuration属性,通过这种方式可以直接对Configuration对象进行属性配置,例如settings中的属性可以按下面的方式进行配置。基本上大部分的配置都可以通过这种形式去实现,如果遇到不会配置的内容,仍然可以通过mybatis-config.xml方式去配置MyBatis,然后在Spring Boot的配置中指定该文件的路径即可,示例如下。mybatis.config-location=classpath:mybatis-config.xml使用上面这种方式在任何情况下都是最有效的。

简单示例

引入新的依赖后,还需要配置MyBatis,让MyBatis可以扫描到这个依赖下面的Mapper接口。上面的例子中使用的是@Mapper 注解,但是对于已经存在的 项目来说,一个个去添加注解并不合适,因此要换一种新的方式来扫描Mapper接口。添加@MapperScan注解,代码如下。

package com.shrimpking;

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

@SpringBootApplication
@MapperScan("com.shrimpking.mapper")
public class Springboot59MybaitsApplication
{

    public static void main(String[] args)
    {
        SpringApplication.run(Springboot59MybaitsApplication.class, args);
    }

}

实体类

SysUser.java

package com.shrimpking.pojo;

import lombok.Data;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/12 21:26
 */
@Data
public class SysUser
{
    private Integer id;
    private String loginName;
    private String userName;
    private Integer age;
    private String password;
    private String tel;

}

Mapper接口

SysUserMapper.java

package com.shrimpking.mapper;

import com.shrimpking.pojo.SysUser;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/12 21:34
 */
public interface SysUserMapper
{
    SysUser selectById(Integer id);

    List<SysUser> selectAll();
}

开发业务(Service)层

新建com.shrimpking.service包,然后在该包下面创建SysUserService接口,代码如下。

SysUserService.java

package com.shrimpking.Service;

import com.shrimpking.pojo.SysUser;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/12 21:23
 */
public interface SysUserService
{
    /**
     *
     * @param id
     * @return
     */
    SysUser getById(Integer id);

    /**
     *
     * @return
     */
    List<SysUser> getAll();
}

再创建com.shrimpking.service.impl包,在该包下创建SysUserServiceImpl实现类,代码如下。

package com.shrimpking.Service.impl;

import com.shrimpking.Service.SysUserService;
import com.shrimpking.mapper.SysUserMapper;
import com.shrimpking.pojo.SysUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/12 21:39
 */
@Service
public class SysUserServiceImpl implements SysUserService
{
    @Autowired
    private SysUserMapper sysUserMapper;

    @Override
    public SysUser getById(Integer id)
    {
        return sysUserMapper.selectById(id);
    }

    @Override
    public List<SysUser> getAll()
    {
        return sysUserMapper.selectAll();
    }
}

开发控制(Controller)层

在com.shrimpking.controller包下创建SysUserController类,代码如下。

package com.shrimpking.controller;

import com.shrimpking.Service.SysUserService;
import com.shrimpking.pojo.SysUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2023/6/12 21:42
 */
@RestController
public class SysUserController
{
    @Autowired
    private SysUserService sysUserService;

    @RequestMapping("/user/{id}")
    SysUser user(@PathVariable("id") Integer id)
    {
        return sysUserService.getById(id);
    }

    @RequestMapping("/users")
    List<SysUser> users()
    {
        return sysUserService.getAll();
    }
}

UserController中提供了两个方法:通过id获取具体的用户信息的方法以及获取全部用户信息的方法。

运行应用查看效果

 在浏览器地址栏输入http://localhost:8089/users,此时会显示出系统中所有的用户信息,显示内容如下。

 

本章在Spring Boot项目中集成了MyBatis,通过MyBatis提供的starter可以很方便地实现集成。通过对 MybatisProperties 配置类的介绍,我们了解到了在 Spring Boot 中实现MyBatis各项配置的方法,最后通过后实际的例子学会了如何在Spring Boot中开发Mapper接口。

通过引入项目使用已有的Mapper,我们明白了一件事:在任何框架中使用MyBatis都只是配置不同而已,其核心用法是一样的,因此学会MyBatis的用法才是最主要的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾米大王

有你的支持,我会更有动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值