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

作者:xuyuzhuang1991 时间:2023-10-03 17:45:47 

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>

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

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

代码文件内容

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依赖,代码如下:


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的Controller
public 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") //2
public class StartApp {
 public static void main(String[] args) {
   SpringApplication.run(StartApp.class, args);
 }
}

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

运行结果

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

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

测试show服务,结果如下:

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

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

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

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

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

测试insert服务

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

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

再次测试showDao服务

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

结语

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

代码库地址:github地址

来源:http://blog.csdn.net/xuyuzhuang1991/article/details/54143945

标签:Spring,Boot,MyBatis
0
投稿

猜你喜欢

  • C#异步的世界(上)

    2021-09-21 06:01:43
  • java调用shell命令并获取执行结果的示例

    2021-07-06 06:17:54
  • Java ClassLoader虚拟类实现代码热替换的示例代码

    2022-06-25 03:08:52
  • QT实现简单计算器功能

    2021-08-19 21:47:19
  • Android mvvm之LiveData原理案例详解

    2023-09-29 11:49:26
  • c# 如何实现自动更新程序

    2021-11-20 21:02:41
  • java的Arrays工具类实战

    2023-08-21 15:46:36
  • C#中XML基础用法

    2023-08-05 17:12:34
  • 聊聊springboot静态资源加载的规则

    2021-08-29 22:52:03
  • 关于BufferedReader读取文件指定字符集问题

    2023-09-03 11:10:28
  • Maven本地jar引用的实现方法

    2021-08-09 15:42:45
  • Android实现屏幕旋转四个方向准确监听

    2022-06-07 08:57:32
  • 基于Android本地代码生成器详解

    2022-09-15 02:52:26
  • Java Objects工具类原理及用法详解

    2022-10-15 01:40:35
  • Java反射获取class对象方式解析

    2023-04-22 15:51:30
  • Fluent Mybatis实际开发中的优势对比

    2022-07-09 14:29:34
  • Android实现点击缩略图放大效果

    2022-11-10 21:47:23
  • C# 泛型集合类List<T>使用总结

    2021-08-30 02:04:01
  • Unity中 ShaderGraph 实现超级炫酷的溶解效果入门级教程

    2021-11-15 01:48:08
  • 带你了解Java Maven的打包操作

    2022-08-03 15:23:33
  • asp之家 软件编程 m.aspxhome.com