一、集成的注意事项
**SessionFactory的创建交由IOC容器来管理,通过Configuration对象创建。 Hibernate事务交给spring的声明式事务管理。 现可以通过spring配置,依赖IOC容器,DI注入来实现。**
两种方式:
方式1 Spring直接加载hibernate.cfg.xml文件的方式整合
方式2 连接池交给spring管理 【一部分配置写到hibernate中(hibernate常用配置),一部分在spring中完成(sessionFactory注入,dataSource连接池)】
二、具体步骤
1、导入所需要的hibernate、Spring的jar包
核心:
spring-orm-3.2.18.RELEASE.jar 【spring对hibernate的支持】
spring-tx-3.2.18.RELEASE.jar 【事务相关】
** 数据库连接所需要的包:**
** 2、实体类Student**
package entity;
public class Student {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "user [id=" + id + ", name=" + name + "]";
}
}
student.hbm.xml
<?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">
<hibernate-mapping package="entity">
<class name="entity.Student" table="user">
<id name="id" column="id">
<generator class="native">
</generator>
</id>
<property name="name" column="name"></property>
</class>
</hibernate-mapping>
**3、配置文件 **
方式一: Spring直接加载hibernate.cfg.xml文件的方式整合
Application.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="hibernate.cfg.xml"></property>
</bean>
</beans>
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">
<hibernate-configuration>
<session-factory>
<!-- 数据库连接的参数配置 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mybase?serverTimezone=UTC&useSSL=false</property>
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<!-- 数据库方言-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 其他常用配置 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化输出sql语句-->
<property name="hibernate.format_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!--映射配置 -->
<mapping resource="entity/student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
**方式2 : **连接池交给spring管理 【一部分配置写到hibernate中(hibernate常用配置),一部分在spring中完成(sessionFactory注入,dataSource连接池)】
Application.xml配置文件
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 实例化连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>
<property name="jdbcUrl"
value="jdbc:mysql://localhost:3306/mybase?serverTimezone=UTC&useSSL=false"></property>
<property name="user" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<!--定义sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 注入数据库对象 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 映射配置 -->
<property name="mappingResources">
<list>
<value>entity/student.hbm.xml</value>
</list>
</property>
<!-- 常用配置和数据库方言 -->
<property name="hibernateProperties">
<props>
<prop key="dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
</bean>
</beans>
4.StudentDao类
public interface schoolDao {
/*按学号查询学生*/
public Student findStudent(int id);
/*按学号删除学生*/
public void deleteStudent(int id);
}
**5、schoolDaoImpl **
public class schoolDaoImpl implements schoolDao {
private static Session session = null;
private Student student = new Student();
/*获取对应的的session*/
public Session getSession() {
ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml");
SessionFactory sf = (SessionFactory) ac.getBean("sessionFactory");
if (session == null) {
session = sf.openSession();
}
return session;
}
@Override
public Student findStudent(int id) {
Transaction ts = getSession().beginTransaction();
student = (Student) getSession().get(Student.class, id);
/*System.out.println(u);
System.out.println("success!!!");*/
ts.commit();
getSession().close();
return student;
}
@Override
public void deleteStudent(int id) {
Transaction ts = getSession().beginTransaction();
getSession().delete((Student) getSession().get(Student.class, id));
ts.commit();
getSession().close();
}
}
6、编写test测试类
public class test {
public static void main(String[] args) {
schoolDao schooldao=new schoolDaoImpl();
System.out.println(schooldao.findStudent(1));
}
}
三、出错解决
1、Error creating bean with name 'sessionFactory' defined in class path resource
出现这个问题是sessionFactory创建失败,首先排查可能是使用的hibernate文件中实体映射错误,注意hbm.xml和xml中的映射是否一致(注意区分大小写),使用注解@Column(name="xx")中对应的数据表的字段,同样注意大小写。
看到所报错误的最后面
如果是maven项目,有可能配置文件没有编译到classes里面、检查有没有其他遗漏的配置文件。
2、.jar版本问题
如果遇到版本问题,更换版本重新尝试。
感谢阅读完!!!如果文章对你有用,就点点赞吧!!
版权归原作者 雨中等枫来 所有, 如有侵权,请联系我们删除。