S2SH 第一次整合的经历
2019独角兽企业重金招聘Python工程师标准>>>
好不容易把S2SH整合到了一起 记下来 以后用到了直接复制粘贴。。。
第一步:定义了各种model 实现getter()和setter()方法 以及配置name.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.yang.model">
<class name="User" table="user_table">
<id name="id" column="user_id">
<generator class="identity" />
</id>
<property name="username" type="string" not-null="true" length="50" unique="true" />
<property name="password" type="string" not-null="true" length="50" />
<property name="email" type="string" length="100" />
<property name="name" type="string" length="100" />
<property name="phone" type="string" length="50" />
<property name="date" type="string" length="50" />
<set name="articles">
<key column="article_id" />
<one-to-many class="Article" />
</set>
<set name="comments">
<key column="comment_id" />
<one-to-many class="Comment" />
</set>
<set name="messages">
<key column="message_id" />
<one-to-many class="Message" />
</set>
</class>
</hibernate-mapping>
第二步:定义了DAO接口 里面定义了针对model的各种操作方法
这是我定义的一个UserDAO:
public interface UserDAO {
void addUser(User user);
User getUserById(int id);
void updateUser(User user);
String login(String username,String password );
User getUserByName(String username);
}
第三部:定义DaoImpl类 这个类要继承了抽象类 HibernateDaoSupport 并且实现刚刚定义的DAO接口
UserDaoImpl的实现代码:
package com.yang.daoImpl;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.yang.dao.UserDAO;
import com.yang.model.User;
public class UserDaoImpl extends HibernateDaoSupport implements UserDAO {
@Override
public void addUser(User user) {
System.out.println(user.getUsername());
System.out.println(user.getPassword());
getHibernateTemplate().save(user);
}
@Override
public User getUserById(int id) {
getHibernateTemplate().get(User.class, id);
return null;
}
@Override
public void updateUser(User user) {
getHibernateTemplate().save(user);
}
@Override
public String login(String username,String password) {
Session session = getSession();
String hql="select password from User where username=?";
Query query = session.createQuery(hql);
query.setParameter(0,username);
String str = (String) query.uniqueResult();
if(password.equals(str))
return "success";
else
return "input";
}
@Override
public User getUserByName(String username) {
Session session = getSession();
String hql="select from User where username=?";
Query query = session.createQuery(hql);
query.setParameter(0,username);
return (User)query.uniqueResult();
}
}
第四步:定义Action类 继承ActionSupport 并且在这个Action的内部 我们要定义好之前说过DaoImpl 并且要有相对应的get和set方法 这样才能在下一步通过spring注入到action。
第五步: 配置.xml文件
首先是web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> //spring的配置
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
用到了sitemesh 所以在配置文件里面影响到了struts的配置 不用的话可以直接和前面的clean-up一起删掉
然后配置applicationContext.xml
<?xml version="1.0" encoding="GBK"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 定义数据源Bean,使用C3P0数据源实现 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<!-- 指定连接数据库的驱动 -->
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<!-- 指定连接数据库的URL -->
<property name="jdbcUrl" value="jdbc:mysql://localhost/blog" />
<!-- 指定连接数据库的用户名 -->
<property name="user" value="root" />
<!-- 指定连接数据库的密码 -->
<property name="password" value="yang" />
<!-- 指定连接数据库连接池的最大连接数 -->
<property name="maxPoolSize" value="20" />
<!-- 指定连接数据库连接池的最小连接数 -->
<property name="minPoolSize" value="1" />
<!-- 指定连接数据库连接池的初始化连接数 -->
<property name="initialPoolSize" value="1" />
<!-- 指定连接数据库连接池的连接的最大空闲时间 -->
<property name="maxIdleTime" value="20" />
</bean>
<!--定义了Hibernate的SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>com/yang/model/User.hbm.xml</value>
<value>com/yang/model/Message.hbm.xml</value>
<value>com/yang/model/Comment.hbm.xml</value>
<value>com/yang/model/Article.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
</props>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="userDao" class="com.yang.daoImpl.UserDaoImpl">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="articleDao" class="com.yang.daoImpl.ArticleDaoImpl">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="userAction" class="com.yang.action.UserAction" scope="prototype">
<property name="userDao" ref="userDao" />
</bean>
<bean id="articleAction" class="com.yang.action.ArticleAction" scope="prototype">
<property name="articleDao" ref="articleDao" />
</bean>
</beans>
完整的applicationContext.xml配置文件
我们需要注意的是在配置DaoImpl bean的时候 一定要将sessionFactory引入进去
<bean id="userDao" class="com.yang.daoImpl.UserDaoImpl">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
虽然在定义的时候DaoImpl的时候 没有声明这个参数 但是由于继承了HibernateDaoSupport 想要使用相关的方法就需要注入SessionFactory
然后在定义的Action的bean引入之前声明的DaoImpl
还需要配置struts.xml
<action name="register" class="userAction" method="register" >
<result name="success">login_success_page.jsp</result>
</action>
配置action的时候 class的属性直接填写在applicationContext.xml声明的对应的bean id 就行了 spring 会帮我们自动的注入。
第六步:完成界面。
转载于:https://my.oschina.net/u/858272/blog/125179
S2SH 第一次整合的经历相关推荐
- S2SH CRUD 整合
S2SH CRUD 整合 采用的框架 Struts2+Spring4+Hbiernate4. 目录结构 : EmployeeAction: 1 package com.xx.ssh.action ...
- 大三下,第一次前端面试经历
前言 我,本科,大三下,软件工程专业,大学期间主要学习前端方向,由于大四没课,想着暑假可以找个实习,在暑假甚至大四可以为自己找工作创造机会,结果面试的时候才发现,自己在各个方面还真是不完善啊. 由于大 ...
- 第一次任务完成经历的总结
第一次任务完成经历的总结: 任务简介: 为Openstack的组件cloudkitty添加一个计费通知feature的子功能,通知发送功能.具体的要求是,提供4个邮件接口和一个短信接口给上游调用,并将 ...
- 搬砖,真的是我第一次赚钱的经历!
1. 搬砖,真的是我第一次赚钱的经历! 记得高四(特指复读)毕业那年,在家里无所事事.高考再次落败--够不着二本线,三本又没钱上,这给我的打击是巨大的,就仿佛整个人跳进了冰窟窿.怎么办呢? 我二叔家开 ...
- 东华之旅vs第一次坐飞机经历2018-06-10
东华校门 东华一食堂 最后一顿晚餐 环境能源夏令营 第一次坐飞机 五点多出发辛辛苦苦做了两个多小时的地铁,差一点没赶上21.00截止登机的飞机.第一次坐飞机的经历就是这么紧张,21.08全部乘客登机正 ...
- 记第一次实习面试经历(字节跳动)
想要获取笔者自己整理的Android.Java面试资料原文文稿(markdown格式),可关注左边栏二维码所示公众号,公众号内回复"A3"(Android资料)."J4& ...
- Java第一次实习面试经历
本人是普通二本大学的大三在校生,自学的方向是Java后端开发.校招的时候,投了一家公司的简历.虽然是一家小公司,但效率挺快的,第二天就通知我去面试了:下面我来说说我的经历. 面试时间是:2018/3/ ...
- 记第一次codeforces比赛经历
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~凑字数~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...
- 第一次出省经历--美丽成都之行
从小生活在大连,读书.就业就这样一直依赖着这个城市.因为家人都在这边,我的生命也就跟这个城市紧紧地联系到了一起,曾经也想过去外地发展,可一次次因为自己的心中的怯懦,而一次又一次地放弃了.不过,还好,大 ...
最新文章
- 9款超赞的AI开源项目!| 本周Github精选
- 解决IE更新对FLASH产生影响
- 某生鲜电商平台的监控模块设计
- 基于xampp搭建的个人博客。
- Javascript的怪癖
- 2017年公众号32篇热文回看
- php整么去掉时间的年月日,php强大的时间转换函数strtotime
- 1. 方程求根(二分法)
- 使用Jquery+CSS实现的表格隔行凸显和当前行高亮效果
- php 二进制 十六进制转换,php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码...
- 深入理解uwsgi和gunicorn网络模型
- Django REST Framework——3. 序列化器(Serializer)
- 装饰器只有python才有吗_Python装饰器入门详解
- php-ews发送邮件,node.js 基于 STMP 协议和 EWS 协议发送邮件
- linux命令中插入制表符,linux 中grep 匹配制表符 和 换行符的命令
- STM32 SP706S 外部看门狗的应用示例
- u盘linux反应好慢,U盘加载速度缓慢的原因及解决小技巧
- 商务印书馆汉译世界学术名著丛书目录
- xtu oj 1218
- 开车路上,万一遇到紧急情况,如何处理?开车紧急避险手册速收藏
热门文章
- 8086CPU的寄存器
- vivado中如何读取十进制小数_二进制十进制间小数怎么转换,原来是这样的
- oracle clusterware 11g,Oracle11gR2clusterware启动顺序
- 矩形键盘 linux,基于ARM的矩阵键盘设计及其linux驱动实现
- 在webstorm中怎么配置本地服务器
- Oracle优化查询技巧
- hdu 1142 最短路 + DP
- table表格表头不懂,内容y轴滚动
- django通过ajax请求接口返回多条数据,并动态生成表格,请求表单后将表格数据并入库
- ViewPager之使用PagerTabStrip添加标题栏,实现滑动效果