Springboot(二)-----Springboot整合mybatis

在上一个Springboot(一)-----Springboot入门(各种常见问题解决)的基础上,继续。

1.修改pom.xml文件增加数据库配置和mybatis配置。

完整的pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.springboot</groupId>
    <artifactId>first_demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>first_demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <jacoco.version>0.7.5.201505241946</jacoco.version>
        <junit.version>4.12</junit.version>
        <springfox-swagger2.version>2.8.0</springfox-swagger2.version>
        <mysql-connector>5.1.41</mysql-connector>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</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-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.0</version>
        </dependency>
        <!--Swagger2文档-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${springfox-swagger2.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${springfox-swagger2.version}</version>
        </dependency>
        <!--数据库配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--Mybaties-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.1.1</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <skipMain>true</skipMain>
                    <skip>true</skip>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <!--接入jacoco跑单测,覆盖率报告-->
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>${jacoco.version}</version>
                <configuration>
                    <!--<includes>-->
                    <!--<include>**/service/*</include> &lt;!&ndash; 此处表示只测service层 &ndash;&gt;-->
                    <!--</includes>-->
                </configuration>
                <executions>
                    <execution>
                        <id>prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>report</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>post-unit-test</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                        <configuration>
                            <dataFile>target/jacoco.exec</dataFile>
                            <outputDirectory>target/jacoco-ut</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

2.在application.properties中增加数据库配置

注意:输对数据库名称和密码。

可以在本地命令行用命令mysql -uroot -p,输入密码,测试密码是否正确。use TestDatabase(数据库名称),确定数据库名称输入正确

# 数据库配置
mybatis.type-aliases-package=com.neo.entity

spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/****(数据库名称)?characterEncoding=utf-8&useSSL=false&autoReconnect=true
spring.datasource.username = root
spring.datasource.password = ****(密码)

spring.datasource.url = jdbc:mysql://localhost:3306/kimTest?characterEncoding=utf-8&useSSL=false&autoReconnect=true是这样的不要加引号,我脑子一抽加了引号,导致一直报错。

pom.xml中mysql没必要指定版本号,避免有些版本已经不使用,引发问题。

3. 创建数据库表user,

语句:

CREATE TABLE USER(ID INT NOT NULL,NAME varchar(100) NOT NULL,AGE INT NOT NULL );

并插入几条语句。

4.整个项目层级结构如下:

mapper ----使用注解的方法操作mybaties,

domain--实体类的包,

service--处理业务逻辑,

controller--controller层,

FirstDemoApplication--启动类,

application.properties--配置文件。

5.在domain下创建实体类User(有编号,姓名,年龄三个属性):

package com.springboot.domain;

import java.io.Serializable;

/**
 * 用户类
 *
 * @author kimtian
 **/
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 用户编号
     **/
    private int id;
    /**
     * 用户姓名
     **/
    private String name;
    /**
     * 用户年龄
     **/
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

6.在mapper下创建UserMapper interface:

暂时定义两个接口,一个查询全部用户,一个根据id查询用户信息。

如果数据库表字段和User实体字段名称一样,可以不用加这个注解:

 @Results({
            @Result(property = "id", column = "id"),
    })

前面的property表示User实体中的字段名称,column表示的数据库字段名称,形成映射关系。

我设计的表字段名称和User实体字段名称是一致的。为了测试一致的情况下可以不加这个注解,

所以给getAll()方法加了这个注解,getOne()方法没加。两个都是可以运行成功的。

package com.springboot.mapper;

import com.springboot.domain.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * UserMapper
 *
 * @author kimtian
 **/
@Mapper
public interface UserMapper {

    @Select("SELECT * FROM USER")
    @Results({
            @Result(property = "id", column = "id"),
            @Result(property = "name", column = "name"),
            @Result(property = "age", column = "age")
    })
    /**
     * 获取全部用户
     * @return List<User>用户列表
     **/
    List<User> getAll();

    @Select("SELECT * FROM USER WHERE id = #{id}")
    /**
     * 根据id获取用户
     * @param id 用户id
     * @return User 用户
     **/
    User getOne(int id);

}

7.在service下创建UserService接口其实现类UserServiceImpl。世纪中用这部分来处理业务逻辑,

因为是一个demo,所以就直接调用,不再写太多逻辑了。

UserService:

package com.springboot.service;

import com.springboot.domain.User;

import java.util.List;

/**
 * 用户服务类
 *
 * @author kimtian
 **/
public interface UserService {
    /**
     * 获取全部用户
     *
     * @return List<User>用户列表
     **/
     List<User> getUser();

    /**
     * 获取指定用户
     *
     * @param id 用户id
     * @return User 用户
     **/
    User getOne(int id);
}

UserServiceImpl:

记得加@Service("userService")注解。

package com.springboot.service.impl;

import com.springboot.domain.User;
import com.springboot.mapper.UserMapper;
import com.springboot.service.UserService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 用户服务实现类
 *
 * @author kimtian
 **/
@Service("userService")
public class UserServiceImpl implements UserService {
    @Resource
    private UserMapper userMapper;

    @Override
    public List<User> getUser() {
        return userMapper.getAll();
    }

    @Override
    public User getOne(int id) {
        return userMapper.getOne(id);
    }
}

8.在controller包下创建UserController类:

package com.springboot.controller;

import com.springboot.domain.User;
import com.springboot.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

/**
 * Helloworld Controller
 *
 * @author kimtian
 **/
@RestController
public class UserController {
    @Resource
    private UserService userService;

    @GetMapping("/users")
    public List<User> users() {
        return userService.getUser();
    }

    @GetMapping("/getUserById")
    public User getOne() {
        int id = 1;
        return userService.getOne(id);
    }
}

注意加的这个注解:@RestController

以前Spring开发的时候,需要提供json接口的时候要添加Jackjson等相关jar包,要配置spring controller扫描,再在对接的方法添加@ResponseBody注解。

现在只需要添加这个 @RestController注解,默认类中的方法都会以json形式返回。神不神奇。厉不厉害。

9.启动Spring服务。

在浏览器输入http://localhost:8080/getUserById

可以获取到指定id的用户信息:

输入http://localhost:8080/users,可以获取全部的用户信息:

10.顺便安利一个IDEA的良心工具:

选择tools-->HTTP Client-->Test RESTful Web Service

如下图所示:

可以直接请求,切换get,post方法。简单替代postman不是梦。

猜你喜欢

转载自blog.csdn.net/third_/article/details/84798047