MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。spring Boot是能支持快速创建Spring应用的Java框架。本文通过一个例子来学习Spring Boot如何集成MyBatis,而且过程中不需要XML配置。
创建数据库
本文的例子使用MySQL数据库,首先创建一个用户表,执行sql语句如下:
CREATE TABLE IF NOT EXISTS user ( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAr(50) NULL DEFAULT NULL , `age` INT(2) NOT NULL , PRIMARY KEY (id) )
工程目录结构与依赖配置
首先新建一个Maven工程,并配置Pom依赖,本例中所用到的依赖如下:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.2.RELEASE</version> <relativePath /> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.40</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
然后创建一下工程目录结构,如下图所示:
代码文件内容
0. 创建配置文件——application.properties
写入一下内容:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8 spring.datasource.username=root spring.datasource.password=123456
1. 创建POJO——entity/User.java
这是一个POJO,包含了id, name, age三个属性,代码如下:
package com.xyz.dbtest.entity; public class User { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id=id; } public String getName() { return name; } public void setName(String name) { this.name=name; } public int getAge() { return age; } public void setAge(int age) { this.age=age; } }
2. 创建一个数据层接口——service/UserService.java
这是一个Mapper类,代码如下:
package com.xyz.dbtest.dao; import com.xyz.dbtest.entity.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper //1 public interface UserDao { @Results({ //2 @Result(property="id", column="id"), //2 @Result(property="name", column="name"), @Result(property="age", column="age") }) @Select("SELECT * FROM user WHERe age=#{age}") //3 List<User> get(int age); @Insert("INSERT INTO user(name, age) VALUES (#{name}, #{age})") //3 void insert(User user); }
//1 @Mapper将UserDao声明为一个Mapper接口
//2 @Results是结果映射列表,@Result中property是User类的属性名,colomn是数据库表的字段名
//3 @Select, @Insert 分别代表了执行的真实SQL
3. 创建一个用户服务——service/UserService.java
这是一个服务类Bean,提供三个函数功能,代码如下:
package com.xyz.dbtest.service; import com.xyz.dbtest.dao.UserDao; import com.xyz.dbtest.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service //声明成一个spring bean public class UserService { @Autowired //连接到UserDao Bean private UserDao userDao; public String show() { return "Hello World!"; } public List<User> showDao(int age) { return userDao.get(age); } public String insert(String name, int age) { //插入一条记录 User user=new User(); user.setName(name); user.setAge(age); userDao.insert(user); return "Insert ( \""+name+"\", age"+age+") OK!"; } }
4. 常见一个Web Controller——controller/UserController.java
这是一个Spring Web的Controller类,引入了spring-boot-starter-web依赖,代码如下: