简单做一个个人博客系统,以博客中的日记模块为例。后台使用easyui。
数据库:personal_blog
日记表:diary
字段:
创建Maven工程
pom.xml文件
org.mybatis
mybatis
3.4.1
mysql
mysql-connector-java
5.1.29
org.slf4j
slf4j-log4j12
1.6.1
org.slf4j
slf4j-api
1.6.1
org.springframework
spring-jdbc
4.3.11.RELEASE
org.springframework
spring-aspects
4.3.11.RELEASE
org.springframework
spring-context
4.3.11.RELEASE
org.mybatis
mybatis-spring
1.3.1
org.springframework
spring-webmvc
4.3.11.RELEASE
jstl
jstl
1.2
com.github.pagehelper
pagehelper
4.2.1
com.fasterxml.jackson.core
jackson-databind
2.7.4
commons-fileupload
commons-fileupload
1.3.3
ssm-blog-admin
src/main/java
**/*.xml
true
src/main/resources
**/*.xml
**/*.properties
实体类pojo
Diary.java
public class Diary {
private Integer id; //主键ID
private Integer userId; //用户ID
private Date createdDate; //日记创建时间
private String content; //日记内容
private String title; //日记标题
private int status; //身份权限,1:有效,0:无效
private String nickname; //昵称
private AdminUser adminUser; //管理员
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
public Date getCreatedDate() {
return createdDate;
}
public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public AdminUser getAdminUser() {
return adminUser;
}
public void setAdminUser(AdminUser adminUser) {
this.adminUser = adminUser;
}
}
DiaryDAO.java
public interface DiaryDAO {
//插入日记方法
void addDiary(Diary diary);
//查询日记列表
List getDiaryList(Diary diary);
//根据id查询日记
Diary getDiaryById(int id);
//更新日记
void updateDiary(Diary diary);
//更新用户权限
void updateDiaryStatus(Diary diary);
}
DiaryMapper.xml
INSERT INTO diary(USER_ID,CREATED_DATE,CONTENT,TITLE,STATUS)
VALUES (#{userId},now(),#{content},#{title},#{status})
update diary set TITLE=#{title},CONTENT=#{content},STATUS=#{status}
where ID=#{id}
update diary set STATUS=0
where ID=#{id}
DiaryService.java
public interface DiaryService {
//插入日记
void addDiary(Diary diary);
//查询日记列表并分页
PageInfo getDiaryList(Diary diary,int pageNum,int pageSize);
//根据id查询,用于回显
Diary getDiaryById(Integer id);
//更新日记
void updateDiary(Diary diary);
//更改权限
void updateDiaryStatus(int id);
}
service层 DiarySrviceImpl.java
//加service注解
@Service
public class DiaryServiceImpl implements DiaryService {
// 当Spring发现@Autowired注解时,将自动在代码上下文中找到和其匹配(默认是类型匹配)的Bean,
// 并自动注入到相应的地方去。
@Autowired
private DiaryDAO diaryDAO;
//插入日记
@Override
public void addDiary(Diary diary) {
diaryDAO.addDiary(diary);
}
//查询日记列表并分页
@Override
public PageInfo getDiaryList(Diary diary, int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
List diaryList = diaryDAO.getDiaryList(diary);
PageInfo pageInfo = new PageInfo<>(diaryList);
return pageInfo;
}
//根据id查询日记
@Override
public Diary getDiaryById(Integer id) {
return diaryDAO.getDiaryById(id);
}
//更新日记
@Override
public void updateDiary(Diary diary) {
diaryDAO.updateDiary(diary);
}
//更新身份权限
@Override
public void updateDiaryStatus(int id) {
Diary diary = diaryDAO.getDiaryById(id);
diaryDAO.updateDiaryStatus(diary);
}
}
controller层
DiaryController.java
//加controller注解,处理由DispatcherServlet分发的请求
@Controller
//定义url
@RequestMapping("/diary.html")
public class DiaryController {
@Autowired
private DiaryService diaryService;
@RequestMapping(params = "act=edit")
@ResponseBody //这个注解表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用。
//添加和修改,一个方法实现两个功能
public Map edit(Diary diary){
if (diary.getId() == null) {
//从session中获取user的信息,后面写完登录再改
diary.setUserId(2);
diaryService.addDiary(diary);
}else{
//修改
diaryService.updateDiary(diary);
}
return JsonUtils.getSuccessMessage("编辑成功",null);
}
//查询日记列表并分页
@RequestMapping(params = "act=list")
@ResponseBody
public Map list(Diary diary, int page, int rows){
PageInfo pageInfo = diaryService.getDiaryList(diary, page, rows);
return JsonUtils.getDatagridPagerResult(pageInfo.getTotal(),pageInfo.getList());
}
//根据id查询所有,用于点击修改后回显
@RequestMapping(params = "act=get")
public ModelAndView getDiary(Integer id){
Diary diary = null;
if (id!=null){
diary = diaryService.getDiaryById(id);
}
return new ModelAndView("diary_edit","diary",diary);
}
//文件上传
@Value("${DIARY_IMAGE_DIR}")
private String DIARY_IMAGE_DIR;
@Value("${DIARY_IMAGE_URL}")
private String DIARY_IMAGE_URL;
@RequestMapping(params = "act=upload")
@ResponseBody
public String upload(MultipartFile file) {
return JsonUtils.fileUpload(file,DIARY_IMAGE_DIR,DIARY_IMAGE_URL);
}
//删除(修改权限)
@RequestMapping(params = "act=delete")
@ResponseBody
public Map delete(int id){
Diary diary = diaryService.getDiaryById(id);
if (diary.getStatus()!=0){
diaryService.updateDiaryStatus(id);
}
return JsonUtils.getSuccessMessage("删除权限成功",null);
}
}
JsonUtils.java
public class JsonUtils {
public static Map getSuccessMessage(String message,Object other){
Map result = new HashMap<>();
result.put("status", true);
result.put("message", "添加成功");
result.put("other",other);
return result;
}
public static Map getErrorMessage(String message,Object other){
Map result = new HashMap<>();
result.put("status", false);
result.put("message", "添加成功");
result.put("other",other);
return result;
}
public static Map getDatagridPagerResult(long total, List list){
Map result = new HashMap<>();
result.put("total",total); //总条数
result.put("rows",list); //返回的list数据
return result;
}
public static String fileUpload(MultipartFile file,String DIR,String URL){
String oldFileName = file.getOriginalFilename();
String extName = oldFileName.substring(oldFileName.lastIndexOf("."));
String newFileName = System.currentTimeMillis()+extName;
try {
FileUtils.copyInputStreamToFile(file.getInputStream(),new File(DIR,newFileName));
return "{\"error\":0,\"url\":\"" + URL + newFileName + "\"}";
} catch (IOException e) {
e.printStackTrace();
return "{\"error\":1}";
}
}
}
db.properties:配置mysql
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/personal_blog?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456
log4j.properties:输出日志信息
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
#begin
#for normal test,delete when online
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
resourse.properties:配置文件上传路径和url地址
DIARY_IMAGE_DIR=E:/upload/diary/
DIARY_IMAGE_URL=http://localhost:8080/upload/diary/
dialect=mysql
reasonable=true
WEB-INF
springMVC-servlet.xml
contextConfigLocation
classpath:spring-config.xml
org.springframework.web.context.ContextLoaderListener
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
CharacterEncodingFilter
/*
springMVC
org.springframework.web.servlet.DispatcherServlet
springMVC
*.html
/blog/list.html
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--panel面板可以设置整体的高度--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--panel面板可以设置整体的高度--%>