前言
这是我写毕业设计的第一部分,先把依赖和一些配置弄好。 后端使用的框架有Springboot、Swagger、SA-Token和Mybatis-plus。 前端后台使用Pear Admin Layu框架。
操作
1. 首先在idea中创建Springboot项目,然后在pom.xml添加包
<!--AOP start-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.5.6</version>
</dependency>
<!--AOP end-->
<!--mybatis start 感觉用mybatis-plus方便一点 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
</dependency>
<!--阿里巴巴的连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
<!--mybatis end-->
<!--mysql-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!--lombok 提供了@Set @Put等注解 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--swagger2 start 用来测试接口的-->
<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.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>3.3.5</version>
</dependency>
<!--swagger end-->
<!--生成token jwt-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<!-- 包含密码加密的依赖 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.8</version>
</dependency>
```
<!--redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.配置application.properties
# 端口号
server.port=8082
# mybatis-plus配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/aslife?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
mybatis.mapper-locations=classpath:mapper/*.xml
# mybatis-plus 开启sql日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# mybatis-plus 逻辑删除
# 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
mybatis-plus.global-config.db-config.logic-delete-field=deleted
# 逻辑已删除值(默认为 1)
mybatis-plus.global-config.db-config.logic-delete-value=1
# 逻辑未删除值(默认为 0)
mybatis-plus.global-config.db-config.logic-not-delete-value=0
# 日志级别WARN
logging.level.com.as.server.controller=WARN
# DEBUG
logging.level.com.as.server.mapper =DEBUG
logging.file.name=logs/spring-boot-logging.log
logging.pattern.console=%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n
# Durid
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 配置初始化连接池大小、最小连接数、最大连接数
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=10
spring.datasource.druid.max-active=20
# 配置获取连接等待超时的时间
spring.datasource.druid.max-wait=60000
# 配置一个连接在连接池中的最小生存时间、最大生存时间,超过最大生存时间会被移除,单位毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 配置监控统计拦截的filters
spring.datasource.druid.filters=stat,wall
# 探活、验证链接有效性的查询,新版本默认使用mysqlPing代替
spring.datasource.druid.validation-query=ELECT 1
# 配置从连接池获取连接时和向连接池归还连接时,是否检查连接有效性
# 每次获取或归还连接都检测太频繁,除非特别重要或网络特别不可靠等情况,建议用testWhileIdle + timeBetweenEvictionRunsMillis代替
spring.datasource.druid.test-on-borrow=true
spring.datasource.druid.test-on-return=true
# 配置从连接池获取连接时和向连接池归还连接时,是否检查连接有效性
spring.datasource.druid.test-while-idle=true
# 配置StatViewServlet配置,用于展示Druid的统计信息
# 是否启用StatViewServlet(监控页面)默认值为false(考虑到安全问题默认并未启动,如需启用建议设置密码或白名单以保障安全)
spring.datasource.druid.stat-view-servlet.enabled=true
# deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝。
# 如果allow没有配置或者为空,则允许所有访问
spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
# spring.datasource.druid.stat-view-servlet.deny=xxxx
# 监控页面登陆的用户名
spring.datasource.druid.stat-view-servlet.login-username=admin
# 登陆监控页面所需的密码
spring.datasource.druid.stat-view-servlet.login-password=admin
# WebStatFilter配置
# 是否启用StatFilter默认值false
spring.datasource.druid.filter.stat.enabled=true
# 开启慢sql监控,超过2s 就认为是慢sql,记录到日志中
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=5000
# 开启或关闭druid的sql统计的merge功能,为true时,druid会将相同结构的sql合并为一条
spring.datasource.druid.filter.stat.merge-sql=false
# swagger
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
# redis
#spring.redis.host=localhost
#spring.redis.port=6379
# 这个配置是用来设置上传文件的最大最小值
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=1000MB
3.利用MybatisX插件生成entity、mapper、service
4.写一个获得全部User的功能
- 写一个config配置一下mybatisplus的分页,启动类也要配置mapper扫描和Redis注解
@Configuration
public class MybatisPlusConfig {
/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
@MapperScan("com.aslife.server.mapper")
@SpringBootApplication
@EnableCaching
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
}
}
- 在UserService中添加一个方法
public interface UserService extends IService<User> {
/**
* 获得全部User内容 分页
* @param pageNo
* @param pageNum
* @param keyWords
* @return
*/
public Page<User> getAll(int pageNo, int pageNum ,String keyWords);
}
- 在UserServiceImpl中实现getAll方法
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User>
implements UserService{
@Autowired
private UserMapper mapper;
private QueryWrapper<User> queryWrapper;
@Autowired
private RedisTemplate redisTemplate;
/**
* 获得全部User内容 分页
* @param pageNo
* @param pageNum
* @return
*/
@Override
@Cacheable(cacheNames = "getUserAll")
public Page<User> getAll(int pageNo,int pageNum,String keywords){
//确定页数
Page<User> page = new Page<>(pageNo,pageNum);
//创建一个模糊关键字查询
queryWrapper= Wrappers.query();
queryWrapper.like("name",keywords);
return mapper.selectPage(page,queryWrapper);
}
}
- 写UserController
@RestController
@Api(value = "用户控制器",description = "用户控制器")
@RequestMapping("/api")
@CrossOrigin("*")
public class UserController {
@Autowired
UserService service;
@GetMapping("/getUserAll")
public Page<User> getAll(@ApiParam(value = "起始页面") @RequestParam(required = false,value = "page",defaultValue = "1")Integer pageNo,
@ApiParam(value = "每页记录数") @RequestParam(required = false,value = "pageSize",defaultValue = "10")Integer pageSize,
@ApiParam(value = "关键字") @RequestParam(required = false,value = "keywords",defaultValue ="")String keywords){
return service.getAll(pageNo,pageSize,keywords);
}
}
- 统一返回接口
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResponseData {
//自定义code=0,正常的状态
private int code = 0;
//操作成功与否消息
private String msg ="success";
//返回单个对象
private Object data;
}
- 测试接口
5.前端后台的页面修改
1.在\view\system\user.html中修改访问后端接口
2.修改成对应的返回值
3.关键字查询修改
4.在\admin\data\menu.json中添加或者修改自己的页面
其他说明
- mybatis-plus逻辑删除只对自动sql有效
- 注意code为0才是正常访问,所以成功的返回值要写0