Springboot学习笔记
框架搭建
四层结构
entity层:和 model bean层一样,存放的是实体类,属性值与数据库值保持一致,实现 setter 和 getter 方法。
dao层:即 mapper层,对数据库进行持久化操作,他的方法使针对数据库操作的,基本上用的就是增删改查,他就是个接口,只有方法名,具体实现在mapper.xml中实现。
service层:业务层,存放业务逻辑处理,不直接对数据库进行操作,有接口和接口实现类,提供 controller 层调用方法。
controller层:控制层,导入 service层,调用你service方法,controller通过接受前端传来的参数进行业务操作,在返回一个制定的路径或数据表。在这里开放接口
基础配置:
bean层:
和数据库中表的名称一致即可
public class UserBean {
private Integer userId;
private String user_sex;
private String user_name;
}
需要添加注释:
@Data
@Getter
@Setter
@Component
mapper层:
对数据与数据库的处理定义接口,具体与数据库的交互再xml中实现
记得@Mapper
@Mapper
public interface UserMapper {
public List<UserBean> getUsers() throws Exception;
public void updateUser(UserBean user) throws Exception;
public void delUser(Integer userId) throws Exception;
public void addUser(UserBean user) throws Exception;
}
mapper的xml
写在resources的mapper里面
基本的增删改查,需要如果数据库命名和bean层命名不相同,需要进行转换。
<?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.example.test.mapper.UserMapper">
<resultMap type="com.example.test.bean.UserBean" id="UserBean">
<result property="userName" column="user_name"/>
<result property="userSex" column="user_sex"/>
</resultMap>
<select id="getUsers" resultType="com.example.test.bean.UserBean">
select * from user_test
</select>
<insert id="addUser" parameterType="com.example.test.bean.UserBean">
insert into user_test(userid,user_name,user_sex) values (#{userId},#{userName},#{userSex})
</insert>
<delete id="delUser" parameterType="Integer">
delete from user_test where user_id = #{userId}
</delete>
</mapper>
service层
有接口类和具体实现类
接口类和mapper的接口类一致,具体实现类对数据进行处理和逻辑判断。
需要记得@Service在实现类上
实现类继承接口类
package com.example.test.serviceImpl;
import com.example.test.bean.UserBean;
import com.example.test.mapper.UserMapper;
import com.example.test.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper mapper;
@Override
public List<UserBean> getUsers() throws Exception {
return mapper.getUsers();
}
@Override
public void updateUser(UserBean user) throws Exception {
mapper.updateUser(user);
}
@Override
public void delUser(Integer userId) throws Exception {
mapper.delUser(userId);
}
@Override
public void addUser(UserBean user) throws Exception {
mapper.addUser(user);
}
}
controller层
与前端页面进行交互,接受前端页面的内容,返回到service层中进行逻辑处理,处理完后将结果返回给前端。注意使用的注释类型。
package com.example.test.controller;
import com.example.test.bean.UserBean;
import com.example.test.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
public class UserController {
@Autowired
private UserService service;
@Autowired
private UserBean bean;
@RequestMapping("/showList")
@ResponseBody
public List<UserBean> showList() throws Exception{
List<UserBean> users = service.getUsers();
System.out.println(users);
return users;
}
@RequestMapping("/add")
public String addUser(UserBean user) throws Exception{
service.addUser(user);
return user.getUserId()+"success";
}
@RequestMapping("/del")
public String delUser(Integer userId) throws Exception {
service.delUser(userId);
return "del" + userId + "success";
}
}
统一的返回接口设置
跨域处理
mybatis-plus
自动生成器
配置好相关依赖后,即可自动生成后端代码
配置文件如下
<?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.5.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>contest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>contest</name>
<description>contest project by Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
生成代码如下
package com.example.contest;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.junit.Test;
public class generate {
@Test
public void generate() {
AutoGenerator generator = new AutoGenerator();
// 全局配置
GlobalConfig config = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
// 设置输出到的目录
config.setOutputDir(projectPath + "/src/main/java");
config.setAuthor("kstar");
// 生成结束后是否打开文件夹
config.setOpen(false);
// 全局配置添加到 generator 上
generator.setGlobalConfig(config);
// 数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/contest");
dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("password");
// 数据源配置添加到 generator
generator.setDataSource(dataSourceConfig);
// 包配置, 生成的代码放在哪个包下
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.example.contest");
// 包配置添加到 generator
generator.setPackageInfo(packageConfig);
// 策略配置
StrategyConfig strategyConfig = new StrategyConfig();
// 下划线驼峰命名转换
strategyConfig.setNaming(NamingStrategy.underline_to_camel);
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
// 开启lombok
strategyConfig.setEntityLombokModel(true);
// 开启RestController
strategyConfig.setRestControllerStyle(true);
generator.setStrategy(strategyConfig);
generator.setTemplateEngine(new FreemarkerTemplateEngine());
// 开始生成
generator.execute();
}
}