• SpringBoot学习(二)


    MyBatis是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。spring Boot 是能支持快速创建 Spring 应用的Java框架。本文通过一个例子来学习 Spring Boot 如何集成 MyBatis,而且过程中不需要 XML 配置。


    创建数据库

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

    工程目录结构与依赖配置

    首先新建一个 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>
    复制代码

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

    代码文件内容

    0. 创建配置文件——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

    1. 创建 POJO——entity/User.java

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

    复制代码
    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;    }
    }
    复制代码

    2. 创建一个数据层接口——service/UserService.java

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

    复制代码
    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 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

    3. 创建一个用户服务——service/UserService.java

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

    复制代码
    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 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!";
        }
    }
    复制代码

    4. 常见一个 Web Controller——controller/UserController.java

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

    复制代码
    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);
        }
    }
    复制代码

    5. 创建启动类——main/StartApp.java

    这是一个 spring boot 启动类。代码如下:

    复制代码
    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 接口所在的包

    运行结果

    • 运行 Sql 语句创建数据库表后,运行 StartApp 类。启动成功如下图所示
    • 测试 show 服务,结果如下:
    • 测试 showDao 服务,在输入 URL 时需要将参数打包进 url,结果如下:
      不带参数时,访问错误:

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

    • 测试 insert 服务
    • 再次测试 showDao 服务

    结语

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

    代码库地址:github 地址
    转载 http://blog.csdn.net/xuyuzhuang1991/article/details/54143945
    作者:许玉壮

  • 相关阅读:
    listen and translation exercise 52
    中译英20
    listen and translation exercise 51
    中译英19
    listen and translation exercise 49
    PyQt(Python+Qt)学习随笔:QTableView的showGrid属性
    PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性
    PyQt(Python+Qt)学习随笔:视图中的dragDropMode属性对dragEnabled和acceptDrops属性的影响
    PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled和dragDropMode属性的关系
    PyQt(Python+Qt)学习随笔:QAbstractItemView的verticalScrollMode和horizontalScrollMode属性
  • 原文地址:https://www.cnblogs.com/yujihaia/p/7367583.html
Copyright © 2020-2023  润新知