毕业设计-社交平台的设计与实现(一)

166 阅读4分钟

前言

这是我写毕业设计的第一部分,先把依赖和一些配置弄好。 后端使用的框架有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

image.png

4.写一个获得全部User的功能

  1. 写一个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);
   }

}
  1. 在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);
}
  1. 在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);
    }

}
  1. 写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);
    }
}
  1. 统一返回接口
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResponseData {

    //自定义code=0,正常的状态
    private int code = 0;
    //操作成功与否消息
    private String msg ="success";
    //返回单个对象
    private Object data;

}
  1. 测试接口
image.png

5.前端后台的页面修改

1.在\view\system\user.html中修改访问后端接口

image.png

2.修改成对应的返回值

image.png

3.关键字查询修改

image.png

4.在\admin\data\menu.json中添加或者修改自己的页面

image.png

其他说明

  1. mybatis-plus逻辑删除只对自动sql有效
  2. 注意code为0才是正常访问,所以成功的返回值要写0

总结

这一部分内容适用表没有跟其他表关联的,下一部分写有多表联接。