首页 > 编程 > Java > 正文

详解Spring Boot集成MyBatis(注解方式)

2019-11-26 12:18:35
字体:
来源:转载
供稿:网友

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>

然后创建一下工程目录结构,如下图所示:

project-structure

代码文件内容

0. 创建配置文件――application.properties

写入一下内容:

spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8spring.datasource.username=rootspring.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 //1public 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 beanpublic 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依赖,代码如下:

package com.xyz.dbtest.controller;import com.xyz.dbtest.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.bind.annotation.RestController;@RestController //声明为一个Restful的Controllerpublic class UserController {  @Autowired //自动连接到UserService Bean  private UserService userService;  @RequestMapping(value = "/show")  public String show() {    return userService.show();  }  @RequestMapping(value = "/showDao")  public Object showDao(int age) {    return userService.showDao(age);  }  @RequestMapping(value="/insert")  public String insert(String name, int age) {    return userService.insert(name, age);  }}

5. 创建启动类――main/StartApp.java

这是一个spring boot启动类。代码如下:

package com.xyz.dbtest.main;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication(scanBasePackages = "com.xyz.dbtest") //1@MapperScan(basePackages = "com.xyz.dbtest.dao") //2public class StartApp {  public static void main(String[] args) {    SpringApplication.run(StartApp.class, args);  }}

//1 由于StartApp类位于基础包的自包中,因此需要设置scanBasePackage
//2 设置Mapper接口所在的包

运行结果

运行Sql语句创建数据库表后,运行StartApp类。启动成功如下图所示

run-success

测试show服务,结果如下:

show-service

测试showDao服务,在输入URL时需要将参数打包进url,结果如下:
不带参数时,访问错误:

showDao-fail

带参数时,访问成功,由于数据库中没有记录,所以结果是一个空列表:

showDao-fail

测试insert服务

insert-abc20

insert-xyz20

再次测试showDao服务

showDao-agin

结语

通过本文的例子可以看出,使用Spring boot集成MyBatis几乎不用任何配置工作,能有效加快开发效率!

代码库地址:github地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表