zoukankan      html  css  js  c++  java
  • 详解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几乎不用任何配置工作,能有效加快开发效率!

  • 相关阅读:
    poj 2584 T-Shirt Gumbo (二分匹配)
    hdu 1757 A Simple Math Problem (乘法矩阵)
    矩阵之矩阵乘法(转载)
    poj 2239 Selecting Courses (二分匹配)
    hdu 3661 Assignments (贪心)
    hdu 1348 Wall (凸包)
    poj 2060 Taxi Cab Scheme (二分匹配)
    hdu 2202 最大三角形 (凸包)
    hdu 1577 WisKey的眼神 (数学几何)
    poj 1719 Shooting Contest (二分匹配)
  • 原文地址:https://www.cnblogs.com/goloving/p/9126187.html
Copyright © 2011-2022 走看看