学完springboot也跟着视频敲过代码,但是从来没有自己试过。所以自己从零搭建项目让自己成长。
写着文章主要目的是让哥哥批评使用,弟弟在这一年内学的东西太多,忘的也很多,眼高手低代码敲的很少,视频看的很多。现在第一次自己全动手敲,希望哥哥们千万别手下留情,我这人你不喷我,我没动力。也希望有和我一样的同学和我一起交流共同进步。自我感觉此项目还挺适合看springboot同学看看。
准备前期就拿blog项目开头,开始只做一些简单的登录、查询文章,说实话这些看视频一天用不完就能写完,自己写差不多也能一天左右。所以接下来在此小项目基础上加上jwt+shiro/SpringSecurity+···,争取日及庞大。
数据库设计
设计的非常简单,一个小项目不需这么复杂的数据库吧。也是自己能力受限,自学的时候没有往深层次学,导致现在忘了就去看看之前的代码,听我的学一门技术一定要入门到入坟。
表很简单,入门的应该一看就懂。
-
user表
id username img(头像) email status create password -
blog表
user_id title id description created status
创建项目
- 直接idea创建springboot项目,然后选一下springWWeb,mp,mysql
pom
也没什么基本在创建项目上选了那几项基本就不用添加,因为不会写前端项目所以用Swagger做api文档,看了很多学长代码都用这个。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<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.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-bean-validators</artifactId>
<version>3.0.0</version>
</dependency>
<!-- Swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
配置文件
# 应用服务 WEB 访问端口
server.port=8081
# 应用名称
spring.application.name=blog
# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据源名称
spring.datasource.name=defaultDataSource
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/blog?serverTimezone=UTC
# 数据库用户名&密码:
spring.datasource.username=***
spring.datasource.password=***
#下面这些内容是为了让MyBatis映射
#指定Mybatis的Mapper文件
mybatis.mapper-locations=classpath:mapper/*xml
#指定Mybatis的实体目录
mybatis.type-aliases-package=com.wzj.mybatis.dao
#mybatis映射(比如我的表示m_user,所以我要告诉他有m_)
mybatis-plus.global-config.db-config.table-prefix=m_
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
-
实体类也不列出来了,加上这几个注解差不多
@Data @AllArgsConstructor @NoArgsConstructormapper和service都有mybatisPuls的注解好使的一批,记得去学习这门技术,简直是无敌,省下很多手写代码。
-
mapper
@Mapper public interface BlogMapper extends BaseMapper<Blog> { } @Mapper public interface UserMapper extends BaseMapper<User> { User findByUsername(@Param("username") String username,@Param("password") String password); } -
service
@Service public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements BlogService {} @Service public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {
统一结果处理,很简单这个直接用就可以
@Data
public class Result implements Serializable {
private int code; // 200是正常,非200表示异常
private String msg;
private Object data;
public static Result success(Object data) {
return succ(200, "操作成功", data);
}
public static Result success(int code, String msg, Object data) {
Result r = new Result();
r.setCode(code);
r.setMsg(msg);
r.setData(data);
return r;
}
public static Result fail(String msg) {
return fail(400, msg, null);
}
public static Result fail(String msg, Object data) {
return fail(400, msg, data);
}
public static Result fail(int code, String msg, Object data) {
Result r = new Result();
r.setCode(code);
r.setMsg(msg);
r.setData(data);
return r;
}
}
Swagger配置
我是个懒人,毕竟项目也只有自己看,所以我很少在controller上面写这个注解,自己清楚几个,还有就是也可以用postman,idea插件中的RestfulTool。这里我有建了一个配置文件和原来文件一样application-dev.properties,让Swagger只在生产环境中用。
使用Swagger3.0访问地址为http://localhost:8081/swagger-ui/index.html
@Configuration
@EnableSwagger2 //开启
public class SwaggerConfig {
@Bean
public Docket docket(Environment environment){
//只想让swagger在生产环境中使用
Profiles profiles = Profiles.of("dev","test");
//获取环境
boolean b = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enable(b)//
.groupName("博客")
.select()
//扫描包
.apis(RequestHandlerSelectors.basePackage("com.wzj.controller"))
.build();
}
private ApiInfo apiInfo(){
Contact contact = new Contact("王乐乐", "www.meiyou.com", "1819220754@qq.com");
return new ApiInfo("王乐乐API", "萧碧宰执", "v1.0", "urn:tos", contact, "Apache 2.0", "http://www.apache.org/licenses/LICENSE-2.0", new ArrayList());
}
}
mybatisPuls配置
@Configuration
@EnableTransactionManagement//开启事务管理
@MapperScan("com.wzj.dao.mapper")//扫包mapper
public class MybatisPlusConfig {
//分页插件
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
- 最后记得写个测试controller测试一下程序,出错可以联系QQ1819220754