zoukankan      html  css  js  c++  java
  • springboot集成mybatis(一)

    MyBatis简介

    MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。它支持定制化SQL、存储过程、高级映射及缓存。是一个轻量级的持久层框架。

    目前主流的持久层框架还是Mybatis、Hibernate及JDBC Template,这些持久层框架各有利弊。

    一、MyBatis注解版(Annotation)

    注解版本可以优雅的去除配置文件,并和springboot集成实现零配置。

    1.springboot集成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文件添加配置信息

     springboot默认读取spring.datasource.xxx属性,初始化DataSource并自动注入sqlSessionFactory

    mybatis.type-aliases-package=com.lianjinsoft.pojo
    
    spring.datasource.driverClassName=com.mysql.jdbc.Driver
    spring.datasource.url=jdbc:mysql://192.168.15.128: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 MybatisApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MybatisApplication.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数据持久层操作方法

     去掉sql配置文件,其实就是将sql语句转移到了Class文件中

    public interface OrderMapper {
        @Insert("INSERT INTO orders(order_no,order_name,amount,add_time) "
                + "VALUES(#{orderNo}, #{orderName}, #{amount}, #{addTime})")
        void addOrder(Order order);
        
        @Delete("DELETE FROM orders WHERE id=#{id}")
        void delOrder(Integer id);
        
        @Update("UPDATE orders SET order_name=#{orderName} WHERE id=#{id}")
        void updOrder(Order order);
    
        @Select("SELECT * FROM orders")
        @Results({
            @Result(property = "orderNo",  column = "order_no"),
            @Result(property = "orderName", column = "order_name"),
            @Result(property = "addTime", column = "add_time"),
        })
        List<Order> queryOrders();
        
        @Select("SELECT * FROM orders WHERE order_no=#{orderNo}")
        @Results({
            @Result(property = "orderNo",  column = "order_no"),
            @Result(property = "orderName", column = "order_name"),
            @Result(property = "addTime", column = "add_time"),
        })
        Order queryOrderByNo(String orderNo);
    }

    6.增加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());
        }
    }

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

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

    8.验证通过,编写Controller

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

    Mybatis注解版本:

    优点:去除了配置文件,实现代码统一管理。

    缺点:增加了Java代码的维护难度,不方便编写sql,可视化程度低。

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

  • 相关阅读:
    关于Linux 上建立生成/添加SSH公钥
    sql随机插入数据--记录
    centos 安装搜狗
    centos yum命令找不到包
    命令行改为图形界面
    CentOS7l联网
    .net mvc 框架实现后台管理系统 3
    .net mvc 框架实现后台管理系统 2
    .net mvc 框架实现后台管理系统
    爬取猫眼数据
  • 原文地址:https://www.cnblogs.com/skychenjiajun/p/8269861.html
Copyright © 2011-2022 走看看