ssh,
ssh,
1. Spring与struts2的整合
1.1. 导入struts2的基础jar包
|
1.2. 新建Struts的配置文件
1.3. 配置struts2的核心控制器
<!-- struts2核心控制器 --> <filter> <filter-name>StrutsPrepareAndExecuteFilter</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>StrutsPrepareAndExecuteFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
1.4. 导入spring的基础包
|
1.5. 新建spring的配置文件
1.6. 在web.xml中配置ContextLoaderListener
作用:加载spring容器
<!-- 配置spring容器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
<!-- spring的配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> |
1.7. 导入spring与struts2的整合包
struts2-spring-plugin-2.3.24.jar |
1.8. 在struts.xml中配置由spring管理action
<!-- 配置由spring管理action --> <constant name="struts.objectFactory" value="spring"></constant> |
2. Spring与hibernate整合
2.1. 导入hibernate的jar包
|
2.2. 导入Spring整合hibernate的包
spring-jdbc-4.2.6.RELEASE.jar spring-orm-4.2.6.RELEASE.jar spring-tx-4.2.6.RELEASE.jar spring-aop-4.2.6.RELEASE.jar |
2.3. 在applicationContext.xml中配置数据源
<!-- 引入properties文件 --> <context:property-placeholder location="classpath:database.properties"/> <!-- 配置c3p0数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 最基本:连接数据库的四大要素 --> <property name="driverClass" value="${jdbc.driver}"></property> <property name="jdbcUrl" value="${jdbc.url}"></property> <property name="user" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean>
|
2.4. 在applicationContext.xml中配置会话工厂bean
配置hibernate参数:
数据源
方言
映射文件
<!-- 配置会话工厂 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!-- 引入数据源 --> <property name="dataSource" ref="dataSource"></property> <!-- 配置hibernate相关的属性 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> </props> </property> <!-- 配置映射文件 --> <property name="mappingResources"> <!-- 多个配置文件 --> <list> <value>classpath:cn/bdqn/entity/hbm/User.hbm.xml</value> </list> </property> </bean> |
2.5. hibernateTemplate的API
|
2.6. 编写测试Dao
public class UserDao extends HibernateDaoSupport{
public void findUser(){ User user = this.getHibernateTemplate().get(User.class, 1); System.out.println("用户:"+user); } }
|
2.7. 在spring配置文件中配置dao
<!--spring管理bean --> <bean id="userDao" class="cn.bdqn.dao.UserDao"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> |
3. 配置spring管理事务
3.1. 配置事务管理器
<!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <!-- 注入会话工厂 --> <property name="sessionFactory" ref="sessionFactory"></property> </bean> |
3.2. 开启注解管理事务
<!-- 注解管理事务 --> <tx:annotation-driven transaction-manager="transactionManager"/> |
3.3. 测试事务是否有效
Spring整合junit4
导入jar包
spring-test-4.2.6.RELEASE.jar |
测试代码 /** * Spring整合junit4 * @author Administrator */ //使用spring整合junit4的运行器 @RunWith(SpringJUnit4ClassRunner.class) //加载配置文件 @ContextConfiguration(locations="classpath:applicationContext.xml") public class UserServiceTest { @Autowired private UserService userService; //更新用户 @Test public void testUpdateUser(){ userService.updateUser(); }
|
Service处理: @Transactional public void updateUser(){ User user = new User(); user.setUserId(1); user.setUserName("zhangsan"); user.setUserPwd("123456"); userDao.updateUser(user); int i = 1/0; User user02 = new User(); user02.setUserId(2); user02.setUserName("lisi"); user02.setUserPwd("123456"); userDao.updateUser(user02); } } |
4. 注解配置ssh
4.1. Spring整合struts2
导入struts2的注解包
struts2-convention-plugin-2.3.16.3.jar |
配置action的注解
|
配置spring管理
配置文件: <!-- 扫描包 --> <context:component-scan base-package="cn.bdqn.action,cn.bdqn.service"></context:component-scan>
| ||
对应的需要spring管理的类: Action:
Service:
|
5. Spring整合hibernate
5.1. 会话工厂配置
<!-- 配置会话工厂 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <!-- 数据源 --> <property name="dataSource" ref="dataSource"></property> <!-- 基本属性 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> </props> </property> <!-- 扫描实体类 --> <property name="packagesToScan" value="cn.bdqn.entity"></property> </bean>
|
注意事项:会话工厂的bean为:
org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean
5.2. hibernateTemplate配置
<!-- 配置HibernateTemplate --> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <!-- 注入sessionFactory --> <property name="sessionFactory" ref="sessionFactory"></property> </bean> |
5.3. Dao层代码
@Repository public class UserDao { @Resource private HibernateTemplate hibernateTemplate; public void findUser(){ //查询用户数据(ID=1) User user = hibernateTemplate.get(User.class, 1); System.out.println("用户:"+user); } public void updateUser(User user){ hibernateTemplate.update(user); System.out.println("更新用户数据"); }
}
|
6. 分页语句条件
<!--表格内容代码--> <tbody> <s:iterator value="pageUtil.list"> <tr id="row_1"> <td><s:property value="userId" /></td> <td name="name"><s:property value="userName" /></td> <td><a href="#"> <i class="fa fa-pencil-square-o" title="编辑" aria-hidden="true"></i> </a> <a href="#"> <i class="fa fa-trash" title="删除" aria-hidden="true"></i> </a></td> </tr> </s:iterator> </tbody> </table> <!-- 分页器 start --> <div class="pageStyle"> <span>共<b> <s:property value="pageUtil.totalCount" /> </b>条 第 <s:property value="pageUtil.pageIndex" />/ <s:property value="pageUtil.totalPageCount" />页 </span> <ul class="pagination"> <li><a href="javascript:gotoPage(<s:property value='1'/>)">首页</a></li> <li><a href="javascript:gotoPage(<s:property value='pageUtil.prePageIndex'/>)">上页</a></li> <s:bean name="org.apache.struts2.util.Counter" var="counter"> <s:param name="first" value="1" /> <s:param name="last" value="pageUtil.totalPageCount" /> <s:iterator> <li <s:if test="pageUtil.pageIndex==#counter.current-1"> class="active" </s:if>><a href="javascript:gotoPage(<s:property value='#counter.current-1'/>)"> <s:property value="#counter.current-1" /> </a></li> </s:iterator> </s:bean> <li><a href="javascript:gotoPage(<s:property value='pageUtil.nextPageIndex'/>)">下页</a></li> <li><a href="javascript:gotoPage(<s:property value='pageUtil.totalPageCount'/>)">尾页</a></li> </ul> </div> <!-- 分页器 end --> </div> </body> <script> function gotoPage(pageNum){ var pageIndex = document.getElementById("pageIndex"); pageIndex.value = pageNum; //js提交表单 document.getElementById("searchForm").submit(); }
</script> |
@Resource private UserService userService; private Integer pageIndex; private Integer pageSize; //搜索数据 private String username; private PageUtil<User> pageUtil; public PageUtil<User> getPageUtil() { return pageUtil; }
public void setPageIndex(Integer pageIndex) { this.pageIndex = pageIndex; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } @Action(value = "login", results = { @Result(name = ActionSupport.SUCCESS, location = "/successPage.jsp") }) public String login() { System.out.println("UserAction-----------login"); userService.updateUser(); return ActionSupport.SUCCESS; } @Action(value = "indexSupper", results = { @Result(name = ActionSupport.SUCCESS, location = "/index-supper.jsp") }) public String indexSupper() { if(username==null){ username = ""; } //统计总条数 int totalCount = userService.countUser(username); if(pageIndex==null){ pageIndex = 1; } pageUtil = new PageUtil<User>(totalCount,pageIndex); List<User> userList = userService.findUserListByPage(username,pageUtil.getDatabaseOffset(),pageUtil.getPageSize()); pageUtil.setList(userList); return ActionSupport.SUCCESS; }
6.1. Dao层 public int countUser(String username) { int count = hibernateTemplate.execute(new HibernateCallback<Integer>() {
@Override public Integer doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery("select count(userId) from User where userName like concat('%',?,'%')"); query.setString(0, username); Integer count = ((Long)query.uniqueResult()).intValue(); return count; } }); return count; }
public List<User> findUserListByPage(String username, int databaseOffset, int pageSize) { List<User> userList = hibernateTemplate.execute(new HibernateCallback<List<User>>(){
@Override public List<User> doInHibernate(Session session) throws HibernateException, SQLException { Criteria criteria = session.createCriteria(User.class); criteria.add(Restrictions.like("userName", "%"+username+"%"));//模糊查询 criteria.setFirstResult(databaseOffset); criteria.setMaxResults(pageSize); return criteria.list(); }}); return userList; }
|
public class PageUtil<T> { //默认每页显示的数量为5 private final static int DEFAULT_PAGESIZE = 5; private int totalCount; private int totalPageCount; private int pageIndex; private int pageSize; private List<T> list; private int prePageIndex; private int nextPageIndex; public PageUtil(int totalCount, int pageIndex) { this.totalCount = totalCount; this.pageIndex = pageIndex; this.pageSize = DEFAULT_PAGESIZE; } public PageUtil(int totalCount, int pageIndex, int pageSize) { this(totalCount,pageIndex); this.totalCount = totalCount; this.pageIndex = pageIndex; this.pageSize = pageSize; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public int getTotalPageCount() { //计算 return totalCount%pageSize==0?(totalCount/pageSize):(totalCount/pageSize+1); } public void setTotalPageCount(int totalPageCount) { this.totalPageCount = totalPageCount; } public int getPageIndex() { return pageIndex; } public void setPageIndex(int pageIndex) { this.pageIndex = pageIndex; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getPrePageIndex() { if(pageIndex<=1){ return 1; }else{ return pageIndex-1; } } public void setPrePageIndex(int prePageIndex) { this.prePageIndex = prePageIndex; } public int getNextPageIndex() { if(pageIndex>=getTotalPageCount()){ return pageIndex; }else{ return pageIndex+1; } } public void setNextPageIndex(int nextPageIndex) { this.nextPageIndex = nextPageIndex; }
public List<T> getList() { return list; } public void setList(List<T> list) { this.list = list; } //数据库的下标 public int getDatabaseOffset(){ return (pageIndex-1)*pageSize; } |
评论暂时关闭