今天把Sturts2.5的Hibernate4.4的整合案例写出来了,我是新手,哪里写的不好的还请指教。虽然只有基本的增删改查,不过还是浪费不时间。废话不多说,先把项目献上,有需要的同学可以下载测试,不过要记得修改数据库的连接信息和创建数据表喔!
项目下载地址
下面说一下这次的收获:
首先还是看一下项目结构图:
我是从数据库开始写的。因为Hibernate4.4的SessionFactory的获取方式和之前有所不同,所以获得SessionFactory的方式多了一个“服务注策对象”,也就是ServiceRegistry。大家看一下下面的代码:
Configuration conf = new Configuration().configure();
ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(conf.getProperties()).buildServiceRegistry();
SessionFactory sf = conf.buildSessionFactory(sr);
Session s = sf.openSession();
我在项目里的工具类写的不是很规范,下面给大家找了一个很优秀的写法,大家可以学习一下:
Hibernate工具类
第二点就是用hibernate.cfg.xml的配置和映射文件Student.hbm.xml能能借助生成表结构。
Configuration conf = new Configuration().configure();
SchemaExport se = new SchemaExport(conf);
se.create(true,true);
也可以通过在hibernate.cfg.xml中添加如下属性,在运行中自动生成表结构。
<property name = "hibernate.hbm2ddl.auto">create</property>
- 数据库操作层(DaoImpl)
- 在数据库的操作中用到HQL语句,最简单的是“from Student",但是没注意大小写在查询的时候还是提示语句错误!from后跟的是实体类的类名,而不是表名,切记!
- 在查询单个学生的时候用到了反射。
public Student getStuById(int id) {
MySql_Hiber_Util mhu = new MySql_Hiber_Util();
Session session = mhu.getSession();
Student s = (Student) sesssion.get(Student.class,id );
mhu.closeSF();
return s;
}
- 业务逻辑层
1.其实质是调用dao层的实现,在业务逻辑层(ServiceImpl)是在实现类中如下:
public class StuServiceImpl implements StuService {
private StudentDao sd;
public StuServiceImpl (){
this.sd = new StudentDaoImpl();
}
public void addStu(Student stu) {
this.sd.addStu(stu);
}
//省略其它代码
}
- 控制层(action)
点击更新按钮(超链接:*.action?id=${stu.id})传递当前用户id获取单个用户信息方法得到对象并放入session中在预处理页面捕获信息并显示用户将显示出来的信息进行修改并重新提交由update方法更新并重定向到获取所有学生的action和页面
action代码:
public String getByIdStu() {
int id = Integer.parseInt(request.getParameter("id"));
StuService ss = new StuServiceImpl();
stu = ss.getStuById(id);
session.setAttribute("stu", stu);
return "getById";
}
public String updateStu() {
int id = Integer.parseInt(request.getParameter("id")) ;
int age = Integer.parseInt(request.getParameter("age")) ;
String name = request.getParameter("name");
stu.setName(name);stu.setAge(age);stu.setId(id);
System.out.println(stu.toString());
StuService ss = new StuServiceImpl();
ss.updateStu(stu);
try {
response.sendRedirect("getAllStu.do");
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return "update";
}
Struts.xml代码(Struts2.5的默认中不允许通配符的,在这里要加上allowed-method属性):
<package name="default" namespace="/" extends="struts-default">
<action name="*Stu" class="com.ming.action.Stu_CRUD" method="{1}Stu">
<result name="add">/jsps/GetAllStudents.jsp</result>
<result name="getAll">/jsps/GetAllStudents.jsp</result>
<result name="getById">/jsps/PrepareUpdateStu.jsp</result>
<result name="update">/jsps/GetAllStudents.jsp</result>
<result name="del">/jsps/GetAllStudents.jsp</result>
<allowed-methods>addStu,getAllStu,delStu,updateStu,getByIdStu</allowed-methods>
</action>
</package>
- jsp页面
显示所有学生列表:
<s:iterator var="stu" value="#session.list">
<tr style="text-align: center;">
<td><s:property value="#stu.id"/></td>
<td><s:property value="#stu.name"/></td>
<td><s:property value="#stu.age"/></td>
<td><a href="getByIdStu.do?id=${id }">修改</a></td>
<td><a href="delStu.do?id=${id }">删除</a></td>
</tr>
</s:iterator>
以上就是我出错和折腾比较多的地方,代码质量不咋的,不过值得安慰的是结果出来了。有哪些不对的地方还希望大家多提。谢谢!小冥王
QQ:1007520388
点击查看更多内容
2人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦