4、web.xml
这个不要忘记配置 。所有的一切,都要通过Web来展现 。我们和客户的第一次产品交流 。
5、搞定!庆祝一下(小二,上菜?。?
4、核心代码
严格按照面向对象、面向接口、面向切面来设计 。
1) model
2) dao
3)
4)
1) model
Blog
package com.hmc.csdn.modle;import org.hibernate.annotations.GenericGenerator;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;/*** User:Meice* 2017/11/7*/@Entitypublic class Blog {private int blog_id;private String blog_title;private String blog_content;@Id@GenericGenerator(name = "myid",strategy = "native")@GeneratedValue(generator = "myid")public int getBlog_id() {return blog_id;}public void setBlog_id(int blog_id) {this.blog_id = blog_id;}public String getBlog_title() {return blog_title;}public void setBlog_title(String blog_title) {this.blog_title = blog_title;}public String getBlog_content() {return blog_content;}public void setBlog_content(String blog_content) {this.blog_content = blog_content;}@Overridepublic String toString() {return "Blog{" +"blog_id=" + blog_id +", blog_title='" + blog_title + '\'' +", blog_content='" + blog_content + '\'' +'}';}}
这里为了看效果,先设置了几个简单的字段,后期还会不断完善 。
2) dao
package com.hmc.csdn.dao;import java.util.List;public interface IBlogDao {void save(Object obj);void del(int id);void update(Object obj);List>list();Object listOne(int id);}
package com.hmc.csdn.dao;import com.hmc.csdn.modle.Blog;import org.hibernate.SessionFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.orm.hibernate5.support.HibernateDaoSupport;import org.springframework.stereotype.Repository;import javax.annotation.Resource;import java.awt.print.Book;import java.util.List;/*** User:Meice* 2017/11/7*/@Repositorypublic class BlogDao extends HibernateDaoSupport implements IBlogDao{//继承框架底层封装好的获取sesson的方法,就可以避免在通过sessionFactory获取session了@Resource(name = "sessionFactory")public void setSuperSessionFactory(SessionFactory sessionFactory) {super.setSessionFactory(sessionFactory);}/*** 新增*/public void save(Object obj) {getSessionFactory().getCurrentSession().save(obj);}/*** 删除*/public void del(int id) {System.out.println("删除方法 , 进来了....");/*getSessionFactory().getCurrentSession().delete(id);*/// Integer not aentity!//需要注意,Hibernate删除是直接删除对象,但是根据的是id?所以...需要这么操作.Blog blog = new Blog();blog.setBlog_id(id);getSessionFactory().getCurrentSession().delete(blog);}/*** 修改*/public void update(Object obj) {getSessionFactory().getCurrentSession().update(obj);}/*** 查询所有*/public List> list() {List
3)
package com.hmc.csdn.service;import java.util.List;public interface IBlogService {void add(Object obj);void del(int id);void update(Object obj);List>list();Object listOne(int id);}
package com.hmc.csdn.service;import com.hmc.csdn.dao.BlogDao;import com.hmc.csdn.modle.Blog;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import javax.annotation.Resource;import java.util.List;/*** User:Meice* 2017/11/7*/@Servicepublic class BlogService implements IBlogService {private BlogDao blogDao;@Resource(name = "blogDao")public void setBlogDao(BlogDao blogDao) {this.blogDao = blogDao;}/*** 发布博客*/public void add(Object obj) {blogDao.save(obj);}/*** 删除博客*/public void del(int id) {blogDao.del(id);}/*** 修改博客*/public void update(Object obj) {blogDao.update(obj);}/*** 博客列表* @return*/public List> list() {List
这里的困惑是:定义接口,需要高屋建瓴的能力,否则看得不长远,定义的接口就比较幼稚 。
4)
package com.hmc.csdn.controller;import com.hmc.csdn.modle.Blog;import com.hmc.csdn.service.BlogService;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ModelDriven;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.stereotype.Controller;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.util.List;/*** User:Meice* 2017/11/7*/@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:spring.xml")@Controller(value = "http://www.kingceram.com/post/blogAction")public class blogAction implements ModelDriven
这里增加了分页的属性 。也在中增加了分页查询及查询博客总条目数的方法 。
这里笔者想不到更好的传参方式,已经实现了一个,其他参数就通过属性方式来传递 。应该还有更加简洁的办法,后期发现在优化 。
5、页面
暂时只是做了个主页面,还有类别管理、评论管理、回收站等模块,后续陆续实现 。
list.jsp——显示博客列表
add.jsp——发布博客
.jsp——编辑博客
现在阶段 , 都还很丑陋 , 稚气未脱的柑橘 。后期逐一美化 。欢迎评论斧正!
list.jsp——显示博客列表
Meice_blog
add.jsp——发布博客
Meice_发布博客
.jsp——编辑博客
Meice_修改博客
6、总结
1、解决问题不重要,重要的是解决问题的思路可以复用 。比如总是报错 , 找不到bean , 这个时候 , 就要耐心分析;
不是配置流程有问题,就是哪里写错了 。
2、文本域鼠标开始定位没有在开头,下一次实现定位开头,不用回删;
3、如果博客内容过长,数据库字段是自动生成的(255),会报错如下:
Data truncation: Data too long for column 'blog_content' at row 1?
待处理;
4、为方便分页,笔者采用页面重定向,反复生成大量数据 。发现一个很有意思的现象,那就是重定向访问过多,谷歌、火狐、360浏览器都会自动停止,只有IE还在那里傻乎乎的运行 。所以一下生成了1000多条数据,不过也好,分页起来更有“浩瀚”之美!
5、设计接口的工作,有点像企业创始人,他们到达一定阶段,也许、大概、或者就是做类似设计接口之类的事吧 。设计接口,要有高瞻远瞩的能力呢 , 否则定义的接口,不是不完善就是不好用 。
7、待完善…
革命尚未成功,同志仍需努力!
【JavaWeb框架-SSH-真品与“赝品”?】小朋友们 , 下期再会!
- QQ浏览器如何更改标签框架位置 qq浏览器如何更改标签框架位置
- Actor Framework LabVIEW操作者框架范例集锦之一:系统自带
- word怎么设置图片样式 word怎么设置图片样式为金属框架
- 基于SSM框架的高校智能培训管理系统分析与设计
- 游戏服务器的登陆框架
- 对于Pyspider爬虫框架你知道多少?
- 物体检测算法全概述:从传统检测方法到深度神经网络框架
- 神界原罪2符文合成配方分享 神界原罪2符文框架合成公式
- 一 MATLAB测试框架什么意思,浅析自动化测试框架自动化测试框架是什么?
- 如何写小说大纲 如何写小说大纲框架