Idea 上Spring Boot 整合mybatis全过程以及遇到的那些坑
1. 创建maven项目
2. 添加依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 热部署支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!-- druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.15</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>${basedir}src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.yml</include>
</includes>
</resource>
</resources>
</build>
3. 创建mybatis-cofig.xml和mapper还有application.yml配置文件
这是mybatis-config
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="callSettersOnNulls" value="true"/>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
<typeAliases>
<typeAlias alias="Integer" type="java.lang.Integer" />
<typeAlias alias="Long" type="java.lang.Long" />
<typeAlias alias="HashMap" type="java.util.HashMap" />
<typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
<typeAlias alias="ArrayList" type="java.util.ArrayList" />
<typeAlias alias="LinkedList" type="java.util.LinkedList" />
</typeAliases>
</configuration>
mapper下的mapper.xml,注意要把命名空间namespace写对,对应相对的dao层
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.miu.dao.UserMapper"><!-- 查询所有 -->
<select id="getUser" resultType="com.miu.pojo.User">
SELECT id,NAME,birthday,address FROM user</select>
</mapper>
这是配置文件application.yml,注意不要有空格
server:
port: 8080
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/dianke?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: root
mybatis:
type-aliases-package: com.miu.pojo
config-locations: classpath:mapper/mybatis-config.xml
mapper-locations: classpath:mapper/*Mapper.xml
logging:
level:
com.miu.dao: debug
type-aliases-package:对应自己的实体类所在的包
config-locations:mybatis-config.xml所在的路径
mapper-locations:mapper.xml所在的路径
4.创建相对应实体类,dao层,service层,serviceImpl层,controller层
User实体类
package com.miu.pojo;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Component;
import java.io.Serializable;
import java.util.Date;
@Component
public class User implements Serializable {
private Integer id;
private String name;
@DateTimeFormat(pattern="yyyy-MM-dd") //修改日期格式
private Date birthday;
private String address;
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public Date getBirthday() {
return birthday;
}
public String getAddress() {
return address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", birthday=" + birthday +
", address='" + address + '\'' +
'}';
}
}
dao层
package com.miu.dao;
import com.miu.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
List<User> getUser() throws Exception;
}
service和implements
package com.miu.service;
import com.miu.pojo.User;
import java.util.List;
public interface UserService {
List<User> getUserAll() throws Exception;
}
package com.miu.service;
import com.miu.dao.UserMapper;
import com.miu.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> getUserAll() throws Exception {
return userMapper.getUser();
}
}
Controller层
package com.miu.controller;
import com.miu.pojo.User;
import com.miu.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("getUser")
public List<User> getUser(){
try{
return userService.getUserAll();
}
catch(Exception e){
e.printStackTrace();
return null;
}
}
}
启动类代码
package com.miu;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.miu.dao")//dao层所在的包路径
public class RunApp {
public static void main(String[] args) {
SpringApplication.run(RunApp.class, args);
}
}
到这里,所有的配置就结束了,贴一下我的架构图
这是运行成功界面
能获取到数据说明配置已经成功
-----------------------------------------------华丽的分割线-----------------------------------------------
接下来,说一下在配置中遇到一些坑!!!
之前配置没有问题,启动一跑,报错了!!
绑定异常,仔细排查了一下命名空间的问题,结果发现对应上了,后面查看tagert,发现并没有mapper和yml文件,于是通过一番排查,发现是配置文件没有引入,只需在配置文件中添加一句
这是代码
<resources>
<resource>
<directory>${basedir}src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.yml</include>
</includes>
</resource>
</resources>
如果发现mapper.xml还是没有build到,是因为IDEA和eclipse找文件有一点不同,如果你是吧mapper文件跟.java文件放同一级目录下,他是找不到的,因此也会报这个问题,我们只需
Ctrl+Shift+Alt+S
步骤如图,然后重新跑一边,就可以在target中找到对应配置文件
如何还是报绑定异常,确认配置文件路径没有错,也编译到了,那么你可能跟我遇到的问题一样,一个**非常神奇的问题!!!**命名问题,我现在也没搞懂,由于之前我的application.yml配置文件是随便用了一个config.yml命名,结果我排查了所有错误,没发现问题,后面突然想,会不会是命名不规范,我就把我的yml名字改为application.yml,一跑,竟然通了!!!!你敢相信!!!!!