本来以为把自己原来的项目复制一下,添加一下支持就好了,没想到遇到那么多错误,还是记下来吧~
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。