这个是用struts+hibernate+spring整合做的登录,小弟纠结了
不多说,直接上正菜
数据访问接口public interface TbUserDao {
public boolean getUser(TbUser user);
}
数据接口实现
public class TbUserDaoImpl extends HibernateDaoSupport implements TbUserDao{
public boolean getUser(TbUser user) {
Session session=super.getSession();
String hql="from TbUser tbUser where tbUser.userName=? and tbUser.userPassword=?";
Query query=session.createQuery(hql);
query.setString(0, user.getUserName());
query.setString(1, user.getUserPassword());
int row=query.executeUpdate();
if (row>0) {
return true;
}else {
return false;
}
}}
再分别把业务逻辑接口和业务实现类展示
public interface TbUserBiz {
public boolean getUser(TbUser user);
}
public class TbUserBizImpl implements TbUserBiz{
private TbUserDao tbUserDao;
public void setTbUserDao(TbUserDao tbUserDao) {
this.tbUserDao = tbUserDao;
} public boolean getUser(TbUser user) {
// TODO Auto-generated method stub
return tbUserDao.getUser(user);
}
}
好了,最后上主菜action
public class TbUserAction extends DispatchAction{
String returnUrlWord="default";
private TbUserBiz tbUserBiz;
public void setTbUserBiz(TbUserBiz tbUserBiz) {
this.tbUserBiz = tbUserBiz;
}
public ActionForward Login(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
DynaActionForm dform=(DynaActionForm) form;
TbUser tbUser=(TbUser) dform.get("tbUser");
boolean row=tbUserBiz.getUser(tbUser);
if (row) {
returnUrlWord="index";
}
return mapping.findForward(returnUrlWord);
}
}基本情况就这样了,配置文件没有问题
现在出现的问题是报异常,始终抱的都是HQL语句异常,情况如下所示:
严重: Servlet.service() for servlet action threw exception
org.hibernate.hql.QueryExecutionRequestException: Not supported for select queries [from com.just.doing.entity.TbUser tbUser where tbUser.userName=? and tbUser.userPassword=?]
at org.hibernate.hql.ast.QueryTranslatorImpl.errorIfSelect(QueryTranslatorImpl.java:278)
at org.hibernate.hql.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:395)
at org.hibernate.engine.query.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:259)
at org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:1141)
at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:94)
at com.just.doing.dao.impl.TbUserDaoImpl.getUser(TbUserDaoImpl.java:18)
at com.just.doing.biz.impl.TbUserBizImpl.getUser(TbUserBizImpl.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy2.getUser(Unknown Source)
at com.just.doing.action.TbUserAction.Login(TbUserAction.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)OK,小弟真心讨教,我这是怎么回事啊??以前没学SSH的时候做个登录都没这么复杂,怎么现在就变的如此纠结了啊??是学傻了??
请路过的大侠指教!!!!!如果有好的登录范例,请贴出,让我等小辈观摩学习之用。。或者发送到 小弟不胜感激!!!
不多说,直接上正菜
数据访问接口public interface TbUserDao {
public boolean getUser(TbUser user);
}
数据接口实现
public class TbUserDaoImpl extends HibernateDaoSupport implements TbUserDao{
public boolean getUser(TbUser user) {
Session session=super.getSession();
String hql="from TbUser tbUser where tbUser.userName=? and tbUser.userPassword=?";
Query query=session.createQuery(hql);
query.setString(0, user.getUserName());
query.setString(1, user.getUserPassword());
int row=query.executeUpdate();
if (row>0) {
return true;
}else {
return false;
}
}}
再分别把业务逻辑接口和业务实现类展示
public interface TbUserBiz {
public boolean getUser(TbUser user);
}
public class TbUserBizImpl implements TbUserBiz{
private TbUserDao tbUserDao;
public void setTbUserDao(TbUserDao tbUserDao) {
this.tbUserDao = tbUserDao;
} public boolean getUser(TbUser user) {
// TODO Auto-generated method stub
return tbUserDao.getUser(user);
}
}
好了,最后上主菜action
public class TbUserAction extends DispatchAction{
String returnUrlWord="default";
private TbUserBiz tbUserBiz;
public void setTbUserBiz(TbUserBiz tbUserBiz) {
this.tbUserBiz = tbUserBiz;
}
public ActionForward Login(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
DynaActionForm dform=(DynaActionForm) form;
TbUser tbUser=(TbUser) dform.get("tbUser");
boolean row=tbUserBiz.getUser(tbUser);
if (row) {
returnUrlWord="index";
}
return mapping.findForward(returnUrlWord);
}
}基本情况就这样了,配置文件没有问题
现在出现的问题是报异常,始终抱的都是HQL语句异常,情况如下所示:
严重: Servlet.service() for servlet action threw exception
org.hibernate.hql.QueryExecutionRequestException: Not supported for select queries [from com.just.doing.entity.TbUser tbUser where tbUser.userName=? and tbUser.userPassword=?]
at org.hibernate.hql.ast.QueryTranslatorImpl.errorIfSelect(QueryTranslatorImpl.java:278)
at org.hibernate.hql.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:395)
at org.hibernate.engine.query.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:259)
at org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:1141)
at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:94)
at com.just.doing.dao.impl.TbUserDaoImpl.getUser(TbUserDaoImpl.java:18)
at com.just.doing.biz.impl.TbUserBizImpl.getUser(TbUserBizImpl.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy2.getUser(Unknown Source)
at com.just.doing.action.TbUserAction.Login(TbUserAction.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)OK,小弟真心讨教,我这是怎么回事啊??以前没学SSH的时候做个登录都没这么复杂,怎么现在就变的如此纠结了啊??是学傻了??
请路过的大侠指教!!!!!如果有好的登录范例,请贴出,让我等小辈观摩学习之用。。或者发送到 小弟不胜感激!!!
解决方案 »
- Caused by: java.lang.ClassNotFoundException: sqlcategory
- jsp导出到excel
- JXL问题超级救助
- 求教选中多条记录一次性删除的做法?
- $$$$$$ 散分! 恳求高手看看我的代码 能不能找到工作
- 高分请教,jfreechart如何画一个闭合的走势图?如何在同一张图片上画两个走势图呢?
- 关于下拉框的问题
- 请问如何判断一个字符串是否数字,还有如何把int转换成string!!!高分请教!!!
- jsp中out.print的小问题。请来挣分!!再线等待!!!
- 求助,JAVA实现excel表格的可视化修改。
- struts2 页面中给Action中的List类型对象赋值问题。比较急。
- 一个小问题!!!明白的进啊!
struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config>
<data-sources />
<form-beans >
<form-bean name="cityAction" type="org.apache.struts.action.DynaActionForm">
<form-property name="tbUser" type="com.just.doing.entity.TbUser" />
</form-bean>
</form-beans>
<global-exceptions />
<global-forwards />
<action-mappings>
<action path="/tbUser" name="cityAction" parameter="operate" type="org.springframework.web.struts.DelegatingActionProxy">
<forward name="index" path="success.jsp" />
<forward name="default" path="default.jsp" />
</action>
</action-mappings>
<message-resources parameter="com.just.doing.struts.ApplicationResources" />
</struts-config>好像在做查询的时候不用交给spring管理吧?
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>
</bean>
<!-- 建立事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 建立事务通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="*" propagation="SUPPORTS"/>
</tx:attributes>
</tx:advice>
<!-- 为事务通知创建切面 -->
<aop:config>
<aop:pointcut expression="execution(* com.just.doing.biz.impl.*Impl.*(..))" id="Method"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="Method"/>
</aop:config>
<!-- 定义dao对象 -->
<bean id="tbUserDao" class="com.just.doing.dao.impl.TbUserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 定义biz对象 -->
<bean id="tbUserBiz" class="com.just.doing.biz.impl.TbUserBizImpl">
<property name="tbUserDao" ref="tbUserDao" />
</bean>
<!-- 定义action对象 -->
<bean name="/tbUser" class="com.just.doing.action.TbUserAction">
<property name="tbUserBiz" ref="tbUserBiz" />
</bean>
</beans>再次感谢
这是更新操作,换个查询方法吧
你的那段查询判断代码应该改成:public boolean getUser(TbUser user) {
Session session=super.getSession();
String hql="from TbUser tbUser where tbUser.userName=? and tbUser.userPassword=?";
Query query=session.createQuery(hql);
query.setString(0, user.getUserName());
query.setString(1, user.getUserPassword());
list list=query.list();
if (list.size>0) {
return true;
}else {
return false;
}
}
query.setString(2, user.getUserPassword());
改成红色的,不知道可行否。
改成from TbUser as tu where tu.userName=? and tu.userPassword=?
public class TbUserDaoImpl extends HibernateDaoSupport implements TbUserDao{
public boolean getUser(TbUser user) {
Session session=super.getSession();
这里没有必要去拿session. 你应经继承了hibernateDaoSupport. 直接拿spring提供的模板就OK乐。CRUD 操作很简单的。
改成
from TbUser tbUser where tbUser.userName=:userName and tbUser.userPassword=:userPassword;
试试。
List list=query.list();
此代码什么意思呢??
Session session=super.getSession();
String hql="from TbUser tbUser where tbUser.userName=? and tbUser.userPassword=?";
Query query=session.createQuery(hql);
query.setString(0, user.getUserName());
query.setString(1, user.getUserPassword());
list list=query.list();
if (list.size>0) {
return true;
}else {
return false;
}
}[code]
数据库查询用getHibernateTemplate()好了
查询用getHibernateTemplate()这个方法,
还有查询出来的结果不是int型的?executeUpdate()这方法不是用来查询的
//条件查询,参数索引值从0开始,索引位置。通过setString,setParameter设置参数
String hql = "from Users where name=? and passwd=?";
Query query = session.createQuery(hql);
//第1种方式
// query.setString(0, "name1");
// query.setString(1, "password1");
//第2种方式
query.setParameter(0, "name1",Hibernate.STRING);
query.setParameter(1, "password1",Hibernate.STRING);
List<Users> list = query.list();
for(Users users : list){
System.out.println(users.getId());
}
List list =getHibernateTemplate().find(hql);
if(list!=null){
return;
}else{
false;
}
受教颇多啊。。那请问不用上面的方法
像楼上说的那样只用hibernate封装的方法如load/get怎么做登录呢??
List list=query.list();
此代码什么意思呢??
类型转换而已,如果你不加在前面就要加上(List),
还有,你的spring-config.xml文件好像没有映射
<property name="mappingResources">
<list><value>com/Northwind/pojo/Products.hbm.xml</value></list>
</property>