新手整合hibernate和spring遇到的问题 hibernatespring 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.我测试了下程序是运行到getcurrentsession就停止了,是因为没初始化吗?要怎么配置初始化(XML方式)?如果不是因为这个问题,是因为啥(30)2.能否同时使用XML和注解配置spring,以此程序为例,sessionFactory是按照XML配而下面EmployeeDao我想用注释配是否可以,该怎么做?(spring)学得不精(30)3.下面的transactionManager配置是干什么用的myeclipse自动生成了,可我似乎没用到啊(10)4.求详解一下currentsession,之前学hibernate没用过,都是打开session,然后自己关闭session,整合spring的时候一直不理解,网上的整合的例子似乎从来不关闭session,难道不用关闭么?一直使用getcurrentsession是否就意味着当只有一个用户时永远只有一个session存在?(10分) 1.你都没创建session,哪来的session呢?2.既然你都继承了HibernateDaoSupport这个类,直接this.getHibernateTample.save(Object obj)就可以保存了呀,干嘛还要session呢?3.那个是事务控制4.session开了就必须关闭,和数据库一样。至于在哪儿关闭,如果个人做练习就可以随便点,哪儿开的哪儿关。如果是项目的话最好还是统一的关闭,这时是在spring里面配置的。 我就是想问在这里怎么弄session呢,难道也要价值spring然后getbean么,HibernateDaoSupport忘修改了,hibernate4+spring不支持hibernateTample了貌似所以才在改用getcurrentsession,但不知道该怎么改 这两个配置文件怎么一样?是不是拷错了,你都没有配置dataSource 就你的这个问题,一看就知道是没有注入sessionfactory的原因,因为你的配置文件中没有配置数据源骚年,建议你上spring的官网去看文档,里面有详细的介绍。比起你从网上东拼西凑弄出来的更能学到知识。http://docs.spring.io/spring/docs/4.0.8.RELEASE/spring-framework-reference/htmlsingle/这是4.0.8版本的详细介绍文档看这个还有一个好处就是锻炼你的英语水平,其实不必每个单词都要认识,我英语连4级都没过,基本上还是能够看懂的 把Hibernate的配置文件也贴出来看看 去看官方文档吧!骚年,你的Datasource没有注入,就拿不到工厂 给你一个参考例子: <context:annotation-config/> <context:component-scan base-package="cn.study"></context:component-scan> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/hibernate"/> <property name="username" value="root"/> <property name="password" value="123456"/></bean> //此时通过代码输入可以判断生成的是org.hibernate.internal.SessionFactoryImpl@151b0a5 <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="annotatedClasses"> //使用注解的方式注释,即在User中以注解声明 <list> <value>cn.study.model.User</value>//可以有多个值,对应多张表 </list> </property> <!-- //也可以设置mappingLocations <property name="mappingResources">//使用xml的方式进行配置 <list> <value>product.hbm.xml</value> </list> </property> --> <property name="hibernateProperties"> <props> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> </bean></beans>@Component("userService") //可以省略这个名字,因为默认是userServicepublic class UserService { public UserDao dao; //省略其他get,set方法 @Resource public void setDao(UserDao dao) { this.dao = dao; } public void addUser(User u){ dao.save(u); }}@Entitypublic class User { public int id; public String name; //省略其他get,set方法 @Id @GeneratedValue public int getId() { return id; }}@Componentpublic class UserDaoImpl implements UserDao { public SessionFactory sessionFactory; public SessionFactory getSessionFactory() { return sessionFactory; } @Resource public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Override public void save(User user){ Session s=sessionFactory.openSession(); s.beginTransaction(); s.save(user); s.getTransaction().commit(); }}public class ServiceTest { @Test public void AddTest() throws Exception{ ApplicationContext ctx=new ClassPathXmlApplicationContext("bean.xml"); UserService service=ctx.getBean("userService", UserService.class); User user=new User(); user.setName("general"); service.addUser(user); System.out.println(service.getDao()); }} hibernate.cfg.xml贴错了,重新贴了<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration><session-factory> <property name="myeclipse.connection.profile">myconnector</property> <property name="connection.url">jdbc:mysql://localhost:3306/ssh?characterEncoding=UTF-8</property> <property name="connection.username">root</property> <property name="connection.password">admin</property> <property name="connection.driver_class"> com.mysql.fabric.jdbc.FabricMySQLDriver </property> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="show_sql">true</property> <property name="format_sql">true</property> <mapping resource="com/ssh/bean/Employee.hbm.xml"></mapping></session-factory></hibernate-configuration>白天有事8L的办法我晚上再看看 hibernate版本是多少?DAO中的sessionFactory可以不写getter/setter方法的,你注入了就可以了,另外,Spring配置文件里面,你注入的SessionFactory可以用数据源的方式注入,dataSource,详细情况看博客:http://blog.csdn.net/u012453619/article/details/40261663 楼主都没有配置datasource...请看8楼的列子。 extjs form表单中需要提交的字段较多怎么办 web.xml 会fusionchart的牛人来 一个自定义类的赋值问题? 居中问题 关于web.xml里配置servlet路径的问题 java和javascript有什么区别? 急死人了! 为什么我装的Tomcat找不到...\WEB-INF\jsp\beans\ 这个文件夹呀? 使用dwz分页功能点击页码没有响应 求大神指教,小弟刚搞spring 就碰这个异常折腾了好久 sql2005 和tomcat6 数据库提取网页中数据为乱码问题
2.既然你都继承了HibernateDaoSupport这个类,直接this.getHibernateTample.save(Object obj)就可以保存了呀,干嘛还要session呢?
3.那个是事务控制
4.session开了就必须关闭,和数据库一样。至于在哪儿关闭,如果个人做练习就可以随便点,哪儿开的哪儿关。如果是项目的话最好还是统一的关闭,这时是在spring里面配置的。
http://docs.spring.io/spring/docs/4.0.8.RELEASE/spring-framework-reference/htmlsingle/
这是4.0.8版本的详细介绍文档
看这个还有一个好处就是锻炼你的英语水平,其实不必每个单词都要认识,我英语连4级都没过,基本上还是能够看懂的
去看官方文档吧!骚年,你的Datasource没有注入,就拿不到工厂
<context:annotation-config/>
<context:component-scan base-package="cn.study"></context:component-scan>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/hibernate"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean> //此时通过代码输入可以判断生成的是org.hibernate.internal.SessionFactoryImpl@151b0a5
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="annotatedClasses"> //使用注解的方式注释,即在User中以注解声明
<list>
<value>cn.study.model.User</value>//可以有多个值,对应多张表
</list>
</property>
<!-- //也可以设置mappingLocations
<property name="mappingResources">//使用xml的方式进行配置
<list>
<value>product.hbm.xml</value>
</list>
</property> --> <property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
</beans>
@Component("userService") //可以省略这个名字,因为默认是userService
public class UserService {
public UserDao dao;
//省略其他get,set方法
@Resource
public void setDao(UserDao dao) {
this.dao = dao;
}
public void addUser(User u){
dao.save(u);
}
}@Entity
public class User {
public int id;
public String name;
//省略其他get,set方法
@Id
@GeneratedValue
public int getId() {
return id;
}}
@Component
public class UserDaoImpl implements UserDao {
public SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
@Resource
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public void save(User user){
Session s=sessionFactory.openSession();
s.beginTransaction();
s.save(user);
s.getTransaction().commit();
}
}
public class ServiceTest {
@Test
public void AddTest() throws Exception{
ApplicationContext ctx=new ClassPathXmlApplicationContext("bean.xml");
UserService service=ctx.getBean("userService", UserService.class);
User user=new User();
user.setName("general");
service.addUser(user);
System.out.println(service.getDao());
}}
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration><session-factory>
<property name="myeclipse.connection.profile">myconnector</property>
<property name="connection.url">jdbc:mysql://localhost:3306/ssh?characterEncoding=UTF-8</property>
<property name="connection.username">root</property>
<property name="connection.password">admin</property>
<property name="connection.driver_class">
com.mysql.fabric.jdbc.FabricMySQLDriver
</property>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping resource="com/ssh/bean/Employee.hbm.xml"></mapping></session-factory></hibernate-configuration>白天有事8L的办法我晚上再看看