ssm(springmvc4+spring4+mybatis3)整合实战-个人博客系统-整合各大框架
ssm框架整合开发实战,这一篇我将介绍如何实现各大框架的整合。
上一篇博客,我介绍了web.xml配置文件,那个文件是项目的核心配置文件,其中其实就包括了整合spring springmvc框架的配置。当然啦,该配置文件还有权限认证安全框架shiro的过滤器配置以及编码过滤器的配置。言归正传,下面就将各大框架的整合配置文件共享出来。
首先是spring、springmvc的配置,spring框架的强大之处在此我就不多说了,起到的作用我就简单说几点吧。
1、其核心部分是IOC与AOP,前者即为所谓的控制反转,用于解决各大组件的依赖问题,也就是解耦的作用;AOP起到监视的作用,俗称面向切面,可以在事务开始前结束后做一层监视;
2、整合hibernate或者mybatis持久层框架,配置事务传播属性,在进行事务操作时起到很好的控制作用(commit,rollback等)。
3、springmvc是spring的一部分,提供的mvc编程模式大大提高了j2EE应用开发的高效性。。。
下面介绍spring的配置applicationContext-spring.xml:
/login=anon
/admin/**=authc
加入jdbc配置jdbc.properties:
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/db_blog?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
#最大连接池数量
maxActive=10
#最小连接池数量
minIdle=2
日志配置log4j.properties:
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
mybatis配置文件mybatis-config.xml:
spring-mvc.xml
最后是springmvc的配置文件:
上面介绍的配置文件中:其实shiro的配置可以单独拿出来的(在这里我就偷懒了)。上面配置文件的内容我已经做了注释了,已看便可知。如果有问题,可以加入后面提供的群讨论。
最后,当然是建立包结构,如下图,大伙就自己建 了:
最后,我就把本系统涉及的各个实体类的代码贴出来吧(其实就是JavaBean了,可以自己建表然后mybatis逆向工程自己生成--至于如何生成,可以看我的博客:mybatis逆向工程)
首先是Blog.java:
package com.steadyjack.entity;
import java.io.Serializable;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
/**
* title:Blog.java
* description:博客实体
* time:2017年1月15日 下午9:22:23
* author:debug-steadyjack
*/
public class Blog implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id; // 编号
private String title; // 博客标题
private String summary; // 摘要
private Date releaseDate; // 发布日期
private Integer clickHit; // 查看次数
private Integer replyHit; // 回复次数
private String content; // 博客内容
private String keyWord; // 关键字 空格隔开
private String contentNoTag; // 博客内容 无网页标签 (Lucene分词用)
private BlogType blogType; // 博客类型
private Integer blogCount; // 博客数量 非博客实际属性,主要是 根据发布日期归档查询博客数量用
private String releaseDateStr; // 发布日期字符串 只取年和月
private List imagesList=new LinkedList(); // 博客里存在的图片 主要用于前端列表展示显示缩略图
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public Date getReleaseDate() {
return releaseDate;
}
public void setReleaseDate(Date releaseDate) {
this.releaseDate = releaseDate;
}
public Integer getClickHit() {
return clickHit;
}
public void setClickHit(Integer clickHit) {
this.clickHit = clickHit;
}
public Integer getReplyHit() {
return replyHit;
}
public void setReplyHit(Integer replyHit) {
this.replyHit = replyHit;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getContentNoTag() {
return contentNoTag;
}
public void setContentNoTag(String contentNoTag) {
this.contentNoTag = contentNoTag;
}
public BlogType getBlogType() {
return blogType;
}
public void setBlogType(BlogType blogType) {
this.blogType = blogType;
}
public Integer getBlogCount() {
return blogCount;
}
public void setBlogCount(Integer blogCount) {
this.blogCount = blogCount;
}
public String getReleaseDateStr() {
return releaseDateStr;
}
public void setReleaseDateStr(String releaseDateStr) {
this.releaseDateStr = releaseDateStr;
}
public String getKeyWord() {
return keyWord;
}
public void setKeyWord(String keyWord) {
this.keyWord = keyWord;
}
public List getImagesList() {
return imagesList;
}
public void setImagesList(List imagesList) {
this.imagesList = imagesList;
}
}
然后是Blogger.java:
package com.steadyjack.entity;
/**
* title:Blogger.java
* description:博主实体
* time:2017年1月15日 下午9:25:23
* author:debug-steadyjack
*/
public class Blogger {
private Integer id; // 编号
private String userName; // 用户名
private String password; // 密码
private String nickName; // 昵称
private String sign; // 个性签名
private String proFile; // 个人简介
private String imageName; // 博主头像
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getProFile() {
return proFile;
}
public void setProFile(String proFile) {
this.proFile = proFile;
}
public String getImageName() {
return imageName;
}
public void setImageName(String imageName) {
this.imageName = imageName;
}
}
接着是BlogType.java:
package com.steadyjack.entity;
import java.io.Serializable;
/**
* title:BlogType.java
* description: 博客类型实体
* time:2017年1月15日 下午9:25:32
* author:debug-steadyjack
*/
public class BlogType implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id; // 编号
private String typeName; // 博客类型名称
private Integer blogCount; // 数量
private Integer orderNo; // 排序 从小到大排序显示
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTypeName() {
return typeName;
}
public void setTypeName(String typeName) {
this.typeName = typeName;
}
public Integer getBlogCount() {
return blogCount;
}
public void setBlogCount(Integer blogCount) {
this.blogCount = blogCount;
}
public Integer getOrderNo() {
return orderNo;
}
public void setOrderNo(Integer orderNo) {
this.orderNo = orderNo;
}
}
然后是Comment.java:
package com.steadyjack.entity;
import java.util.Date;
/**
* title:Comment.java
* description: 评论实体
* time:2017年1月15日 下午9:25:41
* author:debug-steadyjack
*/
public class Comment {
private Integer id; // 编号
private String userIp; // 用户IP
private String content; // 评论内容
private Blog blog; // 被评论的博客
private Date commentDate; // 评论日期
private Integer state; // 审核状态 0 待审核 1 审核通过 2 审核未通过
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserIp() {
return userIp;
}
public void setUserIp(String userIp) {
this.userIp = userIp;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Blog getBlog() {
return blog;
}
public void setBlog(Blog blog) {
this.blog = blog;
}
public Date getCommentDate() {
return commentDate;
}
public void setCommentDate(Date commentDate) {
this.commentDate = commentDate;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
}
接着是Link.java:
package com.steadyjack.entity;
/**
* title:Link.java
* description:友情链接实体
* time:2017年1月15日 下午9:25:58
* author:debug-steadyjack
*/
public class Link {
private Integer id; // 编号
private String linkName; // 链接名称
private String linkUrl; // 链接地址
private Integer orderNo; // 排序序号 从小到大排序
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLinkName() {
return linkName;
}
public void setLinkName(String linkName) {
this.linkName = linkName;
}
public String getLinkUrl() {
return linkUrl;
}
public void setLinkUrl(String linkUrl) {
this.linkUrl = linkUrl;
}
public Integer getOrderNo() {
return orderNo;
}
public void setOrderNo(Integer orderNo) {
this.orderNo = orderNo;
}
}
最后是PageBean.java:
package com.steadyjack.entity;
/**
* title:PageBean.java
* description:分页Model类
* time:2017年1月15日 下午9:26:23
* author:debug-steadyjack
*/
public class PageBean {
private int page; // 第几页
private int pageSize; // 每页记录数
private int start; // 起始页
public PageBean(int page, int pageSize) {
super();
this.page = page;
this.pageSize = pageSize;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getStart() {
return (page-1)*pageSize;
}
}
具体各个实体的属性以及作用我都已经说清楚了!
如果有相关问题:如想找我付费开发其他功能,讨论其中相关问题等等,可以来以下两群找我,我叫debug!
Java开源技术交流:583522159 个人QQ:1948831260