今天介绍一个基于SSM框架的个人网上日记、博客系统。
Spring
Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。
Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地new一个对象,而是让Spring框架帮你来完成这一切。
SpringMVC
SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。
mybatis
mybatis是对jdbc的封装,它让数据库底层操作变得透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。
部分代码展示
@Controller
@RequestMapping({"/blog"})
public class BlogController {
@Resource private BlogService blogService;
@Resource private CommentService commentService;
private BlogIndex blogIndex = new BlogIndex();
@RequestMapping({"/articles/{id}"})
public ModelAndView details(@PathVariable("id") Integer id, HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
// 根据主键查询博客信息
Blog blog = blogService.findById(id);
mav.addObject("blog", blog);
// 此时就会看过 然后阅读人数➕1
blog.setClickHit(blog.getClickHit() + 1);
blogService.update(blog);
mav.addObject("mainPage", "foreground/blog/view.jsp");
mav.addObject("pageTitle", blog.getTitle() + "_个人博客");
mav.setViewName("index");
// 上一篇 下一篇
mav.addObject(
"pageCode",
genUpAndDownPageCode(
blogService.getLastBlog(id),
blogService.getNextBlog(id),
request.getServletContext().getContextPath()));
Map map = new HashMap<>();
// 这里的参数对照mapper里面传进去的参数
map.put("blogId", blog.getId());
map.put("state", 1);
List commentList = commentService.list(map);
mav.addObject("commentList", commentList);
// 处理关键字
String keyWord = blog.getKeyWord();
if (StringUtil.isEmpty(keyWord)) {
mav.addObject("keyWords", null);
} else {
String[] arr = keyWord.split(" ");
mav.addObject("keyWords", StringUtil.filterWhite(Arrays.asList(arr)));
}
mav.setViewName("index");
return mav;
}
/** 上一篇 下一篇 */
private String genUpAndDownPageCode(Blog lastBlog, Blog nextBlog, String projectContext) {
StringBuffer pageCode = new StringBuffer();
if (lastBlog == null || lastBlog.getId() == null) {
pageCode.append("上一篇:没有了
");
} else {
pageCode.append(
"上一篇:"
+ lastBlog.getTitle()
+ "
");
}
if (nextBlog == null || nextBlog.getId() == null) {
pageCode.append("下一篇:没有了
");
} else {
pageCode.append(
"下一篇:"
+ nextBlog.getTitle()
+ "
");
}
return pageCode.toString();
}
/** 根据关键字查询 */
@RequestMapping({"/q"})
public ModelAndView q(
@RequestParam(value = "q", required = false) String q,
@RequestParam(value = "page", required = false) String page,
HttpServletRequest request)
throws Exception {
if (StringUtil.isEmpty(page)) {
page = "1";
}
ModelAndView mav = new ModelAndView();
mav.addObject("mainPage", "foreground/blog/result.jsp");
// 在lucene中查询
List blogList = blogIndex.searchBlog(q.trim());
int toIndex = 0;
if (blogList.size() >= Integer.parseInt(page) * 10) {
toIndex = Integer.parseInt(page) * 10;
} else {
toIndex = blogList.size();
}
mav.addObject("blogList", blogList.subList((Integer.parseInt(page) - 1) * 10, toIndex));
mav.addObject("q", q);
mav.addObject("resultTotal", blogList.size());
mav.addObject("pageTitle", "搜索关键字'" + q + "'结果页面_个人博客");
mav.setViewName("index");
return mav;
}
/** 查询结果的翻页功能 */
private String genUpAndDownPageCode(
int page, int totalNum, String q, int pageSize, String projectContext) {
StringBuffer pageCode = new StringBuffer();
// 总共页数
int totalPage = totalNum % pageSize == 0 ? totalNum / pageSize : totalNum / pageSize + 1;
if (totalPage == 0) {
return "";
}
pageCode.append("");
return pageCode.toString();
}
}
获取源码请关注后私信“20220708”
留言与评论(共有 0 条评论) “” |