在上一个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> <!– 此处表示只测service层 –>-->
<!--</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不是梦。