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 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 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 类。启动成功如下图所示
  • 测试 show 服务,结果如下:
  • 测试 showDao 服务,在输入 URL 时需要将参数打包进 url,结果如下:
    不带参数时,访问错误:

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

  • 测试 insert 服务
  • 再次测试 showDao 服务

结语

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

代码库地址:github 地址
转载 http://blog.csdn.net/xuyuzhuang1991/article/details/54143945
作者:许玉壮

SpringBoot学习(二)的更多相关文章

  1. SpringBoot学习(二)-->Spring的Java配置方式

    二.Spring的Java配置方式 Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.@Configuration 和 @Bean Spring的Java配置方式是通过 @ ...

  2. SpringBoot学习<二>——SpringBoot的默认配置文件application和多环境配置

    一.SpringBoot的默认文件appliction 上一篇文章已经说明,springboot启动会内嵌tomcat,端口也是默认的8080,如果我们想要改变端口如果做呢? 在springboot项 ...

  3. springboot学习二:配置文件配置

    springboot默认读取application*.properties #######spring配置####### spring.profiles.active=dev //引入开发配置文件 a ...

  4. SpringBoot学习(二):配置文件

    1.配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的: •application.properties •application.yml 配置文件的作用:修改SpringBoo ...

  5. SpringBoot学习(二)

    spring-boot-starter-parent Maven的用户可以通过继承spring-boot-starter-parent项目来获得一些合理的默认配置.这个parent提供了以下特性: 默 ...

  6. springboot学习(二十二)_ 使用@Constraint注解自定义验证注解

    最近项目在使用如@NotNull @Max 等配合@vaild 注解进行验证传过来的参数校验,然后通过统一异常处理,直接返回给前端,不用在业务代码中对这些参数进行校验.但是官方提供的并不能全部满足项目 ...

  7. springboot 学习笔记(二)

    springboot 学习笔记(二) 快速创建一个springboot工程,并引入所需要的依赖 1.利用Spring initializr 来创建一个springboot项目,登陆http://sta ...

  8. Quartz学习--二 Hello Quartz! 和源码分析

    Quartz学习--二  Hello Quartz! 和源码分析 三.  Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...

  9. SpringCloud学习(二):微服务入门实战项目搭建

    一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...

  10. Springboot学习笔记(六)-配置化注入

    前言 前面写过一个Springboot学习笔记(一)-线程池的简化及使用,发现有个缺陷,打个比方,我这个线程池写在一个公用服务中,各项参数都定死了,现在有两个服务要调用它,一个服务的线程数通常很多,而 ...

随机推荐

  1. 【BZOJ】3771: Triple FTT+生成函数

    [题意]给定n个物品,价值为$a_i$,物品价格互不相同,求选一个或两个或三个的价值为x的方案数,输出所有存在的x和对应方案数.$ai<=40000$. [算法]生成函数+FFT [题解]要求价 ...

  2. 关于HttpWebRequest发生服务器协议冲突的解决办法

    WinForm下的app.config文件中添加: <system.net>    <settings>      <httpWebRequest useUnsafeHe ...

  3. Docker 配置国内镜像拉取中心,Configure docker to use faster registries in China.

    Networking in China is really bad when it comes to using some cloud based tools like docker, it's us ...

  4. LintCode之二叉树的最大节点

    分治问题,可以把整棵树看做是由一颗颗只有三个节点组成的小树,一颗树的构成是根节点.左子树.右子树,这样只需要从左子树找出一个最大的节点,从右子树找出一个最大的节点,然后与根节点三个取个最大的,就是最终 ...

  5. JSP分页之结合Bootstrap分页插件进行简单分页

    结合Bootstrap的分页插件实现分页,其中策略是每次显示5个按钮,然后根据当前页的不同来进行不同的显示: 1. 当前页<3,如果当前页大于5页就显示前五页,不然就显示1~totalPage. ...

  6. 执行impdp时出现的各种问题

    1.不同的表空间,不同的用户,不同的表名 impdp ODS_YYJC_BUF_ZB/ODS_YYJC_BUF_ZB job_name=bs3 directory=EXPDMP exclude=OBJ ...

  7. 「caffe编译bug」python/caffe/_caffe.cpp:10:31: fatal error: numpy/arrayobject.h: No such file or directory

    在Makefile.config找到PYTHON_INCLUDE,发现有点不同: PYTHON_INCLUDE := /usr/include/python2.7 \         /usr/lib ...

  8. leetcode 之Permutation(七)

    首先是next permutation的算法的描述和分析如下: 这题一是要知道思路,编程中注意STL的用法 void nextPermutaion(vector<int> &num ...

  9. Codeforces 799B - T-shirt buying(STL)

    题目链接:http://codeforces.com/problemset/problem/799/B 题目大意:有n件T恤,每件T体恤都分别有价格(每件衣服的价格不重复).前面的颜色.背部的颜色三种 ...

  10. mac 安装mongodb与常用操作

    1.安装 brew update brew install mongodb 2.启动mongo mongod --config /usr/local/etc/mongod.conf 3.启动 mong ...