ssm(springmvc4+spring4+mybatis3)整合实战-个人博客系统-dao与service层等组件整合

ssm(springmvc4+spring4+mybatis3)整合实战-个人博客系统-dao与service层等组件整合

    这一篇博客,我把mybatis逆向工程生成的dao与service层分享出来,另外,我在第一篇博客时贴出的web.xml中配置了一个InitComponent,即初始化组件:

 


	
		com.steadyjack.service.impl.InitComponent
	

    这个组件的作用在于启动时获取系统首页所需要的各个model的信息,加快首页index.html的访问速度。下面先贴出这个组件的源码吧:

 

    在package com.steadyjack.service.impl 下建立 InitComponent.java类:

 

package com.steadyjack.service.impl;

import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

import com.steadyjack.entity.Blog;
import com.steadyjack.entity.BlogType;
import com.steadyjack.entity.Blogger;
import com.steadyjack.entity.Link;
import com.steadyjack.service.BlogService;
import com.steadyjack.service.BlogTypeService;
import com.steadyjack.service.BloggerService;
import com.steadyjack.service.LinkService;

/**
 * title:InitComponent.java
 * description:初始化组件 把博主信息 根据博客类别分类信息 根据日期归档分类信息 
 * 		                   存放到application中,用以提供页面请求性能
 * time:2017年1月16日 下午10:36:50
 * author:debug-steadyjack
 */
@Component
public class InitComponent implements ServletContextListener,ApplicationContextAware{

	//其实这个就是spring的IOC容器-spring上下文应用程序
	private static ApplicationContext applicationContext;
	
	@SuppressWarnings("static-access")
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		this.applicationContext=applicationContext;
	}

	public void contextInitialized(ServletContextEvent servletContextEvent) {
		//application:整个应用的上下文应用程序,可以往此对象中绑定一些经常需要访问的对象
		ServletContext application=servletContextEvent.getServletContext();
		
		//Spring IOC容器中获取各个bean
		BloggerService bloggerService=(BloggerService) applicationContext.getBean("bloggerService");
		Blogger blogger=bloggerService.find(); // 查询博主信息
		blogger.setPassword(null);
		application.setAttribute("blogger", blogger);
		
		BlogTypeService blogTypeService=(BlogTypeService) applicationContext.getBean("blogTypeService");
		List blogTypeCountList=blogTypeService.countList(); // 查询博客类别以及博客的数量
		application.setAttribute("blogTypeCountList", blogTypeCountList);
		
		BlogService blogService=(BlogService) applicationContext.getBean("blogService");
		List blogCountList=blogService.countList(); // 根据日期分组查询博客
		application.setAttribute("blogCountList", blogCountList);
		
		LinkService linkService=(LinkService) applicationContext.getBean("linkService");
		List linkList=linkService.list(null); // 查询所有的友情链接信息
		application.setAttribute("linkList", linkList);
		
		String ctx=application.getRealPath("/");
		System.out.println("根路径: "+ctx);
		application.setAttribute("ctx", ctx);
	}

	public void contextDestroyed(ServletContextEvent sce) {
	}

}


     然后,会发现这个初始化组件InitComponent.java用到了ioc容器的各个service组件,故而,下面建立service层各个组件:

 

     在package com.steadyjack.service下建立BloggerService.java,BlogService.java,BlogTypeService.java,CommentService.java,LinkService.java各个interface(接口类),源码如下:

     BloggerService.java接口类:

 

package com.steadyjack.service;

import com.steadyjack.entity.Blogger;

/**
 * title:BloggerService.java
 * description:博主Service接口
 * time:2017年1月16日 下午10:00:20
 * author:debug-steadyjack
 */
public interface BloggerService {

	/**
	 * 查询博主信息
	 * @return
	 */
	public Blogger find();
	
	/**
	 * 通过用户名查询用户
	 * @param userName
	 * @return
	 */
	public Blogger getByUserName(String userName);
	
	/**
	 * 更新博主信息
	 * @param blogger
	 * @return
	 */
	public Integer update(Blogger blogger);
}

    BlogService.jave接口类:

 

 

package com.steadyjack.service;

import java.util.List;
import java.util.Map;

import com.steadyjack.entity.Blog;

/**
 * title:BlogService.java
 * description:博客Service接口
 * time:2017年1月16日 下午10:35:32
 * author:debug-steadyjack
 */
public interface BlogService {

	/**
	 * 根据日期月份分组查询
	 * @return
	 */
	public List countList(); 
	
	/**
	 * 分页查询博客
	 * @return
	 */
	public List list(Map map);
	
	/**
	 * 获取总记录数
	 * @param map
	 * @return
	 */
	public Long getTotal(Map map);
	
	/**
	 * 通过Id查找实体
	 * @param id
	 * @return
	 */
	public Blog findById(Integer id);
	
	/**
	 * 更新博客信息
	 * @param blog
	 * @return
	 */
	public Integer update(Blog blog); 
	
	/**
	 * 获取上一个博客
	 * @param id
	 * @return
	 */
	public Blog getLastBlog(Integer id);
	
	/**
	 * 获取下一个博客
	 * @param id
	 * @return
	 */
	public Blog getNextBlog(Integer id);
	
	/**
	 * 添加博客信息
	 * @param blog
	 * @return
	 */
	public Integer add(Blog blog);
	
	/**
	 * 删除博客信息
	 * @param id
	 * @return
	 */
	public Integer delete(Integer id);
	
	/**
	 * 查询指定的博客类别下的博客数量
	 * @param typeId
	 * @return
	 */
	public Integer getBlogByTypeId(Integer typeId);
}


    BlogTypeService.java接口类:

 

 

package com.steadyjack.service;

import java.util.List;
import java.util.Map;

import com.steadyjack.entity.BlogType;

/**
 * title:BlogTypeService.java
 * description:博客类型Service接口
 * time:2017年1月16日 下午10:03:06
 * author:debug-steadyjack
 */
public interface BlogTypeService {

	/**
	 * 查询所有博客类型 以及对应的博客数量
	 * @return
	 */
	public List countList();
	
	/**
	 * 分页查询博客类别信息
	 * @param map
	 * @return
	 */
	public List list(Map map);
	
	/**
	 * 获取总记录数
	 * @param map
	 * @return
	 */
	public Long getTotal(Map map);
	
	/**
	 * 添加博客类别信息
	 * @param blogType
	 * @return
	 */
	public Integer add(BlogType blogType);
	
	/**
	 * 修改博客类别信息
	 * @param blogType
	 * @return
	 */
	public Integer update(BlogType blogType);
	
	/**
	 * 删除博客类别信息
	 * @param id
	 * @return
	 */
	public Integer delete(Integer id);
}


    CommentService.java接口类:

 

 

package com.steadyjack.service;

import java.util.List;
import java.util.Map;

import com.steadyjack.entity.Comment;

/**
 * title:CommentService.java
 * description:评论Service接口
 * time:2017年1月16日 下午10:35:42
 * author:debug-steadyjack
 */
public interface CommentService {

	/**
	 * 添加评论
	 * @param comment
	 * @return
	 */
	public int add(Comment comment);
	
	/**
	 * 修改评论
	 * @param comment
	 * @return
	 */
	public int update(Comment comment);
	
	/**
	 * 查找用户评论信息
	 * @param map
	 * @return
	 */
	public List list(Map map);
	
	
	/**
	 * 获取总记录数
	 * @param map
	 * @return
	 */
	public Long getTotal(Map map);
	
	/**
	 * 删除评论信息
	 * @param id
	 * @return
	 */
	public Integer delete(Integer id);
}


     LinkService.java接口类:

 

 

package com.steadyjack.service;

import java.util.List;
import java.util.Map;

import com.steadyjack.entity.Link;

/**
 * title:LinkService.java
 * description:友情链接Service接口
 * time:2017年1月16日 下午10:35:55
 * author:debug-steadyjack
 */
public interface LinkService {

	/**
	 * 添加友情链接
	 * @param link
	 * @return
	 */
	public int add(Link link);
	
	/**
	 * 修改友情链接
	 * @param link
	 * @return
	 */
	public int update(Link link);
	
	/**
	 * 查找友情链接信息
	 * @param map
	 * @return
	 */
	public List list(Map map);	
	
	/**
	 * 获取总记录数
	 * @param map
	 * @return
	 */
	public Long getTotal(Map map);
	
	/**
	 * 删除友情链接
	 * @param id
	 * @return
	 */
	public Integer delete(Integer id);
}


     各个service的实现类建立在package com.steadyjack.service.impl目录下,各个实现类源码如下:

 

     BloggerServiceImpl.java实现类:

 

package com.steadyjack.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.steadyjack.dao.BloggerDao;
import com.steadyjack.entity.Blogger;
import com.steadyjack.service.BloggerService;

/**
 * title:BloggerServiceImpl.java
 * description:博主Service实现类
 * time:2017年1月16日 下午10:36:10
 * author:debug-steadyjack
 */
@Service("bloggerService")
public class BloggerServiceImpl implements BloggerService{

	@Resource
	private BloggerDao bloggerDao;

	public Blogger find() {
		return bloggerDao.find();
	}

	public Blogger getByUserName(String userName) {
		return bloggerDao.getByUserName(userName);
	}

	public Integer update(Blogger blogger) {
		return bloggerDao.update(blogger);
	}
	
	
}


    BlogServiceImpl.java实现类如下:

 

 

package com.steadyjack.service.impl;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.steadyjack.dao.BlogDao;
import com.steadyjack.entity.Blog;
import com.steadyjack.service.BlogService;

/**
 * title:BlogServiceImpl.java
 * description:博客Service实现类
 * time:2017年1月16日 下午10:36:23
 * author:debug-steadyjack
 */
@Service("blogService")
public class BlogServiceImpl implements BlogService{

	@Resource
	private BlogDao blogDao;
	
	public List countList() {
		return blogDao.countList();
	}

	public List list(Map map) {
		return blogDao.list(map);
	}

	public Long getTotal(Map map) {
		return blogDao.getTotal(map);
	}

	public Blog findById(Integer id) {
		return blogDao.findById(id);
	}

	public Integer update(Blog blog) {
		return blogDao.update(blog);
	}

	public Blog getLastBlog(Integer id) {
		return blogDao.getLastBlog(id);
	}

	public Blog getNextBlog(Integer id) {
		return blogDao.getNextBlog(id);
	}

	public Integer add(Blog blog) {
		return blogDao.add(blog);
	}

	public Integer delete(Integer id) {
		return blogDao.delete(id);
	}

	public Integer getBlogByTypeId(Integer typeId) {
		return blogDao.getBlogByTypeId(typeId);
	}
}


     BlogTypeServiceImpl.java实现类:

 

 

package com.steadyjack.service.impl;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.steadyjack.dao.BlogTypeDao;
import com.steadyjack.entity.BlogType;
import com.steadyjack.service.BlogTypeService;

/**
 * title:BlogTypeServiceImpl.java
 * description:博客类型Service实现类
 * time:2017年1月16日 下午10:36:32
 * author:debug-steadyjack
 */
@Service("blogTypeService")
public class BlogTypeServiceImpl implements BlogTypeService{

	@Resource
	private BlogTypeDao blogTypeDao;
	
	public List countList() {
		return blogTypeDao.countList();
	}

	public List list(Map map) {
		return blogTypeDao.list(map);
	}

	public Long getTotal(Map map) {
		return blogTypeDao.getTotal(map);
	}

	public Integer add(BlogType blogType) {
		return blogTypeDao.add(blogType);
	}

	public Integer update(BlogType blogType) {
		return blogTypeDao.update(blogType);
	}

	public Integer delete(Integer id) {
		return blogTypeDao.delete(id);
	}

}


     CommentServiceImpl.java实现类:

 

 

package com.steadyjack.service.impl;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.steadyjack.dao.CommentDao;
import com.steadyjack.entity.Comment;
import com.steadyjack.service.CommentService;

/**
 * title:CommentServiceImpl.java
 * description:评论Service实现类
 * time:2017年1月16日 下午10:36:41
 * author:debug-steadyjack
 */
@Service("commentService")
public class CommentServiceImpl implements CommentService{

	@Resource
	private CommentDao commentDao;
	
	public int add(Comment comment) {
		return commentDao.add(comment);
	}

	public List list(Map map) {
		return commentDao.list(map);
	}

	public Long getTotal(Map map) {
		return commentDao.getTotal(map);
	}

	public Integer delete(Integer id) {
		return commentDao.delete(id);
	}

	public int update(Comment comment) {
		return commentDao.update(comment);
	}

}


     LinkServiceImpl.java实现类:

 

 

package com.steadyjack.service.impl;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.steadyjack.dao.LinkDao;
import com.steadyjack.entity.Link;
import com.steadyjack.service.LinkService;

/**
 * title:LinkServiceImpl.java
 * description:友情链接Service实现类
 * time:2017年1月16日 下午10:37:15
 * author:debug-steadyjack
 */
@Service("linkService")
public class LinkServiceImpl implements LinkService{

	@Resource
	private LinkDao linkDao;
	
	public int add(Link link) {
		return linkDao.add(link);
	}

	public int update(Link link) {
		return linkDao.update(link);
	}

	public List list(Map map) {
		return linkDao.list(map);
	}

	public Long getTotal(Map map) {
		return linkDao.getTotal(map);
	}

	public Integer delete(Integer id) {
		return linkDao.delete(id);
	}

}


     同样的道理,在service.impl中的各个实现类中,自然用到了mapper类(即dao层的类):包括dao与xml配置文件,下面也贴出来。

 

     首先是package com.steadyjack.dao的各个dao层类:

     BlogDao.java:

 

package com.steadyjack.dao;

import java.util.List;
import java.util.Map;

import com.steadyjack.entity.Blog;

/**
 * title:BlogDao.java
 * description: 博客Dao接口
 * time:2017年1月16日 下午10:34:19
 * author:debug-steadyjack
 */
public interface BlogDao {

	/**
	 * 根据日期月份分组查询 - 月份-当年博客的数量
	 * @return
	 */
	public List countList();
	
	/**
	 * 分页查询博客
	 * @return
	 */
	public List list(Map map);
	
	/**
	 * 获取总记录数
	 * @param map
	 * @return
	 */
	public Long getTotal(Map map);
	
	/**
	 * 通过Id查找实体
	 * @param id
	 * @return
	 */
	public Blog findById(Integer id);
	
	/**
	 * 更新博客信息
	 * @param blog
	 * @return
	 */
	public Integer update(Blog blog); 
	
	/**
	 * 获取上一个博客
	 * @param id
	 * @return
	 */
	public Blog getLastBlog(Integer id);
	
	/**
	 * 获取下一个博客
	 * @param id
	 * @return
	 */
	public Blog getNextBlog(Integer id);
	
	/**
	 * 添加博客信息
	 * @param blog
	 * @return
	 */
	public Integer add(Blog blog);
	
	/**
	 * 删除博客信息
	 * @param id
	 * @return
	 */
	public Integer delete(Integer id);
	
	/**
	 * 查询指定的博客类别下的博客数量
	 * @param typeId
	 * @return
	 */
	public Integer getBlogByTypeId(Integer typeId);
	
	
}


    BloggerDao.java:

 

 

package com.steadyjack.dao;

import com.steadyjack.entity.Blogger;

/**
 * title:BloggerDao.java
 * description:博主Dao接口
 * time:2017年1月16日 下午10:16:44
 * author:debug-steadyjack
 */
public interface BloggerDao {

	/**
	 * 查询博主信息
	 * @return
	 */
	public Blogger find();
	
	/**
	 * 通过用户名查询用户
	 * @param userName
	 * @return
	 */
	public Blogger getByUserName(String userName);
	
	/**
	 * 更新博主信息
	 * @param blogger
	 * @return
	 */
	public Integer update(Blogger blogger);
}


    BlogTypeDao.java:

 

 

package com.steadyjack.dao;

import java.util.List;
import java.util.Map;

import com.steadyjack.entity.BlogType;


/**
 * title:BlogTypeDao.java
 * description:博客类型Dao接口
 * time:2017年1月16日 下午10:11:14
 * author:debug-steadyjack
 */
public interface BlogTypeDao {

	/**
	 * 查询所有博客类型 以及对应的博客数量
	 * @return
	 */
	public List countList();
	
	/**
	 * 通过id查询博客类型
	 * @param id
	 * @return
	 */
	public BlogType findById(Integer id);
	
	/**
	 * 分页查询博客类别信息
	 * @param map
	 * @return
	 */
	public List list(Map map);
	
	/**
	 * 获取总记录数
	 * @param map
	 * @return
	 */
	public Long getTotal(Map map);
	
	/**
	 * 添加博客类别信息
	 * @param blogType
	 * @return
	 */
	public Integer add(BlogType blogType);
	
	/**
	 * 修改博客类别信息
	 * @param blogType
	 * @return
	 */
	public Integer update(BlogType blogType);
	
	/**
	 * 删除博客类别信息
	 * @param id
	 * @return
	 */
	public Integer delete(Integer id);
}


    CommentDao.java:

 

 

package com.steadyjack.dao;

import java.util.List;
import java.util.Map;

import com.steadyjack.entity.Comment;

/**
 * title:CommentDao.java
 * description:评论Dao接口
 * time:2017年1月16日 下午10:28:17
 * author:debug-steadyjack
 */
public interface CommentDao {

	/**
	 * 添加评论
	 * @param comment
	 * @return
	 */
	public int add(Comment comment);
	
	/**
	 * 修改评论
	 * @param comment
	 * @return
	 */
	public int update(Comment comment);
	
	/**
	 * 查找用户评论信息
	 * @param map
	 * @return
	 */
	public List list(Map map);
	
	/**
	 * 获取总记录数
	 * @param map
	 * @return
	 */
	public Long getTotal(Map map);
	
	/**
	 * 删除评论信息
	 * @param id
	 * @return
	 */
	public Integer delete(Integer id);
	
	
}


    LinkDao.java:

 

 

package com.steadyjack.dao;

import java.util.List;
import java.util.Map;

import com.steadyjack.entity.Link;

/**
 * title:LinkDao.java
 * description:友情链接Dao接口
 * time:2017年1月16日 下午10:31:28
 * author:debug-steadyjack
 */
public interface LinkDao {

	/**
	 * 添加友情链接
	 * @param link
	 * @return
	 */
	public int add(Link link);
	
	/**
	 * 修改友情链接
	 * @param link
	 * @return
	 */
	public int update(Link link);
	
	/**
	 * 查找友情链接信息
	 * @param map
	 * @return
	 */
	public List list(Map map);	
	
	/**
	 * 获取总记录数
	 * @param map
	 * @return
	 */
	public Long getTotal(Map map);
	
	/**
	 * 删除友情链接
	 * @param id
	 * @return
	 */
	public Integer delete(Integer id);
}


    最后是mapper配置文件,包目录为com.steadyjack.mappers。

 

    BloggerMapper.xml:

 





	
		
		
		
		
		
		
		
	
	
	
	
	
	
	
		update tb_blogger
		
			
				password=#{password},
			
			
				nickName=#{nickName},
			
			
				sign=#{sign},
			
			
				proFile=#{proFile},
			
			
				imageName=#{imageName},
			
		
		where id=1
	
	
 


    BlogMapper.xml:

 

 





	
		
		
		
		
		
		
		
		
		
	
	
	
	
	
	
	
	
	
	
	
		update tb_blog
		
			
				title=#{title},
			
			
				summary=#{summary},
			
			
				content=#{content},
			
			
				typeId=#{blogType.id},
			
			
				clickHit=#{clickHit},
			
			
				replyHit=#{replyHit},
			
			
				keyWord=#{keyWord},
			
		
		where id=#{id}
	
	
	
	
	
	
	
	
		insert into tb_blog values(null,#{title},#{summary},now(),0,0,#{content},#{blogType.id},#{keyWord})
	
	
	
		delete from tb_blog where id=#{id}
	
	
	
 


    BlogTypeMapper.xml:

 

 





	
		
		
		
		
	
	
	
	
	
	
	
	
	
	
	
		insert into tb_blogType values(null,#{typeName},#{orderNo});
	
	
	
		update tb_blogType
		
			
				typeName=#{typeName},
			
			
				orderNo=#{orderNo},
			
		
		where id=#{id}
	
	
	
		delete from tb_blogType where id=#{id}
	
 


    CommentMapper.xml:

 

 





	
		
		
		
		
		
		
	
	
	
		insert into tb_comment values(null,#{userIp},#{blog.id},#{content},now(),0)
	
	
	
		update tb_comment
		
			
				state=#{state},
			
		
		where id=#{id}
	
	
	
	
	
	
	
	
		delete from tb_comment where id=#{id}
	
 


    LinkMapper.xml:

 

 





	
		
		
		
		
	
	
	
		insert into tb_link values(null,#{linkName},#{linkUrl},#{orderNo})
	
	
	
		update tb_link
		
			
				linkName=#{linkName},
			
			
				linkUrl=#{linkUrl},
			
			
				orderNo=#{orderNo},
			
		
		where id=#{id}
	
	
	
	
	
	
	
	
		delete from tb_link where id=#{id}
	
 


    然后把shiro配置文件中自定义的realm也贴出来吧,用于用户权限认证授权。包package com.steadyjack.realm,建立MyRealm.java:

 

 

package com.steadyjack.realm;

import javax.annotation.Resource;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;

import com.steadyjack.entity.Blogger;
import com.steadyjack.service.BloggerService;

/**
 * title:MyRealm.java
 * description:自定义Realm(域)
 * time:2017年1月22日 下午10:50:57
 * author:debug-steadyjack
 */
public class MyRealm extends AuthorizingRealm{

	@Resource
	private BloggerService bloggerService;
	
	/**
	 * 为当限前登录的用户授予角色和权
	 * (由于目前系统没有啥资源且只有admin超级用户,故而没写授予角色、权限(资源)逻辑)
	 */
	@Override
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
		return null;
	}

	/**
	 * 验证当前登录的用户
	 * (成功时,将登陆用户绑定到会话中;失败时,其实会报各种exception,理当抛出用于前端页面展示(后期实现))
	 */
	@Override
	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
		//获取身份(在这里指 用户名)-凭证(在这里指 密码)
		String userName=(String)token.getPrincipal();
		Blogger blogger=bloggerService.getByUserName(userName);
		if(blogger!=null){
			//当前用户信息存到session中
			SecurityUtils.getSubject().getSession().setAttribute("currentUser", blogger); 
			AuthenticationInfo authcInfo=new SimpleAuthenticationInfo(blogger.getUserName(),blogger.getPassword(),getName());
			return authcInfo;
		}else{
			return null;				
		}
	}

}


     至此,基本上后端mvc的dao层与service层跟model都已经分享完毕。可能缺一些util(下篇贴出),加入util之后,再开发controller与页面解析,基本上系统慢慢就起来了。。。。

 

     如果有相关问题:如想找我付费开发其他功能,讨论其中相关问题等等,可以来以下两群找我,我叫debug!

     Java开源技术交流:583522159     个人QQ:1948831260

 

你可能感兴趣的:(第三方框架实战,ssh,ssm整合案例)