博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
整合s2sh,实现页面操作数据库
阅读量:5729 次
发布时间:2019-06-18

本文共 8270 字,大约阅读时间需要 27 分钟。

  • 先说点废话

    s2sh,就是struts2,spring,hibernate;s2作为表现层和控制器,hibernate作为持久层,spring作为业务层(充分应用IOC和AOP)。其实业务还是业务,只是依赖类通过spring来注入和管理,使得代码非常简洁(前提你得非常熟悉,不然就像在下一样即将发疯);spring的应用主要是在管理对象的c创建(IOC)还有数据库事物的管理(AOP),今天熟悉了IOC的使用,写个demo记录一下。

  • 准备事项

    配置ssh的环境,主要是导包和创建配置文件。

    

    struts的配置文件struts.xml,hibernate的配置文件hibernate.cfg.xml,spring的配置文件applicationContext.xml;

    以及修改web.xml。

  • 整合例子

    目录如下,仍然是mvc,model存表对象,service存数据库事物,dao存单个表操作,action是控制器。

    

    web.xml

SpringPractice
hello
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:applicationContext.xml

    struts.xml

    hibernate.xml 其实可以不要了,全部配在了applicationContext.xml

    applicationContext.xml

org.hibernate.dialect.MySQLDialect
false
true
model/user.hbm.xml

    service对象里面有一个dao对象,是通过注入使用的;配置控制器的时候,把service注入进去,在此之前先实例化一个service对象;值得注意的是hibernate和spring的整合。

    首先配置dataSource,class可以配jdbc或者是其他的连接池。配完了这几行,hibernate对应的配置可以去掉了。

org.hibernate.dialect.MySQLDialect
false
true
model/user.hbm.xml

    然后配置sessionFactory,注入dataSource,里面的key配置了数据库方言和hibernate的其他配置,配完之后可以去掉hibernate配置文件相应的地方了,list里配置了mapping,把映射表也配上了,所以hibernate的配置文件完全没用了。

    最后在dao中注入sessionFactory,这样就可以使用getHibernateTemplate这个方法了,少了很多代码。

 

    userDao.java

package dao;import java.util.List;import model.user;public interface userDao {	public void save(user user);	public void delete(user user);	public void update(user user);	public List
select();}

    userDaoImpl.java

package dao;import java.util.List;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import model.user;public class userDaoImpl extends HibernateDaoSupport implements userDao{	@Override	public void save(user user) {		// TODO Auto-generated method stub		this.getHibernateTemplate().save(user);			}	@Override	public void delete(user user) {		// TODO Auto-generated method stub		String hql = "delete from user where username = "+user.getUsername();		this.getHibernateTemplate().bulkUpdate(hql); 	}	@Override	public void update(user user) {		// TODO Auto-generated method stub		this.getHibernateTemplate().update(user);			}	@Override	public List
select() { // TODO Auto-generated method stub String hql = "from user"; List
list = (List
) this.getHibernateTemplate().find(hql); return list; }}

    UserService.java

package service;import java.util.List;import dao.userDaoImpl;import model.user;public class UserService {	private userDaoImpl userDaoImpl;		public userDaoImpl getUserDaoImpl() {		return userDaoImpl;	}	public void setUserDaoImpl(userDaoImpl userdao) {		this.userDaoImpl = userdao;	}	//服务	public void addService(user u){		userDaoImpl.save(u);	}	public void updateService(user u){		userDaoImpl.update(u);	}	public void deleteService(user u){		userDaoImpl.delete(u);	}	public List
selectAllService(){ return userDaoImpl.select(); } }

    控制器

package action;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;import model.user;import service.UserService;public class addUserAction extends ActionSupport implements ModelDriven
{ private user u; private UserService userService; public UserService getUserService() { return userService; } public void setUserService(UserService usService) { this.userService = usService; } public user getU() { return u; } public void setU(user u) { this.u = u; } @Override public user getModel() { if(u == null) // TODO Auto-generated method stub u = new user(); return u; } public String execute(){ this.userService.addService(u); return SUCCESS; }}

  

package action;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;import model.user;import service.UserService;public class deleteAction extends ActionSupport implements ModelDriven
{ private user u; private UserService userService; public UserService getUserService() { return userService; } public void setUserService(UserService usService) { this.userService = usService; } public user getU() { return u; } public void setU(user u) { this.u = u; } @Override public user getModel() { if(u == null) // TODO Auto-generated method stub u = new user(); return u; } public String execute(){ this.userService.deleteService(u); return SUCCESS; }}

    页面代码

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@taglib prefix="s" uri="/struts-tags"%>
添加用户
用户名:
密码:

  

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@taglib prefix="s" uri="/struts-tags"%>
删除用户
用户名:
密码:
  • 错误

    首先遇到的异常非常多,我甚至有些怀疑(厌烦)spring框架的加入。

    1.命名注入对象的时候要按照驼峰命名法。

    2.莫名其妙无法打开数据库的链接,重新写配置文件不适用properties之后正常了。

org.springframework.dao.DataAccessResourceFailureException: Cannot open connection; nested exception is org.hibernate.exception.JDBCConnectionException: Cannot open connection 	at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAcce
java.lang.NumberFormatException: For input string

    3.struts配置action的时候不能不配置result,跳一堆红字...

    4.在使用映射的时候,没有主键的时候会出错(或者我没找到合适的方式用)。如下错误:

ids for this class must be manually assigned before calling save(): model.user; nested exception is org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): model.user

    5.仔细写配置文件,超坑。类似如下:

Invalid property 'userService' of bean class [action.addUserAction]: Bean property 'userService' is not writable or has an invalid setter method. Did you mean 'usService'?

    6.tomcat经常添乱,因为启动记录里面的项目关闭了或者删除了。最后我把服务器删了重新添加,受够了启动无限报错。

java.lang.IllegalArgumentException: Document base

    7.仔细写好路径,web.xml的,不然有如下错误。

parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]
  • 最后

    仍然很欣慰能运行正常,添加了spring之后设计变得简洁很多(非常仔细地写),如果使用了AOP则可以在不改写原有代码的情况下增加功能。

转载于:https://www.cnblogs.com/chentingk/p/5977954.html

你可能感兴趣的文章
JQ入门(至回调函数)
查看>>
1112: 零起点学算法19——输出特殊值
查看>>
【洛天依】几首歌的翻唱(无伴奏)
查看>>
strcspn
查看>>
OpenSSL初瞻及本系列的博文的缘由
查看>>
ISO8583接口的详细资料
查看>>
tmux不自动加载配置文件.tmux.conf
查看>>
经验分享:JavaScript小技巧
查看>>
[MOSEK] Stupid things when using mosek
查看>>
【云吞铺子之专家来了】CDN的HTTPS相关问题及处理思路
查看>>
程序实例---栈的顺序实现和链式实现
查看>>
服务的使用
查看>>
Oracle 用户与模式
查看>>
网站开发流程以及HTML5简介(八)
查看>>
MairDB 初始数据库与表 (二)
查看>>
RabbitMQ】三种Exchange模式——订阅、路由、通配符模式
查看>>
连接数据库——java
查看>>
拥在怀里
查看>>
chm文件打开,有目录无内容
查看>>
whereis、find、which、locate的区别
查看>>