• 详解Spring Boot集成MyBatis的开发流程


      MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。

      spring Boot是能支持快速创建Spring应用的Java框架。

      本文通过一个例子来学习Spring Boot如何集成MyBatis,而且过程中不需要XML配置。

    1、创建数据库

      本文的例子使用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)
    )

    2、工程目录结构与依赖配置

      首先新建一个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>

      然后创建一下工程目录结构,如下图所示:

    3、代码文件内容

    (1)创建配置文件——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

    (2)创建POJO——entity/User.java

      这是一个POJO,包含了id, name, age三个属性,代码如下:即domain实体类

    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;  }
    }

    (3)创建一个数据层接口——service/UserDao.java

      这是一个Mapper类,代码如下:即dao层

    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<User> 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

    (4)创建一个用户服务——service/UserService.java

      这是一个服务类Bean,提供三个函数功能,代码如下:即service层

    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<User> 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!";
      }
    }

    (5)常见一个Web Controller——controller/UserController.java

      这是一个Spring Web的Controller类,引入了spring-boot-starter-web依赖,代码如下:即action层

    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);
      }
    }

    (6)创建启动类——main/StartApp.java

      这是一个spring boot启动类。代码如下:即main函数

    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接口所在的包

    4、运行结果

      运行Sql语句创建数据库表后,运行StartApp类。启动成功如下图所示

      测试show服务,结果如下:

     

      测试showDao服务,在输入URL时需要将参数打包进url,结果如下:

      不带参数时,访问错误:

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

      测试insert服务

      再次测试showDao服务

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

  • 相关阅读:
    [RxSwift教程]14、其他操作符:delay、materialize、timeout等
    [RxSwift教程]13、连接操作符:connect、publish、replay、multicast
    Java虚拟机类加载机制及双亲委派模式分析
    面试系列-如何设计一个类
    谈谈 MySQL 的 JSON 数据类型
    Java 多线程编程(2-异步中包含同步)
    还堵在高速路上吗?带你进入Scratch世界带你飞
    SQL Server SSIS相关介绍
    SQL Server开启READ_COMMITTED_SNAPSHOT
    SqlServer中select语句引起的死锁
  • 原文地址:https://www.cnblogs.com/goloving/p/9126187.html
Copyright © 2020-2023  润新知