Springboot整合Mysql+Mybatis
没有废话,直接开搞!
pom.xml依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 数据库连接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
sql
启动前需要执行sql
CREATE TABLE `jin_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(64) DEFAULT NULL,
`password` varchar(64) DEFAULT NULL,
`name` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `jin_user` (`id`,`user_name`,`password`,`name`) VALUES (1,'lamian','123456','拉面');
project structure(项目结构)
application.properties
配置SpringBoot启动配置信息
#项目启动端口
server.port=1215
#最基础的数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/jin?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#指定mybatis xml文件地址
mybatis.mapperLocations=classpath:com.jin.mapper/*.xml
Application.class
每个springboot都需要一个启动类.只需要在类上加上注解@SpringBootApplication
(该注解具体介绍http://blog.csdn.net/u013473691/article/details/52353923)
@MapperScan("com.jin.mapper")注解指定mapper接口扫描地址.目的是让容器能够从"com.jin.mapper"包下找到mapper接口.
/**
* Created by lamian on 17/6/23.
*/
@SpringBootApplication
@MapperScan("com.jin.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
TestController.class(控制层)
这里简单的做了一个登陆的接口,用以调试springboot和mysql&mybatis的整合情况.
此外还有一个启动测试接口(测试web项目是否运行正常).
/**
* Created by lamian on 17/6/23.
*/
@Controller
@RequestMapping("test")
public class TestController {
@Autowired
private TestService testService;
/**
* 启动测试接口
* @return
*/
@RequestMapping("/start")
@ResponseBody
public String startTest(){
return "hello, world";
}
/**
* mysql&mybatis整合测试接口
* @return
*/
@RequestMapping("/datasource")
@ResponseBody
public String datasourceTest(@RequestParam(value = "user_name") String userName,
@RequestParam(value = "password") String password){
Map<String, String> mapUser = new HashMap<String, String>();
mapUser.put("userName", userName);
mapUser.put("password", password);
User testUser;
try{
testUser = testService.findUser(mapUser);
}catch (Exception e){
e.printStackTrace();
return "系统错误";
}
if(null != testUser){
return "welcome " + testUser.getName();
}
return "账号密码错误";
}
}
TestService.class(服务层)
一个简单的service层,直接调mapper接口
/**
* Created by lamian on 17/6/26.
*/
@Service
public class TestService {
@Autowired
private TestMapper testMapper;
public User findUser(Map<String, String> userMap){
if(null == userMap){
return null;
}
User testUser = testMapper.findUser(userMap).get(0);
return testUser;
}
}
TestMapper.interface(mapper接口)
简单的mapper接口
方法名要跟xml中被调用的sql,id相同.如select标签的id属性findUser.
/**
* Created by lamian on 17/6/26.
*/
public interface TestMapper {
List<User> findUser(Map<String, String> userMap);
}
TestMapper.xml(真正需要写sql的地方)
重要的事情说三遍,仔细仔细一定要仔细。在编写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.jin.mapper.TestMapper">
<resultMap id="BaseResult" type="com.jin.entity.User">
<id column="id" property="id"/>
<id column="user_name" property="userName"/>
<id column="password" property="password"/>
<id column="name" property="name"/>
</resultMap>
<sql id="Base_Column_List">
id, user_name, password, name
</sql>
<select id="findUser" resultMap="BaseResult" parameterType="java.util.Map">
SELECT
<include refid="Base_Column_List"/>
from jin_user
<where>
<if test="userName != null">
AND user_name = #{userName}
</if>
<if test="password != null">
AND password = #{password}
</if>
</where>
</select>
</mapper>
打工告成!启动测试啦
启动完成Application后,在浏览器中输入
http://localhost:1215/test/datasource?user_name=lamian&password=123456
啪啪啪!当你看到下面的响应时,证明你整合mysql、mybatis成功!
错误及解决方案
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException
这是最常见的xml编写错误提示,看到这个一定是你xml文件出错了(大部分是拼写错误!)
· resultMap标签下column参数和property参数都对了吗
· parameterType参数和parameterMap参数使用正确了吗(不知道就换一下试试=-=)
· mapper标签namespace属性是否是相对应的mapper接口
· 还不行?敲个空格在启一遍试试吧
其它错误:
· Application启动类上面是否添加@MapperScan("你放mapper接口的包名(例如com.jin.mapper)")注解(用于扫描mapper所在接口)
· 配置文件mybatis.mapperLocations=xml文件所在包名(例如classpath:com.jin.mapper/*.xml)
百度谷歌是解决错误的最佳选择.
大多数错误都是因为粗心所引起的.仔细检查终会发现错误.