前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot集成mybatis(二)

springboot集成mybatis(二)

作者头像
名山丶深处
发布2022-05-10 14:38:33
1690
发布2022-05-10 14:38:33
举报
文章被收录于专栏:名山丶深处名山丶深处

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

二、MyBatis配置版(XML)

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

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

1.集成mybatis,增加maven依赖

代码语言:javascript
复制
<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文件添加配置信息

代码语言:javascript
复制
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扫描注解

代码语言:javascript
复制
@MapperScan("com.lianjinsoft.mapper")
@SpringBootApplication
public class MybatisXmlApplication {

	public static void main(String[] args) {
		SpringApplication.run(MybatisXmlApplication.class, args);
	}
}

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

代码语言:javascript
复制
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数据持久层操作方法

代码语言:javascript
复制
public interface OrderMapper {
    List<Order> queryOrders();
    
    Order queryOrderByNo(String orderNo);
    
    void addOrder(Order order);
    
    void delOrder(Integer id);
    
    void updOrder(Order order);
}

6.增加Mybatis主配置文件

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?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测试

代码语言:javascript
复制
@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,此处省略)

代码语言:javascript
复制
@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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档