以Student对象为例:
1,编写domain;
Student类:
public class Student { private Long id; private String name; private Integer age; //此处省略getter和setter方法 }
2,编写映射文件;
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.gxxy.domain"> <class name="Student"> <id name="id"> <generator class="native" /> </id> <property name="name" /> <property name="age" /> </class> </hibernate-mapping>
3,编写Dao接口;
package com.gxxy.dao; import java.util.List; import com.gxxy.domain.Student; public interface IStudentDAO { /** * 保存学生 * * @param st */ void save(Student st); /** * 删除学生 * * @param st */ void delete(Student st); /** * 更新学生信息 * * @param st */ void update(Student st); /** * 获取单个学生信息 * * @param id */ Student get(Long id); /** * 获取所有学生信息 * * @return */ List<Student> list(); }
4,编写Dao实现
①:拷贝jar包(hiberante中必须的包,数据库驱动,Spring的core,test,bean,context);
hibernate中所需要的包:
Spring中所需要的包:
②:Spring配置文件:
1)-配置datasource;
2)-添加并配置db.properties文件;
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" 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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd "> <!-- 加载配置文件内容 jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql:///test jdbc.username=root jdbc.password=root --> <context:property-placeholder location="db_propeties"/> <!-- 配置连接数据库的连接池 dataSource--> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> </beans>
3)配置sessionFactory
1-导入Spring中的jar jdbc/tx/orm;
2-使用LocalSessionFactoryBean来创建SessionFactory;
1.配置dataSource;
2.配置hibernate的常规相关配置;
3.配置映射文件(mappingDirectoryLocations)
<!-- 配置一个SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <!-- 配置连接数据库的信息 --> <property name="dataSource" ref="dataSource"></property> <!-- 配置hibernate的常规相关配置 --> <property name="hibernateProperties"> <value> hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.hbm2ddl.auto=none hibernate.show_sql=true </value> </property> <!-- 配置*.hbm.xml的位置(告诉Spring我的*.hbm.xml在哪个包中) 注意:value值为路径 --> <property name="mappingDirectoryLocations" value="com/gxxy/domain"></property> <!-- 配置多个映射文件的写法 <property name="mappingDirectoryLocations"> <list> <value>com/gxxy/ssh/proj/domain</value> <value>com/gxxy/ssh/proj/domain</value> <value>com/gxxy/ssh/proj/domain</value> <value>com/gxxy/ssh/proj/domain</value> <value>com/gxxy/ssh/proj/domain</value> <value>com/gxxy/ssh/proj/domain</value> <value>com/gxxy/ssh/proj/domain</value> </list> </property> --> </bean>
4)编写Dao:
1,直接在Dao中注入一个SessionFactory;
2,在Dao中直接使用SessionFactory.getCurrentSession()来得到我们需要的session;
package com.gxxy.dao.impl; import java.util.List; import org.hibernate.Session; import org.hibernate.SessionFactory; import com.gxxy.dao.IStudentDAO; import com.gxxy.domain.Student; public class StudentDaoImpl implements IStudentDAO { private SessionFactory sessionFactory; // setter 注入 public void setSessionFactory(SessionFactory session) { this.sessionFactory = session; } @Override public void save(Student st) { Session session = sessionFactory.getCurrentSession(); session.save(st); } @Override public void delete(Student st) { Session session = sessionFactory.getCurrentSession(); session.delete(st); } @Override public void update(Student st) { Session session = sessionFactory.getCurrentSession(); session.update(st); } @Override public Student get(Long id) { Session session = sessionFactory.getCurrentSession(); return (Student) session.get(Student.class, id); } @SuppressWarnings("unchecked") @Override public List<Student> list() { Session session = sessionFactory.getCurrentSession(); return session.createQuery("SELECT stu FROM Student stu").list(); } }
5)在Spring中配置Dao;
<!-- Dao --> <bean id="dao" class="com.gxxy.dao.impl.StudentDaoImpl"> <property name="sessionFactory" ref="sessionFactory"></property> </bean>
5,编写Service:
1)编写service接口和实现;
service 接口
package com.gxxy.service; import java.util.List; import com.gxxy.domain.Student; public interface IStudentServiceDAO { /** * 保存学生 * * @param st */ void save(Student st); /** * 删除学生 * * @param st */ void delete(Student st); /** * 更新学生信息 * * @param st */ void update(Student st); /** * 获取单个学生信息 * * @param id */ Student get(Long id); /** * 获取所有学生信息 * * @return */ List<Student> list(); }
service接口的实现
package com.gxxy.service.impl; import java.util.List; import com.gxxy.dao.IStudentDAO; import com.gxxy.domain.Student; import com.gxxy.service.IStudentServiceDAO; public class StudnetServiceImpl implements IStudentServiceDAO { private IStudentDAO dao; // setter注入dao对象 public void setDao(IStudentDAO dao) { this.dao = dao; } @Override public void save(Student st) { dao.save(st); } @Override public void delete(Student st) { dao.delete(st); } @Override public void update(Student st) { dao.update(st); } @Override public Student get(Long id) { return dao.get(id); } @Override public List<Student> list() { return dao.list(); } }
2)在Spring中配置servicebean;
<!-- service --> <bean id="service" class="com.gxxy.service.impl.StudnetServiceImpl"> <property name="dao" ref="dao"></property> </bean>
3)配置事务:
1,配置transcationMaanager,使用HibernateTransactionManager,并传入一个sessionFactory;
<!-- 配置事务管理器 --> <bean id="txMgr" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean>
2,配置事务属性;
3,配置事务切面;
<!-- 配置事务属性 --> <aop:config> <aop:pointcut expression="execution(* com.gxxy.service.*.*(..))" id="stuService"/> <aop:advisor advice-ref="advice" pointcut-ref="stuService"/> </aop:config> <tx:advice id="advice" transaction-manager="txMgr"> <tx:attributes> <tx:method name="get*" read-only="true"/> <tx:method name="list*" read-only="true"/> <tx:method name="*"/> </tx:attributes> </tx:advice>
测试类:
package com.gxxy.test; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.gxxy.domain.Student; import com.gxxy.service.IStudentServiceDAO; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:ApplicationContext.xml") public class OperateStudentTest { @Autowired private IStudentServiceDAO service; @Test public void testSave() { service.save(new Student("张三", 18)); } @Test public void testdelete() { Student student = new Student(5L); service.delete(student); } @Test public void testUpdate() { Student st = new Student("李四", 16); st.setId(8L); service.update(st); } @Test public void testget() { Student student = service.get(8L); System.out.println(student); } @Test public void testlist() { List<Student> list = service.list(); System.out.println(list); } }