springboot集成mybatis(二)
上篇文章《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(二)的更多相关文章
- SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版)
SpringBoot Mybatis整合(注解版),SpringBoot集成Mybatis(注解版) ================================ ©Copyright 蕃薯耀 2 ...
- BindingException: Invalid bound statement (not found)问题排查:SpringBoot集成Mybatis重点分析
重构代码,方法抛出异常:BindingException: Invalid bound statement (not found) 提示信息很明显:mybatis没有提供某方法 先不解释问题原因和排查 ...
- springboot集成mybatis(一)
MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyB ...
- SpringBoot 集成Mybatis 连接Mysql数据库
记录SpringBoot 集成Mybatis 连接数据库 防止后面忘记 1.添加Mybatis和Mysql依赖 <dependency> <groupId>org.mybati ...
- SpringBoot集成Mybatis并具有分页功能PageHelper
SpringBoot集成Mybatis并具有分页功能PageHelper 环境:IDEA编译工具 第一步:生成测试的数据库表和数据 SET FOREIGN_KEY_CHECKS=0; ...
- 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 ...
- SpringBoot集成Mybatis配置动态数据源
很多人在项目里边都会用到多个数据源,下面记录一次SpringBoot集成Mybatis配置多数据源的过程. pom.xml <?xml version="1.0" encod ...
- SpringBoot集成Mybatis实现多表查询的两种方式(基于xml)
下面将在用户和账户进行一对一查询的基础上进行介绍SpringBoot集成Mybatis实现多表查询的基于xml的两种方式. 首先我们先创建两个数据库表,分别是user用户表和account账户表 ...
- SpringBoot集成MyBatis的Bean配置方式
SpringBoot集成MyBatis的Bean配置方式 SpringBoot是一款轻量级开发的框架,简化了很多原先的xml文件配置方式,接下来就介绍一下如何不适用XML来配置Mybatis spri ...
随机推荐
- oracle 11g数据库 DMP还原数据库
-------------------------- jd :表空间 -------------------------- --本地登陆 cmd下直接执行 sqlplus/as sysdba; --修 ...
- [Chrome 浏览器快捷键]——“你是键盘党吗?”
标签页和窗口快捷键 操作 快捷键 打开新窗口 Ctrl + n 在隐身模式下打开新窗口 Ctrl + Shift + n 打开新的标签页,并跳转到该标签页 Ctrl + t 重新打开最后关闭的标签页, ...
- shell队列实现线程并发控制(转)
需求:并发检测1000台web服务器状态(或者并发为1000台web服务器分发文件等)如何用shell实现? 方案一:(这应该是大多数人都第一时间想到的方法吧) 思路:一个for循环1000次,顺序执 ...
- linux小白成长之路3————更新yum源
[内容指引] 进入目录:cd 查看目录下的内容:ls 重命名备份:mv 从网络下载:wget yum更新:yum update 第一次运行yum安装软件前,建议更新yum. 1.进入yum源目录 命令 ...
- selenium2自动化测试学习笔记(一)
从这周开始学习自动化测试,采用selenium2,目标是在本月学习到appium,并测试公司的真实APP项目. 系统环境:win10 语言:python3.6.4 工具:selenium2 IDE:p ...
- spring框架学习笔记5:SpringAOP示例
1.导包: 导入spring中的这两个包 再导入其他包(网上下载): 2.准备目标对象: package service; public class UserServiceImpl implement ...
- Linux 复习
shift + control + + 终端窗口放大 control + - 终端窗口缩小 ls -alh > laowang.txt 重定向,并覆盖源文件内容 ls -alh >& ...
- 关于java中的数组
前言:最近刚刚看完了<Java编程思想>中关于数组的一章,所有关于Java数组的知识,应该算是了解的差不多了.在此再梳理一遍,以便以后遇到模糊的知识,方便查阅. Java中持有对象的方式, ...
- Docker_部署jenkins(dockerfile实现)
docker+jenkins开始合体! 我用的是ubuntu14.04的基础镜像,具体的这里不做赘述. 我在/tmp/目录下建了一个Dockerfile文件: touch Dockerfile vi ...
- DNS搜索过程
以www.renyi.com为例 一:客户端首先检查本地HOST文件,是否有对应的IP地址,如果有,客户端直接访问,如果没有,则执行下一步. 二:客户端查看本地缓存信息,是否有对应的IP地址,如果有, ...