项目结构搭建【springboot mybatis个人博客系统(一)】

时间:2022-12-20 09:43:54

前面几篇博客,完成了基本的增删改查的功能。我从网上,看到了不少个人博客系统的设计,我也想用所学的知识和技能,自己写一个博客系统。主要就是使用springboot和mybatis开发。一步步来吧,也主要是学习,好让自己熟悉这套开发的流程,能力不足水平有限。我是一名大三学生,要准备找实习了,做一个小项目出来,方便我找实习。
本项目的GitHub地址https://github.com/shinyjunjun/myblog

1、开发前准备

以前使用eclipse,现在用STS(Spring Tool Suite),其实,就是方便spring项目开发的eclipse,使用起来特别方便,一键starter。数据库是mysql,还用了个数据库管理软件navicat。由于用springboot starter新建项目,所以tomcat也不需要搭建了,但我还是下载了,时刻准备着。另外,下载个maven,STS中有自带的maven,但还是用下载的,配置好。另外,我也是最近才刚学习git和github的使用,方便管理。额,大概就这些了。

2、新建项目myblog

使用STS,file->new->spring starter project->输入group和artifact等->选择mysql,mybatis,thymeleaf,web->finish。项目新建完成。

2.1、基本结构

建立好各个包,基本结构如下,这里各个包放什么,就不多说了,后面也会提到,我前面的几篇博客也用到了,还需要什么包也会再添加。
项目结构搭建【springboot mybatis个人博客系统(一)】

2.2、日志文件logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="1 seconds">

<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>

<jmxConfigurator/>

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>logbak: %d{HH:mm:ss.SSS} %logger{36} - %msg%n</pattern>
</encoder>
</appender>

<logger name="org.springframework.web" level="DEBUG"/>
<root level="info">
<appender-ref ref="console"/>
</root>
</configuration>

3、配置Druid数据源

springboot可以直接以spring.datasource为前缀在application.properties文件中配置数据库连接参数。我在阅读了相关博客之后,发现别人都会配置druid数据源,这里我也配置,druid的相关博客

3.1、druid依赖

在pom.xml中加入数据源依赖

        <dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.18</version>
</dependency>

3.2、application.properties

首先在全局的配置文件中配好各项参数

#设置数据源连接参数
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/myblog
spring.datasource.username=root
spring.datasource.password=root

# 下面为连接池的补充设置,应用到上面所有数据源中

# 初始化大小,最小,最大
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20

# 配置获取连接等待超时的时间
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false

# 打开PSCache,并且指定每个连接上PSCache的大小

spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20

# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

#不重启修改thymeleaf
spring.thymeleaf.cache=false

3.3、DruidConfig类

在config包中,添加DruidConfig配置类,用来开启数据源配置

@Configuration

public class DruidConfiguration {

/**
*
* 注册一个StatViewServlet
*
* @return
*
*/


@Bean

public ServletRegistrationBean DruidStatViewServle() {

// org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册.

ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),
"/druid/*");

// 添加初始化参数:initParams

// 白名单:

servletRegistrationBean.addInitParameter("allow", "127.0.0.1");

// IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not
// permitted to view this page.

servletRegistrationBean.addInitParameter("deny", "192.168.1.73");

// 登录查看信息的账号密码.

servletRegistrationBean.addInitParameter("loginUsername", "admin");

servletRegistrationBean.addInitParameter("loginPassword", "123456");

// 是否能够重置数据.

servletRegistrationBean.addInitParameter("resetEnable", "false");

return servletRegistrationBean;

}

/**
*
* 注册一个:filterRegistrationBean
*
* @return
*
*/


@Bean

public FilterRegistrationBean druidStatFilter() {

FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());

// 添加过滤规则.

filterRegistrationBean.addUrlPatterns("/*");

// 添加忽略的格式信息.

filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");

return filterRegistrationBean;

}

}

这样启动项目,输入http://127.0.0.1:8080/druid/login.html,按照配置的登录名和密码即可进入如下界面,可以用来监控项目的运行
项目结构搭建【springboot mybatis个人博客系统(一)】

4、数据库表设计

先建立四个表,博主信息表t_blogger,博客表t_blog,博客类型表t_blogType,评论表t_comment,现在只是简单的建立,t_blogger只设置了id,username,password,email,其余表只设置个id,由于使用navicat是很方便管理数据库的,所以可以后来慢慢加字段。但是,讲道理应该先设计好数据库表,再来开发,能力不足,水平有限,还是一点点来吧。

关系表 说明
t_blogger 博主信息表
t_blog 博客信息表
t_blogType 博客类型表
t_comment 评论信息表

5、业务模型Model层

5.1、Blogger

在domain包中建立POJO,和博主信息表对应

public class Blogger {

private Integer id;
private String username;
private String password;
private String email;
//省略get,set...
}

5.2、BloggerDao

在dao包下建立BloggerDao接口

public interface BloggerDao {

/**
* 根据用户名查询
* @param username
* @return
*/

Blogger selectByUsername(String username);

}

5.3、BloggerMapper

5.3.1

在application.properties下添加

#mybatis配置
#mapper位置
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
#领域类包别名
mybatis.type-aliases-package=com.junjun.myblog.domain
#mybatis配置文件
mybatis.config-location=classpath:mybatis/mybatis-config.xml

5.3.2

在MyblogApplication入口类中添加注解

@MapperScan("com.junjun.myblog.dao")

开启扫描dao中的结构

5.3.3

在resources/mapper文件夹下建立BloggerMapper.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.junjun.myblog.dao.BloggerDao">
<resultMap id="BloggerResult" type="Blogger">
<result property="id" column="id" />
<result property="username" column="username" />
<result property="password" column="password" />
<result property="email" column="email" />
</resultMap>

<select id="selectByUsername" parameterType="string" resultMap="BloggerResult">
select * from t_blogger
where username=#{username}
</select>
</mapper>

5.4、BloggerService

在Service包中建立BloggerService接口,同时在其子包impl中,实现该接口BloggerServiceImpl。

@Service("bloggerService")
public class BloggerServiceImpl implements BloggerService {

@Autowired
BloggerDao bloggerDao;

@Override
public Blogger findByUsername(String username) {
return bloggerDao.selectByUsername(username);
}

}

注意,这里不要丢了@Service(“bloggerService”)注解

6、测试运行

我们已经写好了model层,就可以在测试类中检查findByUsername服务,是否可行。新建工程时,有两个类是自动生成的,一个是MyblogApplication,这是主入口类,一个是MyblogApplicationTests,这个是测试类。在测试类中添加方法

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MyblogApplication.class)
@WebAppConfiguration
public class MyblogApplicationTests {

@Autowired
BloggerService bloggerService;

@Test
public void testSelectByUsername() {
System.out.println(bloggerService.findByUsername("yuzhijun"));
}

}

Run as junit Test即可观察结果
项目结构搭建【springboot mybatis个人博客系统(一)】
恩,没毛病

7、总结

完成了基本的项目搭建,M层初步完成,下一篇我会完成Controller和View层。