|
UserDAO.java
|
package dj.fantlam.myssh.dao;
import dj.fantlam.myssh.vo.User;
public interface UserDAO {
//注册
public void register(User user)throws Exception;
}
UserDAOImpl.java
package dj.fantlam.myssh.daoimpl;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import dj.fantlam.myssh.dao.UserDAO;
import dj.fantlam.myssh.vo.User;
注意要继承自HibernateDaoSupport
public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {
public void register(User user) throws Exception {
// TODO Auto-generated method stub
super.getSession().save(user);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>org.gjt.mm.mysql.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/myssh</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>123456</value>
</property>
</bean>
<!--
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/myssh</value>
</property>
</beans>
-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<!-- 表示允许自动提交 -->
<prop key="hibernate.connection.autocommit">true</prop>
<!-- 显示sql语句 -->
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>dj/fantlam/myssh/vo/User.hbm.xml</value>
</list>
</property>
</bean>
<bean id="hibernateTemplate"
class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="userdao" class="dj.fantlam.myssh.dao.UserDAO"
abstract="true">
</bean>
<bean id="userdaoimpl" class="dj.fantlam.myssh.daoimpl.UserDAOImpl"
parent="userdao">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate" />
</property>
</bean>
</beans>
package dj.fantlam.myssh.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import dj.fantlam.myssh.daoimpl.UserDAOImpl;
import dj.fantlam.myssh.vo.User;
public class UserdaoTest {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
ApplicationContext context = null;
context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDAOImpl udi = (UserDAOImpl) context.getBean("userdaoimpl");
User user = new User();
//user.setId(123);
user.setUserid("22");
udi.register(user);
}
}
1.
Error creating bean with name 'dataSource' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is javax.naming.NoInitialContextException:
用java代码直接测试由于连接池要用到tomcat的问题,先改为JDBC连接方式
2.
Unknown entity: dj.fantlam.myssh.vo.User 没有在spring配置
3.
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not insert: [dj.fantlam.myssh.vo.User]
Caused by: java.sql.SQLException: Table 'myssh.myssh__user' doesn't exist
在User.hbm.xml里面
4.
严重: IOException while loading persisted sessions: java.io.EOFException
严重: Exception loading sessions from persistent storage
原因是tomcat对硬盘的session读取失败,彻底解决办法一下:将tomcat的work目录下面的文件清空,主要是*.ser文件,或者只是删除掉session.ser即可以解决。
5.
Struts无法验证 因为Struts默认执行public ActionForward execute
用分发Action的时候注意把execute的名字改掉
6.
在UserForm里面 最好所有属性都有setter和getter方法
由于type没有setter和getter方法 导致UserForm都无法验证错误信息 生成之后问题解决
UserAction.java 的register里 插入数据 密码进行加密
index.jsp
</logic:present>
进行注册测试,可以成功插入
以上用JDBC连接方式可以成功注册用户
现在改为用 JNDI 数据源 又出现了这样的问题
org.hibernate.exception.GenericJDBCException: Cannot open connection
这个地方暂时还没解决 以后的代码只能用JDBC方式代替了
在注册之前要检查用户ID是否已经存在,不存在才插入,存在要返回错误信息
UserDAOImpl.java
org.hibernate.QueryException: Expected positional parameter count: 1, actual parameters: [] [from user as u where u.userid=?]
原因是忘了设值q.setString(0, userid);
UserAction里register方法
本文详细介绍了一个基于Struts、Spring和Hibernate(SSH)框架整合的实战案例。从搭建环境开始,逐步介绍了如何实现从前台验证到后台数据库操作的全过程。特别关注了在不同环境下配置数据源的方式,以及解决过程中遇到的各种问题。

982

被折叠的 条评论
为什么被折叠?



