spring2.5整合hibernate3.0

Spring整合Hibernate实战
本文介绍了一个使用Spring框架整合Hibernate进行数据库操作的完整示例。包括配置文件设置、实体类定义、DAO层接口及其实现、业务逻辑层接口及其实现,并通过单元测试验证功能正确性。
第一步:配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:context="http://www.springframework.org/schema/context" 
 5        xmlns:aop="http://www.springframework.org/schema/aop"
 6        xmlns:tx="http://www.springframework.org/schema/tx"
 7        xsi:schemaLocation="http://www.springframework.org/schema/beans
 8            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 9            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
10            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
11            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
12 
13      <!-- <context:property-placeholder location="classpath:jdbc.properties"/> -->
14      <context:annotation-config/>
15      <!-- 配置dataSource -->
16      <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
17         <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
18         <property name="url" value="jdbc:oracle:thin:@192.168.1.10:1521:orcl"/>
19         <property name="username" value="tsrescue"/>
20         <property name="password" value="123456"/>
21          <!-- 连接池启动时的初始值 -->
22          <property name="initialSize" value="1"/>
23          <!-- 连接池的最大值 -->
24          <property name="maxActive" value="500"/>
25          <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
26          <property name="maxIdle" value="2"/>
27          <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
28          <property name="minIdle" value="1"/>
29      </bean>
30      <!-- 配置sessionFactory -->
31      <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
32          <property name="dataSource" ref="dataSource"/>
33          <property name="mappingResources">
34             <list>
35               <value>cn/itcast/bean/Person.hbm.xml</value>
36             </list>
37          </property>
38          <property name="hibernateProperties">
39              <props>
40                 <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
41                 <prop key="hibernate.show_sql">true</prop>
42                 <prop key="hibernate.format_sql">true</prop>
43                 <prop key="hibernate.current_session_context_class">thread</prop>这个配置不需要!!!!!!!!!!!!!!
44             </props>
45            
46          </property>
47     </bean>
48     <!-- spring提供的针对hibernate的事务管理器 -->
49     <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
50           <property name="sessionFactory" ref="sessionFactory"/>
51     </bean>
52     <!-- 基于注解的方式声明事务 -->
53     <tx:annotation-driven transaction-manager="txManager"/>
54     <bean id = "personService" class="cn.itcast.Service.Impl.PersonServiceBean"/>
55 </beans>

 

代码部分:

1.person.java

 

 1 package cn.itcast.bean;
 2 
 3 public class Person {
 4     private Integer id;
 5     private String name;
 6     
 7     public Person() {}
 8 
 9     public Person(String name) {
10         this.name = name;
11     }
12     
13     public Integer getId() {
14         return id;
15     }
16     public void setId(Integer id) {
17         this.id = id;
18     }
19     public String getName() {
20         return name;
21     }
22     public void setName(String name) {
23         this.name = name;
24     }
25     
26     
27     
28 }

 

2.Person.hbm.xml

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <!-- Generated 2016-6-1 10:08:44 by Hibernate Tools 3.4.0.CR1 -->
 5 <hibernate-mapping package="cn.itcast.bean">
 6     <class name="Person" table="person">
 7         <id name="id">
 8             <generator class="native" />
 9         </id>
10         <property name="name"/>
11     </class>
12 </hibernate-mapping>

3.PersonService 接口

 1 package cn.itcast.Service;
 2 
 3 import java.util.List;
 4 
 5 import cn.itcast.bean.Person;
 6 
 7 public interface PersonService {
 8 
 9     public abstract void save(Person person);
10 
11     public abstract void update(Person person);
12 
13     public abstract Person getPerson(Integer personId);
14 
15     public abstract void delete(Integer personId);
16 
17     public abstract List<Person> getPersons();
18 
19 }

4.PersonService接口的实现类PersonServiceBean 

 1 package cn.itcast.Service.Impl;
 2 
 3 import java.util.List;
 4 
 5 import javax.annotation.Resource;
 6 
 7 import org.hibernate.Session;
 8 import org.hibernate.SessionFactory;
 9 import org.springframework.transaction.annotation.Propagation;
10 import org.springframework.transaction.annotation.Transactional;
11 
12 import cn.itcast.Service.PersonService;
13 import cn.itcast.bean.Person;
14 @Transactional
15 public class PersonServiceBean implements PersonService {
16     @Resource
17     private SessionFactory sessionFactory;
18     
19     @Override
20     public void save(Person person){
21         //取被spring容器管理的session
22         sessionFactory.getCurrentSession().persist(person);
23     }
24     
25     @Override
26     public void update(Person person){
27         sessionFactory.getCurrentSession().merge(person);
28     }
29     
30     @Transactional(propagation = Propagation.NOT_SUPPORTED,readOnly = true)
31     @Override
32     public Person getPerson(Integer personId){
33         return (Person) sessionFactory.getCurrentSession().get(Person.class, personId);
34         
35     }
36     
37     @Override
38     public void delete(Integer personId){
39         sessionFactory.getCurrentSession().delete(sessionFactory.getCurrentSession().load(Person.class, personId));
40     }
41     
42     @Transactional(propagation =Propagation.NOT_SUPPORTED,readOnly = true)
43     @SuppressWarnings("unchecked")
44     @Override
45     public List<Person> getPersons(){
46         return sessionFactory.getCurrentSession().createQuery("from person").list();
47         
48     }
49 }

5.测试类

 1 package cn.itcast.Service.Impl;
 2 
 3 import static org.junit.Assert.*;
 4 
 5 import java.util.List;
 6 
 7 import org.junit.BeforeClass;
 8 import org.junit.Test;
 9 import org.springframework.context.ApplicationContext;
10 import org.springframework.context.support.ClassPathXmlApplicationContext;
11 
12 import cn.itcast.Service.PersonService;
13 import cn.itcast.bean.Person;
14 
15 public class PersonServiceBeanTest {
16     private static PersonService ps;
17     @BeforeClass
18     public static void setUpBeforeClass() throws Exception {
19         try {
20             ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
21             ps = (PersonService) ctx.getBean("personService");
22         } catch (Exception e) {
23             e.printStackTrace();
24         }
25     }
26 
27     @Test
28     public void testSave() {
29         ps.save(new Person("小明3"));
30     }
31 
32     @Test
33     public void testUpdate() {
34         Person person = ps.getPerson(1);
35         person.setName("小明修改版");
36         ps.update(person);
37     }
38 
39     @Test
40     public void testGetPerson() {
41         Person p = ps.getPerson(1);
42         System.out.println(p.getName());
43     }
44 
45     @Test
46     public void testDelete() {
47         ps.delete(2);
48     }
49 
50     @Test
51     public void testGetPersons() {
52         List<Person> list = ps.getPersons();
53         for (Person person : list) {
54             person.getName();
55         }
56     }
57 
58 }

 

采用PyQt5框架与Python编程语言构建图书信息管理平台 本项目基于Python编程环境,结合PyQt5图形界面开发库,设计实现了一套完整的图书信息管理解决方案。该系统主要面向图书馆、书店等机构的日常运营需求,通过模块化设计实现了图书信息的标准化管理流程。 系统架构采用典型的三层设计模式,包含数据存储层、业务逻辑层和用户界面层。数据持久化方案支持SQLite轻量级数据库与MySQL企业级数据库的双重配置选项,通过统一的数据库操作接口实现数据存取隔离。在数据建模方面,设计了包含图书基本信息、读者档案、借阅记录等核心数据实体,各实体间通过主外键约束建立关联关系。 核心功能模块包含六大子系统: 1. 图书编目管理:支持国际标准书号、中国图书馆分类法等专业元数据的规范化著录,提供批量导入与单条录入两种数据采集方式 2. 库存动态监控:实时追踪在架数量、借出状态、预约队列等流通指标,设置库存预警阈值自动提醒补货 3. 读者服务管理:建立完整的读者信用评价体系,记录借阅历史与违规行为,实施差异化借阅权限管理 4. 流通业务处理:涵盖借书登记、归还处理、续借申请、逾期计算等标准业务流程,支持射频识别技术设备集成 5. 统计报表生成:按日/月/年周期自动生成流通统计、热门图书排行、读者活跃度等多维度分析图表 6. 系统维护配置:提供用户权限分级管理、数据备份恢复、操作日志审计等管理功能 在技术实现层面,界面设计遵循Material Design设计规范,采用QSS样式表实现视觉定制化。通过信号槽机制实现前后端数据双向绑定,运用多线程处理技术保障界面响应流畅度。数据验证机制包含前端格式校验与后端业务规则双重保障,关键操作均设有二次确认流程。 该系统适用于中小型图书管理场景,通过可扩展的插件架构支持功能模块的灵活组合。开发过程中特别注重代码的可维护性,采用面向对象编程范式实现高内聚低耦合的组件设计,为后续功能迭代奠定技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值