详解Spring Boot集成MyBatis的开发流程

时间:2022-10-28 16:25:00

  MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。

  spring Boot是能支持快速创建Spring应用的Java框架。

  本文通过一个例子来学习Spring Boot如何集成MyBatis,而且过程中不需要XML配置。

1、创建数据库

  本文的例子使用MySQL数据库,首先创建一个用户表,执行sql语句如下:

CREATE TABLE IF NOT EXISTS user (
`id` INT() NOT NULL AUTO_INCREMENT,
`name` VARCHAR() NULL DEFAULT NULL ,
`age` INT() NOT NULL ,
PRIMARY KEY (id)
)

2、工程目录结构与依赖配置

  首先新建一个Maven工程,并配置Pom依赖,本例中所用到的依赖如下:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4..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.</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.</version>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

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

详解Spring Boot集成MyBatis的开发流程

3、代码文件内容

(1)创建配置文件——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=

(2)创建POJO——entity/User.java

  这是一个POJO,包含了id, name, age三个属性,代码如下:即domain实体类

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; }
}

(3)创建一个数据层接口——service/UserDao.java

  这是一个Mapper类,代码如下:即dao层

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 //
public interface UserDao {
@Results({ //
@Result(property = "id", column = "id"), //
@Result(property = "name", column = "name"),
@Result(property = "age", column = "age")
})
@Select("SELECT * FROM user WHERE age = #{age}") //
List<User> get(int age); @Insert("INSERT INTO user(name, age) VALUES (#{name}, #{age})") //
void insert(User user);
}

  //1 @Mapper将UserDao声明为一个Mapper接口

  //2 @Results是结果映射列表,@Result中property是User类的属性名,colomn是数据库表的字段名

  //3 @Select、 @Insert 分别代表了执行的真实SQL

(4)创建一个用户服务——service/UserService.java

  这是一个服务类Bean,提供三个函数功能,代码如下:即service层

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!";
}
}

(5)常见一个Web Controller——controller/UserController.java

  这是一个Spring Web的Controller类,引入了spring-boot-starter-web依赖,代码如下:即action层

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);
}
}

(6)创建启动类——main/StartApp.java

  这是一个spring boot启动类。代码如下:即main函数

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") //
@MapperScan(basePackages = "com.xyz.dbtest.dao") //
public class StartApp {
public static void main(String[] args) {
SpringApplication.run(StartApp.class, args);
}
}

  //1 由于StartApp类位于基础包的自包中,因此需要设置scanBasePackage

  //2 设置Mapper接口所在的包

4、运行结果

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

详解Spring Boot集成MyBatis的开发流程

  测试show服务,结果如下:

详解Spring Boot集成MyBatis的开发流程

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

  不带参数时,访问错误:

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

详解Spring Boot集成MyBatis的开发流程

  测试insert服务

详解Spring Boot集成MyBatis的开发流程

  再次测试showDao服务

详解Spring Boot集成MyBatis的开发流程

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

详解Spring Boot集成MyBatis的开发流程的更多相关文章

  1. Spring Boot集成MyBatis开发Web项目

    1.Maven构建Spring Boot 创建Maven Web工程,引入spring-boot-starter-parent依赖 <project xmlns="http://mav ...

  2. spring boot集成MyBatis 通用Mapper 使用总结

    spring boot集成MyBatis 通用Mapper 使用总结 2019年 参考资料: Spring boot集成 MyBatis 通用Mapper SpringBoot框架之通用mapper插 ...

  3. spring boot集成mybatis&lpar;1&rpar;

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  4. spring boot集成mybatis&lpar;2&rpar; - 使用pagehelper实现分页

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  5. spring boot集成mybatis&lpar;3&rpar; - mybatis generator 配置

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  6. 【spring boot】14&period;spring boot集成mybatis&comma;注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法

    spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...

  7. spring boot集成mybatis只剩两个sql 并提示 Cannot obtain primary key information from the database&comma; generated objects may be incomplete

    前言 spring boot集成mybatis时只生成两个sql, 搞了一个早上,终于找到原因了 找了很多办法都没有解决, 最后注意到生成sql的时候打印了一句话: Cannot obtain pri ...

  8. spring boot 集成 Mybatis,JPA

    相对应MyBatis, JPA可能大家会比较陌生,它并不是一个框架,而是一组规范,其使用跟Hibernate 差不多,原理层面的东西就不多讲了,主要的是应用. Mybatis就不多说了,SSM这三个框 ...

  9. spring boot集成mybatis分页插件

    mybatis的分页插件能省事,本章记录的是 spring boot整合mybatis分页插件. 1.引入依赖 <!-- 分页插件pagehelper --> <dependency ...

随机推荐

  1. SSRS2:Reporting Service 配置Service Account

    1,Service Account SSRS以一个Service方式实现,有三部分组成:Web Service,Report Manager和一个后台的进程,这个Service运行的账号就是Servi ...

  2. HTML5&plus;JS 《五子飞》游戏实现(二)路线分析和资源准备

    上一节 里沃特与我们分享了<五子飞>的下棋规则,可能有些伙伴看得不清楚,像我们码农还是看到代码比较靠谱.下面就把可以走棋的路线跟大家说一下. 假设从左上角开始,以0开始编号,往右数(没看第 ...

  3. 当一个页面出现多个checkbox全选时的处理

    HTML: <input type="checkbox" onclick="boxOnclick(this,'some1')">全选一 <in ...

  4. CSS 定位

    一.CSS 定位和浮动   它们代替了多年来的表格布局.   定位的思想很简单,相对于正常位置.相对于父元素.另一个元素甚至是浏览器窗口的位置.   浮动在 CSS1 中被首次提出.浮动不完全是定位, ...

  5. Java从零开始学四十七&lpar;注解简述&rpar;

    一.Java中注解Annotation 什么是注解:用来描述数据的数据(元数据). Java代码里的特殊标记.它为代码中添加用Java程序无法表达的额外信息提供一种形式化的方法,使用我们可以在未来的某 ...

  6. Beautyacticle

    Original: https://github.com/rizhilee/Beautyacticle Backup: https://github.com/eltld/Beautyacticle

  7. javaScript &amp&semi; jquery完美判断图片是否加载完毕

    好久没写东西了,正好最近因为工作需要,写了一个瀑布流异步加载的程序. 今天就不谈瀑布流,来谈一下关于load的问题. ----------------------------------------- ...

  8. 基于IMX515EVK&plus;WINCE6&period;0---支持PB6&period;0通过USB下载镜像文件

    基于IMX515EVK+WINCE6.0---支持PB6.0通过USB下载镜像文件 在INAND还没有写入镜像文件之前,通过ATK工具烧录xldr.nb0和eboot.nbo到INAND中,见相关链接 ...

  9. Linux两台主机之间建立信任(ssh免密码)

    背景: 有时候我们在两个主机之间复制文件的时候,提示输入密码,很不方便,那如何免密码复制呢?,就是使用通过linux公钥和秘钥,建立双机信任关系. 在整理之前,我先说下ssh免密码的要点 : 你想免密 ...

  10. python3&period;7&period;2 pip 出现locations that require TLS&sol;SSL异常处理方法

    centos7安装python3.7.2后,运行 pip3 install tornado 会报错 [root@localhost ~]# pip3 install tornado pip is co ...