SpringBoot集成Mybatis

前面的文章介绍过如何搭建一个SpringBoot的基础工程,实际开发过程当中必然需要使用到数据库,接下来,我们就集成MySQL,使用Mybatis作为ORM框架。

创建测试数据库koit
CREATE DATABASE koit;

CREATE TABLE `k_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(36) NOT NULL DEFAULT '' COMMENT '邮箱',
  `display_name` varchar(36) NOT NULL DEFAULT '' COMMENT '显示名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8


添加依赖
<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <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.2</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
配置

在application.properties中添加如下数据库和连接池配置:

spring.datasource.url=jdbc:mysql://localhost:3306/koit?useUnicode\=true&characterEncoding\=utf-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.dbcp2.min-idle=5
spring.datasource.dbcp2.initial-size=5
spring.datasource.dbcp2.max-total=10
spring.datasource.dbcp2.max-wait-millis=200

Mybatis配置:

## Mybtias
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.configuration.use-generated-keys=true
mybatis.configuration.use-column-label=true
mybatis.configuration.map-underscore-to-camel-case=true

编码

UserMapper接口

package cc.koit.hulk.dao.mapper;

import cc.koit.hulk.dao.entity.User;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface UserMapper {

    void insert(@Param("user")User user);

}

UserMapper.xml

在resources目录下面新建mapper目录,在该目录下创建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="cc.koit.hulk.dao.mapper.UserMapper" >

    <insert id="insert" useGeneratedKeys="true" keyProperty="user.id" parameterType="cc.koit.hulk.dao.entity.User">
        INSERT INTO
          k_user
         (email,display_name)
         VALUES
         (#{user.email},#{user.displayName})
    </insert>

</mapper>

该操作同时还会把生成的自增ID注入到user对象中。

改造之前的UserServiceImpl,调用UserMapper的insert方法插入user:

package cc.koit.hulk.service.impl;

import cc.koit.hulk.dao.entity.User;
import cc.koit.hulk.dao.mapper.UserMapper;
import cc.koit.hulk.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {

    private static final Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);

    @Autowired
    private UserMapper userMapper;

    @Override
    public void create(User user) {
        userMapper.insert(user);
        logger.info("插入成功,返回id:"+user.getId());
    }
}

我们运行之前写好的单元测试类UserServiceTests,
可以看到输出了如下信息:

插入成功,返回id:2

开启Mybatis的SQL日志

logging.level.cc.koit.hulk.dao.mapper=debug

在application.properties中添加上面配置之后,再执行测试用例可以看到如下输出:

2018-09-27 20:42:11.654 DEBUG 17340 --- [           main] c.k.hulk.dao.mapper.UserMapper.insert    : ==>  Preparing: INSERT INTO k_user (email,display_name) VALUES (?,?)
2018-09-27 20:42:11.692 DEBUG 17340 --- [           main] c.k.hulk.dao.mapper.UserMapper.insert    : ==> Parameters: koit@sina.cn(String), koit(String)

多属性文件的配置

正常情况下,我们开发环境、测试环境和生产环境很多的配置是不一样了,比如数据库配置肯定不同,比如打印SQL日志,我们可能只在开发环境输出等,这个时候SpringBoot也提供了一个非常棒的实现:
创建四个属性文件:

  • application.properties
  • application-dev.properties 开发环境配置
  • application-pre.properties 测试环境配置
  • application-prod.properties 生产环境配置

我们将一些固定不变的配置在application.properties,比如,数据库配置,本地开发的配置在application-dev.properties中,我们在application.properties添加一条配置:spring.profiles.active=dev,激活的是开发环境的配置application-dev.properties

本示例代码:git@gitee.com:funga/hulk.git

© 2019 FunGa技术札记 All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero