本来以为把自己原来的项目复制一下,添加一下支持就好了,没想到遇到那么多错误,还是记下来吧~
1、hibernate逆向工程不知道是不是自己选择的不对,也看不太懂,自动生成的文件不是很完整,遇到不同的错误各种google然后一点点手动添加的代码,现在把一个简单的管理员登录功能的部分代码粘出来以后参考~
这个不同于SQL语句,from Manager而不是数据库中的表名,是映射之后的类名!
package com.DAO.impl; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import com.DAO.ManagerDAO; import com.hibernate.HibernateSessionFactory; public class ManagerDAOImpl implements ManagerDAO { @Override public boolean login(String username, String password) { // TODO Auto-generated method stub Session session = HibernateSessionFactory.getSession(); Query query = session.createQuery("from Manager where username='" + username + "' and password='" + password + "'"); List list = query.list(); if (list.size() > 0) { return true; } else { return false; } } }
hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!-- Generated by MyEclipse Hibernate Tools. --> <hibernate-configuration> <session-factory> <property name="connection.characterEncoding">UTF-8</property> <property name="dialect"> org.hibernate.dialect.SQLServerDialect </property> <property name="connection.url"> jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Meal </property> <property name="connection.username">sa</property> <property name="connection.password">123456</property> <property name="connection.driver_class"> com.microsoft.sqlserver.jdbc.SQLServerDriver </property> <property name="myeclipse.connection.profile"> SQL SERVER 2008 </property> <mapping resource="./Manager.hbm.xml" /> </session-factory> </hibernate-configuration>
Manager.hbm.xml
这个里面class 的name属性刚开始没有写上包名,写完整就好了。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="com.entity.Manager" table="admin" schema="dbo" catalog="Meal"> <id name="username" type="java.lang.String"> <column name="username" length="20" /> <generator class="assigned"></generator> </id> <property name="password" type="java.lang.String"> <column name="password" length="20" /> </property> </class> </hibernate-mapping>
2、还有一个非常弱智的问题Debug了半天。。我通常喜欢复制一个文件然后修改,因为好多代码差不多,写起来麻烦。。比如ManagerDAOImpl和StudentDAOImpl在刚开始写登录的时候就一样。。结果悲剧了。。写Student的时候实现的接口是ManagerDAO,这样会报错,说无法转换类型。在applicantionContext.xml中,注入了studentDAO,这里顺便解释一下之前的困惑。。表示JAVA考那么低的分真是不亏啊。。在LoginService的实现里,有成员变量SduentDAO(接口)类型的studentDAO,然后配置文件中该变量的类型是StudentDAOImpl,说无法转换。。其实是可以的,但前提是StudentDAOImpl实现了StudentDAO的接口才行,这样也是多态性的体现。所以之前懒懒的复制代码结果实现的接口搞错了,转换也就会报错了。。
<?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:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="managerDAO" class="com.DAO.impl.ManagerDAOImpl" /> <bean id="studentDAO" class="com.DAO.impl.StudentDAOImpl" /> <bean id="loginService" class="com.service.impl.LoginServiceImpl"> <property name="managerDAO"> <ref bean="managerDAO" /> </property> <property name="studentDAO"> <ref bean="studentDAO" /> </property> </bean> <bean id="loginAction" class="com.action.LoginAction"> <property name="loginService"> <ref bean="loginService" /> </property> </bean> </beans>
3、LoginService是以注入的形式new的,在LoginAction的构造函数中获取session和request对象就会无法生成LoginAction这个bean。