mybatis初期使用比较麻烦,需要各种配置文件,实体类,dao层映射关联,还有一大堆其他配置,当然mybatis也发现了这种弊端,初期开发了generator可以根据结果自动生成实体类,配置文件和dao层代码,可以减轻一部分开发量,后期也进行了大量的优化可以使用注解了,自动管理dao层和配置文件等。
下面详解下springboot如何整合mybatis,这里使用xml配置sql。因为我觉得sql和业务代码应该隔离,方便和dba校对sql。二者相比,xml对较长的sql比较清晰。
数据库准备
CREATE DATABASE springbootdb;
DROP TABLE IF EXISTS `city`;
CREATE TABLE `city` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '城市编号',
`province_id` INT(10) UNSIGNED NOT NULL COMMENT '省份编号',
`city_name` VARCHAR(25) DEFAULT NULL COMMENT '城市名称',
`description` VARCHAR(25) DEFAULT NULL COMMENT '描述',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT city VALUES (1, 1, '襄阳市','Colg 的家在襄阳。');
项目结构
pom.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>springboot</groupId>
<artifactId>springboot-mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-mybatis :: 整合 Mybatis Demo</name>
<!-- Spring Boot 启动父依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<properties>
<mybatis-spring-boot>1.2.0</mybatis-spring-boot>
</properties>
<dependencies>
<!-- Spring Boot Web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Test 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring Boot Mybatis 依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot}</version>
</dependency>
<!-- MySQL 连接驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
</project>
application.yml
# 数据源配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/springbootdb?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
# MyBatis 配置
mybatis:
# type-aliases-package: org.spring.springboot.domain
mapper-locations:
- classpath:mybatis/mapper/*.xml
# MyBatis 日志级别
logging:
level:
org.spring.springboot.dao: debug
Application
package org.spring.springboot;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Spring Boot 应用启动类
*
* @author colg
*/
@SpringBootApplication
// mapper 接口类扫描包配置
@MapperScan("org.spring.springboot.dao")
public class Application {
public static void main(String[] args) {
// 程序启动入口
// 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件
SpringApplication.run(Application.class, args);
}
}
@MapperScan
:指定要扫描的Mapper类的包的路径
MybatisProperties
:mybatis-spring-boot 自动注入类
Dao
package org.spring.springboot.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.spring.springboot.domain.City;
/**
* 城市 DAO 接口类
*
* @author colg
*/
public interface CityDao {
/**
* 根据城市名称,模糊查询城市信息
*
* @param cityName
* 城市名
*/
List<City> queryByName(@Param("cityName") String cityName);
}
CityMapper.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="org.spring.springboot.dao.CityDao">
<resultMap id="BaseResultMap" type="org.spring.springboot.domain.City">
<result column="id" property="id" />
<result column="province_id" property="provinceId" />
<result column="city_name" property="cityName" />
<result column="description" property="description" />
</resultMap>
<parameterMap id="City" type="org.spring.springboot.domain.City"/>
<sql id="Base_Column_List">
id, province_id, city_name, description
</sql>
<select id="queryByName" resultMap="BaseResultMap" parameterType="java.lang.String">
SELECT
<include refid="Base_Column_List" />
FROM city
WHERE city_name LIKE '%${cityName}%'
</select>
</mapper>