一个简单的SpringBoot整合Mybatis项目

1. 构建基本SpringBoot依赖

1.1 设置SpringBoot父依赖

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

1.2 整合web功能

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

2. 启动并测试SpringMVC

SpringBoot项目一般会有*application的入口类,入口类中有main方法,这是这个SpringBoot项目的入口方法。
编写一个入口类

@Controller
@SpringBootApplication
@Configuration
public class HelloApplication {

    @RequestMapping("hello")
    @ResponseBody
    public String hello(){
        return "hello world!";
    }

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

}
  • @SpringBootApplication 这个是SpringBoot的核心注解,开启自动配置
  • @Configuration 声明这是一个配置类
  • @Controller 声明这同时是一个控制器
  • main 这是项目的入口

运行后可以打开http://localhost:8088/hello得到测试正确的结果如下
这里写图片描述
这个时候如果没有配置内置的Tomcat端口号可能会有端口冲突的问题,此时可以使用全局配置文件的方式去修改服务器端口号。SpringBoot使用一个规定命名的全局配置文件application.properties文件或者application.yml文件,这个文件通常放在resources下或者/config下。我这里采用application.yml的方式

server:
 port: 8088

3. SpringBoot整合Mybatis

SpringBoot为我们提供了简化企业级开发绝大多数场景的starter pom,只要使用了应用场景所需的starter pom,相关的技术配置就会消除,就可以得到SpringBoot为我们提供的自动配置的Bean。
这里我使用了SpringBoot对JDBC数据库的支持,以及Mybatis提供的第三方的SpringBoot对Mybatis的支持。我写入了如下的依赖,其中SpringBoot官方提供的starter pom不需要提供版本号,版本问题由父依赖去管理。这里的MySQL驱动版本要指定为5.1.6,用默认的会出错。

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>

为了给mybatis提供数据源DataSource,这里采用全局配置文件的方式去设置驱动以及url等。在全局配置文件application.yml中添加如下的代码

spring:
 datasource:
   driver-class-name: com.mysql.jdbc.Driver
   url: jdbc:jdbc:mysql:///cloud_note?userUnicode=true&amp;characterEncoding=utf8
   username: root
   password: 860065

测试通过后下面开始设置Mybatis和SpringBoot整合,在这里分为两步去整合:
第一步:创建一个Mybatis的配置类,方便控制Mybatis的各种控制

@Configuration
public class MyBatisConfig {

    @Bean
    @ConditionalOnMissingBean //当容器里没有指定的Bean的情况下创建该对象
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        // 设置数据源
        sqlSessionFactoryBean.setDataSource(dataSource);
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        // 设置映射文件
        Resource[] mapperResources = null;
        try {
            mapperResources = resolver.getResources("classpath:mapper/*.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        sqlSessionFactoryBean.setMapperLocations(mapperResources);
        // 设置mybatis的主配置文件
        Resource mybatisConfigXml = resolver.getResource("classpath:mybatis/mybatis-config.xml");
        sqlSessionFactoryBean.setConfigLocation(mybatisConfigXml);
        return sqlSessionFactoryBean;
    }
}

第二步:创建Mapper接口的扫描类,MapperScannerConfig,为mapper 产生bean 放进ioc 容器内。

@Configuration
@AutoConfigureAfter(MyBatisConfig.class) //保证在MyBatisConfig实例化之后再实例化该类
public class MapperScannerConfig {

    // mapper接口的扫描器
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setBasePackage("co.meihuo.dao");
        return mapperScannerConfigurer;
    }
}

MySQL文件


SET FOREIGN_KEY_CHECKS=0;

DROP database IF EXISTS `user_base`;
create database user_base;
use user_base;
DROP TABLE IF EXISTS `cn_user`;
create table `cn_user` (
    `cn_id` VARCHAR(100) PRIMARY KEY,
    `cn_username` VARCHAR(100),
    `cn_password` VARCHAR(100),
    `cn_age` INT(2)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `cn_user` values ('1','Test','123456',26);
INSERT INTO `cn_user` values ('2','Test2','888888',22);

4. 实体类

public class User implements Serializable{
    private String cn_id;
    private String cn_username;
    private String cn_password;
    private Integer cn_age;
    public String getCn_id() {
        return cn_id;
    }
    public void setCn_id(String cn_id) {
        this.cn_id = cn_id;
    }
    public String getCn_username() {
        return cn_username;
    }
    public void setCn_username(String cn_username) {
        this.cn_username = cn_username;
    }
    public String getCn_password() {
        return cn_password;
    }
    public void setCn_password(String cn_password) {
        this.cn_password = cn_password;
    }
    public Integer getCn_age() {
        return cn_age;
    }
    public void setCn_age(Integer cn_age) {
        this.cn_age = cn_age;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((cn_id == null) ? 0 : cn_id.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        User other = (User) obj;
        if (cn_id == null) {
            if (other.cn_id != null)
                return false;
        } else if (!cn_id.equals(other.cn_id))
            return false;
        return true;
    }
    @Override
    public String toString() {
        return "User [cn_id=" + cn_id + ", cn_username=" + cn_username
                + ", cn_password=" + cn_password + ", cn_age=" + cn_age + "]";
    }

}

5. 持久层

写一个简单的求用户数量的查询语句,用mybatis自动生成相应的Mapper放在容器中共业务层调用。
UserMapper代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="co.meihuo.dao.UserDAO">
    <select id="count" resultType="int">
        select count(*) from cn_user
    </select>
</mapper>

对应的DAO:

public interface UserDAO {
    public int count();
}

6. 业务层

这是一个实验项目,不做复杂的业务逻辑,没有对结果封装成一个JSON对象发回浏览器,而是将查询的结果直接显示在浏览器上。
业务层接口

public interface UserService {
    public Integer getCount();
}

业务层实现类,这里用依赖注入的方式将mybatis生成的Bean注入到业务层实现类中

@Service("userService")
public class UserServiceImpl implements UserService{

    @Resource
    private UserDAO userDAO;

    public Integer getCount() {
        return userDAO.count();
    }

}

7. 运行

  1. 运行入口方法
  2. 在浏览器中访问http://localhost:8088/count,可以得到目前数据库中客户的数量
    这里写图片描述

我在这个简单的SpringBoot整合Mybatis项目中,遇到了几个问题这里着重说一下:
1. SpringBoot内置的Tomcat的端口号可能会跟Oracle冲突
2. 需要清楚mybatis的三个文件:mybatis-config.xml 用来配置mybatis,这个文件里面的内容可以通过java配置的方式去实现。*Mapper.xml文件,这个是映射文件不用说。DAO不用说。SpringBoot整合Mybatis的时候最好通过两个Java配置去完成,一个是MybatisConfig这个用来配置Mybatis,一个是MapperScannerConfig,用来配置Mapper扫描。
3. 注意要把SpringBoot中推荐整合的MySQL驱动版本更换为5.1.6否则会有一些问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值