上篇文章《springboot集成mybatis(一)》介绍了SpringBoot集成MyBatis注解版。本文还是使用上篇中的案例,咱们换个姿势来一遍^_^

二、MyBatis配置版(XML)

配置版本应该是大家最熟悉的一套。用过ibatis的朋友都知道,大部分工作量都在xml文件里面。通过标签可以组合出各种复杂的sql。

Mybatis为我们简化了Dao层的代码,直接通过接口映射配置文件中的sql。

1.集成mybatis,增加maven依赖

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <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.3.1</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>

2.配置Mybatis数据源,application.properties文件添加配置信息

mybatis.type-aliases-package=com.lianjinsoft.pojo
mybatis.config-locations=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.15.129:3306/springboot?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456

3.springboot启动类,增加Mybatis扫描注解

@MapperScan("com.lianjinsoft.mapper")
@SpringBootApplication
public class MybatisXmlApplication { public static void main(String[] args) {
SpringApplication.run(MybatisXmlApplication.class, args);
}
}

4.增加pojo数据表映射类(部分代码)

public class Order {
private Integer id;
private String orderNo;
private String orderName;
private BigDecimal amount;
private Date addTime; public Order(){} public Order(String orderNo, String orderName, BigDecimal amount){
this.orderNo = orderNo;
this.orderName = orderName;
this.amount = amount;
this.addTime = new Date();
}
}

5.增加Mapper数据持久层操作方法

public interface OrderMapper {
List<Order> queryOrders(); Order queryOrderByNo(String orderNo); void addOrder(Order order); void delOrder(Integer id); void updOrder(Order order);
}

6.增加Mybatis主配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="Integer" type="java.lang.Integer" />
<typeAlias alias="Long" type="java.lang.Long" />
<typeAlias alias="HashMap" type="java.util.HashMap" />
<typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
<typeAlias alias="ArrayList" type="java.util.ArrayList" />
<typeAlias alias="LinkedList" type="java.util.LinkedList" />
</typeAliases>
</configuration>

7.增加Mapper对应的配置文件及sql

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.lianjinsoft.mapper.OrderMapper" >
<resultMap id="BaseResultMap" type="com.lianjinsoft.pojo.Order" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="order_no" property="orderNo" jdbcType="VARCHAR" />
<result column="order_name" property="orderName" jdbcType="VARCHAR" />
<result column="amount" property="amount" jdbcType="DECIMAL"/>
<result column="add_time" property="addTime" jdbcType="TIMESTAMP" />
</resultMap> <sql id="Base_Column_List" >
id, order_no, order_name, amount, add_time
</sql> <select id="queryOrders" resultMap="BaseResultMap" >
SELECT
<include refid="Base_Column_List" />
FROM orders
</select> <select id="queryOrderByNo" parameterType="java.lang.String" resultMap="BaseResultMap" >
SELECT
<include refid="Base_Column_List" />
FROM orders
WHERE order_no = #{orderNo}
</select> <insert id="addOrder" parameterType="com.lianjinsoft.pojo.Order" >
INSERT INTO orders
(order_no,order_name,amount,add_time)
VALUES
(#{orderNo}, #{orderName}, #{amount}, #{addTime})
</insert> <delete id="delOrder" parameterType="java.lang.Integer" >
DELETE FROM
orders
WHERE
id =#{id}
</delete> <update id="updOrder" parameterType="com.lianjinsoft.pojo.Order" >
UPDATE orders
SET order_name=#{orderName}
WHERE
id=#{id}
</update> </mapper>

8.增加TestCase,通过Junit测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class OrderMapperTests {
@Autowired
private OrderMapper orderMapper; @Test
public void test1_Add() {
orderMapper.addOrder(new Order("100001", "XX手机Plus 全面屏", new BigDecimal("4999")));
} @Test
public void test2_Query() {
Order order = orderMapper.queryOrderByNo("100001");
Assert.assertNotNull(order);
} @Test
public void test3_QueryOrders() {
Assert.assertEquals(1, orderMapper.queryOrders().size());
} @Test
public void test4_Upd() {
Order order = orderMapper.queryOrderByNo("100001");
order.setOrderName("三星S8+ 全面屏"); orderMapper.updOrder(order);
} @Test
public void test5_Del() {
orderMapper.delOrder(orderMapper.queryOrders().get(0).getId()); Assert.assertEquals(0, orderMapper.queryOrders().size());
} }

9.执行TestCase中的方法,验证Mybatis持久层方法是否正确

Demo中的TestCase有依赖关系,请按照测试方法的前后顺序分别执行Test方法。

10.验证通过,编写Controller(按照传统三层结构应该先编写service,此处省略)

@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private OrderMapper orderMapper; @RequestMapping("/add")
public String addOrder(Order order){
order.setAddTime(new Date());
orderMapper.addOrder(order); return "add success!";
} @RequestMapping("/update")
public String updOrder(Order order){
orderMapper.updOrder(order); return "update success!";
} @RequestMapping("/query")
public Order queryOrder(String orderNo){
return orderMapper.queryOrderByNo(orderNo);
} @RequestMapping("/queryAll")
public List<Order> queryAll(){
return orderMapper.queryOrders();
} @RequestMapping("/delete")
public String delOrder(Integer id){
orderMapper.delOrder(id); return "delete success!";
} }

总结:

注解版本更符合springboot微服务设计思想,快速、简洁、零配置的开发模式。

配置版本更有怀旧情怀,如何你习惯了在配置文件中编写sql(特别是复杂的sql),那么配置版本更适合你。

源代码:https://gitee.com/skychenjiajun/spring-boot

springboot集成mybatis(二)的更多相关文章

  1. SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版)

    SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版) ================================ ©Copyright 蕃薯耀 2 ...

  2. BindingException: Invalid bound statement (not found)问题排查:SpringBoot集成Mybatis重点分析

    重构代码,方法抛出异常:BindingException: Invalid bound statement (not found) 提示信息很明显:mybatis没有提供某方法 先不解释问题原因和排查 ...

  3. springboot集成mybatis(一)

    MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyB ...

  4. SpringBoot 集成Mybatis 连接Mysql数据库

    记录SpringBoot 集成Mybatis 连接数据库 防止后面忘记 1.添加Mybatis和Mysql依赖 <dependency> <groupId>org.mybati ...

  5. SpringBoot集成Mybatis并具有分页功能PageHelper

    SpringBoot集成Mybatis并具有分页功能PageHelper   环境:IDEA编译工具   第一步:生成测试的数据库表和数据   SET FOREIGN_KEY_CHECKS=0;   ...

  6. Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket

    https://blog.csdn.net/a123demi/article/details/78234023  : Springboot集成mybatis(mysql),mail,mongodb,c ...

  7. SpringBoot集成Mybatis配置动态数据源

    很多人在项目里边都会用到多个数据源,下面记录一次SpringBoot集成Mybatis配置多数据源的过程. pom.xml <?xml version="1.0" encod ...

  8. SpringBoot集成Mybatis实现多表查询的两种方式(基于xml)

     下面将在用户和账户进行一对一查询的基础上进行介绍SpringBoot集成Mybatis实现多表查询的基于xml的两种方式.   首先我们先创建两个数据库表,分别是user用户表和account账户表 ...

  9. SpringBoot集成MyBatis的Bean配置方式

    SpringBoot集成MyBatis的Bean配置方式 SpringBoot是一款轻量级开发的框架,简化了很多原先的xml文件配置方式,接下来就介绍一下如何不适用XML来配置Mybatis spri ...

随机推荐

  1. 网络通信 --> 互联网协议(一)

    互联网协议 一.概述 如何分层有不同的模型,有的模型分七层,有的分四层.这里介绍把互联网分成五层. 最底下的一层叫做"实体层"(Physical Layer),最上面的一层叫做&q ...

  2. bashell基础

    身为一个iOS程序员,虽然iOS相关技术十分重要,但是bash也是不可不了解的,因为技能的成长,除了深度,还需要广度.下面就来介绍下bash. Shell是C语言编写的,所以他是解释性语言,运行在Li ...

  3. /etc/nginx/nginx.conf配置文件详解

    user nginx; #数值和cpu核数个数一致worker_processes 8; #worker与cpu绑定 worker_cpu_affinity 0001 0010 0100 1000 1 ...

  4. Android中文API (109) —— SimpleCursorTreeAdapter

    前言 本章内容是android.widget.SimpleCursorTreeAdapter,版本为Android 3.0 r1,翻译来自"深夜未眠",含示例代码,欢迎访问它的博客 ...

  5. VC++开发AutoCAD 2018/objectARX 用向导新建项目无法新建的问题

    话说笔者最近想用新机子上装的AutoCAD ObjectARX 2018来进行二次开发,兴致勃勃安装了ARX API和向导, 然后打开VS2015,新建项目,无法新建. 折腾了一下,还是没有解决,后面 ...

  6. 关于hadoop集群下Datanode和Namenode无法访问的解决方案

    HDFS架构 HDFS也是按照Master和Slave的结构,分namenode,secondarynamenode,datanode这几个角色. Namenode:是maseter节点,是大领导.管 ...

  7. from nltk.book import * 出错的解决方法

    import nltknltk.download() 在使用上面命令安装了nltk库并运行下载后,再输入from nltk.book import * 往往会出现这样的错误提示: 出现这种错误往往是由 ...

  8. C语言--第七周作业

    一.求交错序列前N项和 1.代码 #include <stdio.h> int main() { int i=1,N; double j=0,sum=0; scanf("%d&q ...

  9. python 二叉堆

    BinaryHeap() 创建一个新的,空的二叉堆. insert(k) 向堆添加一个新项. findMin() 返回具有最小键值的项,并将项留在堆中. delMin() 返回具有最小键值的项,从堆中 ...

  10. 第一部分 linux系统命令

    一.linux系统命令 pwd 当前目录位置 / 根目录 cd (change direcory) cd ..返回上一层目录 ls 显示当前目录下文件 ls -l 显示目录下详细文件信息 ls -lh ...