从零开始的springboot项目小demo
创建我的小demo,从零搭建spring boot项目
创建springboot项目
这里选择java版本及项目命名
勾选spring web、mybatis、mysql,右侧红框是已经选择的选项
这里选择项目路径
创建项目后,修改项目结构,这是我整合mybatis及swagger后的项目结构.下面整合mybatis及swagger。
整合mybatis
1.在整合mybatis前需要创建数据库,打开Navicat(数据库管理工具)。
创建数据库,命名为mydemo
新建表,这里主键id可以用int类型,并且把下面的自动递增选上(插入数据时,不需要填写id数据,会自动递增),如果不选需要自己设置一个数据。主键id也可以用varchar类型,利用mybatis-plus的雪花算法生成64位的唯一id。
这里先用int类型,后期再引用mybatis-plus。最后保存,将表命名为user_info。
在idea连接数据库,下面是我修改后的URL,问号前面的mydemo是数据库名称。这里如果没配置时区,会连接不上。
jdbc:mysql://localhost:3306/mydemo?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8
2.配置mybatis环境
application.yml文件:
spring:
profiles:
active: dev
application-dev.yml文件:
#数据库连接池
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydemo?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=GMT%2B8
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
#mybatis映射配置
mybatis:
mapperLocations: classpath*:com/hjj/mydemo/**/xml/*Mapper.xml
#Mybatis输出sql日志
logging:
level:
com.hjj.mydemo: debug
#端口号
server:
port: 8080
端口号默认的是8080,若用8080端口可以不用配置,这里用于展示如何修改端口号
pom文件中需要添加红框这2个依赖(这里是因为之前创建idea项目是勾选了mysql、mybatis的选项,所以他会自动添加),若未勾选需要添加依赖。另外还需在bulid中添加配置
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
3.实体类代码:
@Data
public class UserInfo implements Serializable {
private Integer id;
private String userName;
private Integer sex;
private String userPhone;
private static final long serialVersionUID = 1L;
}
这里的@Data可以为类提供读写功能,从而不用写get、set方法。他还会为类提供 equals()、hashCode()、toString() 方法。需要安装lombok插件和添加以下依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
</dependency>
4.dao层代码:
Mapper文件:
@Mapper
public interface UserInfoMapper {
//插入
int inster(UserInfo userInfo);
//查询
UserInfo selectById(@Param("id") Integer id);
}
这里只写了插入与查询,下面是xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hjj.mydemo.user.mapper.UserInfoMapper">
<resultMap id="BaseResultMap" type="com.hjj.mydemo.user.pojo.UserInfo">
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="user_name" jdbcType="VARCHAR" property="userName"/>
<result column="sex" jdbcType="INTEGER" property="sex"/>
<result column="user_phone" jdbcType="INTEGER" property="userPhone"/>
</resultMap>
<sql id="Base_Column_List">
id,
user_name,
sex,
user_phone
</sql>
<insert id="inster" parameterType="com.hjj.mydemo.user.pojo.UserInfo">
insert into user_info (user_name, sex, user_phone)
values (#{userName}, #{sex}, #{userPhone})
</insert>
<select id="selectById" resultMap="BaseResultMap" parameterType="int">
select
<include refid="Base_Column_List"/>
from user_info
where id = #{id}
</select>
</mapper>
注意这里的namespace,需要与mapper文件对应,也就是mapper包下的UserInfoMapper文件。
红框的id需要与UserInfoMapper的接口名对应
resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。
resultType可以把查询结果封装到pojo类型中,但必须pojo类的属性名和查询到的数据库表的字段名一致。如果sql查询到的字段与pojo的属性名不一致,则需要使用resultMap将字段名和属性名对应起来,进行手动配置封装,将结果映射到pojo中
parameterType是传入参数类型,其包括基本数据类型:(int,string,long,Date)、复杂数据类型:(类和Map)
5.service层代码
public interface UserInfoService{
//插入
int inster(UserInfo userInfo);
//查询
UserInfo selectById(@Param("id") Integer id);
}
6.serviceImpl层代码,注意不要漏了@Service注解
@Service
public class UserInfoServiceImpl implements UserInfoService{
@Resource
public UserInfoMapper userInfoMapper;
@Override
public int inster(UserInfo userInfo) {
return userInfoMapper.inster(userInfo);
}
@Override
public UserInfo selectById(Integer id) {
return userInfoMapper.selectById(id);
}
}
7.Controller层代码
@Api(tags = "用户信息表")
@RestController
public class UserInfoController {
@Autowired
UserInfoService userInfoService;
@ApiOperation(value = "新增", notes = "新增")
@PostMapping(value = "/add")
public int insertUser(@RequestBody UserInfo userInfo) {
return userInfoService.inster(userInfo);
}
@ApiOperation(value = "查询", notes = "查询")
@GetMapping(value = "/select")
public Object selectByid(@RequestParam(name = "id", required = true) Integer id) {
return userInfoService.selectById(id);
}
}
这里如果出现报错,不用担心,是因为没有引入swagger依赖,下面会引入。
@RestController是@Controller+@RequestBody,加上@ResponseBody意思是返回json或xml到前台页面,也就是return里的东西。这时候,即使你在视图解析器InternalResourceViewResolver中配置相应的返回页面也是不起作用的。
如果用@Controller注解,则可以配置视图解析器,return里的是要返回的jsp路径。他们区别在于return后的是返回的内容还是返回的路径。这里因为没有前端页面,所以选择@RestController即可,这也是前后端分离通常写的接口。
@PostMapping、@GetMapping是请求url,其中有post(新建)、get(查询)、delete(删除)、put(更新),这四种请求方式,这是restful风格请求操作资源。后续可能会涉及到幂等性的问题(最常见重复提交和支付就是不幂等)。
@Api和@ApiOperation是swagger中的注解,下面开始集成swagger
整合swagger
swagger可以方便我们测试写好的接口,在前后端分离开发中会经常用到。
1.添加依赖
<!-- 导入Swagger、SwaggerUI依赖 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
pom文件添加swagger相关依赖
2. swagger配置文件
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket swaggerSpringMvcPlugin(){
return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).build();
}
}
在mydemo包下创建config包,主要放一些框架的配置文件比如shiro、redis(后续会集成)等。在config下创建SwaggerConfig。
下面是我的pom依赖和配置:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.hjj</groupId>
<artifactId>mydemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mydemo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</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-starter-web</artifactId>
</dependency>
<!-- 导入Swagger、SwaggerUI依赖 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
启动项目测试接口
这里直接启动项目,不需要像ssm项目那样配置tomcat,因为spring boot有内置的tomcat,访问http://localhost:8080/swagger-ui.html
修改数据
回到idea看控制台可以看到sql语句已经执行成功
在navicat上也能 能看到数据也有这条数据,此插入接口可行,再测试查询接口
刚刚能看到插入的那条数据id为18,在查询接口填入18,点击execute执行
能看到查询结结果。
以上是搭建Springboot项目,及整合mybatis、swagger的全部操作。后续还会整合其他框架及技术,慢慢拓展自己的小demo。
本文地址:https://blog.csdn.net/zhuzai233/article/details/113986010