- 浏览: 223771 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (244)
- java (23)
- java多线程 (7)
- 综合 (1)
- oracle10g (24)
- div+css (1)
- Flex (27)
- java Nio (1)
- java设计模式 (8)
- struts2 (10)
- spring3.0 (5)
- SSH (9)
- dwr (5)
- hibernate3.6 (17)
- dom4j (1)
- sql优化 (5)
- Quartz任务调度框架 (1)
- AOP (3)
- JavaScript (18)
- jquery (3)
- JSF (9)
- ruby (1)
- 正则表达式 (1)
- 明日准备 (2)
- eclipse (3)
- gvim (1)
- CMS (1)
- linux (6)
- 杂 (4)
- java 设计模式 (1)
- MySql (10)
- JBPM (4)
- JSP技术 (1)
- Mybatis And Ibatis (2)
- 经验之谈 (10)
- WebService (1)
- java分布式(高性能,高可用,可伸缩) (0)
- springMvc (2)
- redis (0)
- ant (1)
- Nutz (6)
- 配置管理 (0)
- css+div (1)
- eChars (1)
- angularJs (1)
- D3 (3)
- Scala (1)
最新评论
-
Cobain_LI:
Cobain_LI 写道学习了,之前一直都没注意到有这样的问题 ...
js面向对象3--更简单的原型模式已经带来的问题以及解决办法 -
Cobain_LI:
Cobain_LI 写道学习了,之前一直都没注意到有这样的问题 ...
js面向对象3--更简单的原型模式已经带来的问题以及解决办法 -
Cobain_LI:
有个小失误,144和147行多了两个花括号
js面向对象2--js中工厂模式的演化(重要,详细) -
Cobain_LI:
学习了,之前一直都没注意到有这样的问题
js面向对象3--更简单的原型模式已经带来的问题以及解决办法 -
YTT1121:
有网络拓扑发现的源代码么,或者您会编写么?可以有偿求购,搞科研 ...
flex 之twaver1--简单网络拓扑实现
实例:使用hibernate 事务代理完成一个事务,添加一个人,这个人有两个地址。这是一个事务,要么全部插进去,要么谁也不插进去。
1,Person类
Person类的映射文件
2,Address类
4,Person的Action类
5,Person的业务Service类
6,Person数据库访问类
7,Address数据库访问类
8,添加人员的jsp页面
1,Person类
package com.dd.domain; import java.util.HashSet; import java.util.List; import java.util.Set; public class Person { private int id; private String name; private int age; private Set<Address> addresss = new HashSet<Address>(); 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; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Set<Address> getAddresss() { return addresss; } public void setAddresss(Set<Address> addresss) { this.addresss = addresss; } }
Person类的映射文件
<?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 default-lazy="true" default-access="property" package="com.dd.domain" > <class name="Person" dynamic-update="true" dynamic-insert="true" table="myperson"> <id name="id" column="id" type="integer"> <generator class="native"/> </id> <property name="name" type="string" column="name" length="20"/> <property name="age" type="integer" column="age" length="3"/> <set name="addresss" inverse="true" cascade="all" > <key column="personid"/> <one-to-many class="Address"/> </set> </class> </hibernate-mapping>
2,Address类
package com.dd.domain; public class Address { private int id; private String name; private String info; private String remark; private Person person; public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } 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; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } } Address类映射文件 <?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 default-lazy="true" default-access="property" package="com.dd.domain" > <class name="Address" dynamic-update="true" dynamic-insert="true" table="address"> <id name="id" column="id" type="integer"> <generator class="native"/> </id> <property name="name" type="string" column="NAME" length="20"/> <property name="info" type="string" column="INFO" length="30"/> <property name="remark" type="string" column="REMARK" length="30"/> <many-to-one name="person" class="Person" column="personid" not-null="true"></many-to-one> </class> </hibernate-mapping> 4,Sprping配置文件 <!-- Person业务类的事务代理,业务中实际用的是这个代理类 --> <bean id="myPersonServiceProxy" parent="baseTransactionProxy"> <property name="target"> <ref bean="personService"/> </property> </bean> <!-- 真是的PersonService类,实际业务中没有用到这个类,而是这个类的代理类 --> <bean id="personService" class="com.dd.service.PersonServiceImpl"> <property name="personDao" ref="personDao2"></property> <property name="addressDao" ref="addressDaoImp"></property> </bean> <!-- Person的数据库访问类 --> <bean id="personDao2" class="com.dd.dao.PersonDaoImpl"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 添加Person的Action类,注意这个类用的是sping生成的,而不是struts生成的 --> <bean id="addMyPerson" class="com.dd.action.AddPersonAction"> <property name="personService" ref="myPersonServiceProxy"></property> </bean> <!-- 添加地址的数据库访问类 --> <bean id="addressDaoImp" class="com.dd.dao.AddressDaoImp"> <property name="sessionFactory" ref="sessionFactory"></property> </bean>
4,Person的Action类
package com.dd.action; import com.dd.domain.Person; import com.dd.service.PersonServiceImpl; public class AddPersonAction { private PersonServiceImpl personService; private int number1; private int number2; private int sum; public int getNumber1() { return number1; } public void setNumber1(int number1) { this.number1 = number1; } public int getNumber2() { return number2; } public void setNumber2(int number2) { this.number2 = number2; } public int getSum() { return sum; } public void setSum(int sum) { this.sum = sum; } public String add(){ Person person = new Person(); person.setName("陈超样"); person.setAge(27); getPersonService().addPerson(person); return "success"; } public PersonServiceImpl getPersonService() { return personService; } public void setPersonService(PersonServiceImpl personService) { this.personService = personService; } }
5,Person的业务Service类
package com.dd.service; import com.dd.dao.AddressDaoImp; import com.dd.dao.PersonDaoImpl; import com.dd.domain.Address; import com.dd.domain.Person; public class PersonServiceImpl { private PersonDaoImpl personDao; private AddressDaoImp addressDao; public void addPerson(Person person) { Address address = new Address(); address.setName("美国"); address.setInfo("非常富有"); getPersonDao().addPerson(person); getAddressDao().addAddress(address); } public PersonDaoImpl getPersonDao() { return personDao; } public void setPersonDao(PersonDaoImpl personDao) { this.personDao = personDao; } public AddressDaoImp getAddressDao() { return addressDao; } public void setAddressDao(AddressDaoImp addressDao) { this.addressDao = addressDao; } }
6,Person数据库访问类
package com.dd.dao; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.dd.domain.Person; public class PersonDaoImpl extends HibernateDaoSupport { public void addPerson(Person person){ getHibernateTemplate().save(person); } }
7,Address数据库访问类
package com.dd.dao; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import com.dd.domain.Address; public class AddressDaoImp extends HibernateDaoSupport { public void addAddress(Address address) { getHibernateTemplate().save(address); } }
8,添加人员的jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <body> <s:form action="addMyPerson"> <s:textfield name="username" key="user"></s:textfield> <s:textfield name="password" key="pass"></s:textfield> <input type="button" value="注册"/> <s:submit value="添加"></s:submit> </s:form> </body> </html>
发表评论
-
项目中关于配置文件中密码的加密处理
2014-08-08 23:32 5996注:原创作品,转载请注明出处。 在项目中,为了项目 ... -
Hibernate 调用返回值的存储过程
2014-08-04 02:20 2809注:原创作品,转载请注明出处。 曾一度认为orac ... -
hibernate 的sqlQuery对象可以操作非映射的数据库表
2014-05-23 01:17 1111注:原创作品,分享以供交流学习,转载请注明出处。 一直 ... -
hibernate sql查询 标量,实体查询
2014-05-11 23:10 889注:原创作品,分享以供交流学习,转载请注明出处 本博文实例假 ... -
hibernate hql查询 select 语句 和 from语句
2014-05-11 21:37 3973注:原创作品,分享以 ... -
hibernate 基本事务
2014-03-24 21:45 544业务需求:增加一个人,这个人有两个地址,人是一张表, ... -
Hibernate 原生sql查询
2014-03-23 19:25 6761,Person package com.supan.bean ... -
hibernate一对多 双向 关联A(无连接表)
2014-03-17 00:27 897一,创建映射 1,多的一段 java文件中需要有一的属性,配置 ... -
hibernate多条件查询
2014-03-07 00:47 8091. Hibernate的Criteria这 ... -
javaSe中使用Hibernate
2014-03-01 18:16 489hibernate可用在javaSe中也可以用在java ... -
ssh中junit 测试 hibernate 1对多单向关联(不推荐使用这种关联)
2014-02-11 23:41 664主要介绍效率最低的一对多单向关联(实际中推荐使用一对多双向关联 ... -
hql select 子查询的属性可封装成list、具体对象,改变默认的数组类型
2014-01-22 16:35 7501,select子查询属性组成成list //把sel ... -
hql查询对象、查询属性
2014-01-22 15:34 606//查询整个对象集合 public void ... -
hibernate批量插入、删除、更新。
2014-01-22 15:09 741一:效率最不好的批量插入、更新。 //批量创建Pers ... -
hibernate多对一单向关联的两种映射方法
2014-01-22 14:19 525多对一关系实现两种方法: 1,在多的一段添加1的主键作为外键。 ... -
hibernate基本知识1
2014-01-21 16:21 529package com.supan.test; import ...
相关推荐
CGlib的工作原理基于Java的反射机制和字节码操作。当目标类不支持接口时,CGlib可以创建目标类的子类,并在子类中拦截方法调用,从而实现动态代理。具体步骤如下: 1. 创建Enhancer对象:这是CGlib的核心类,它可以...
CGlib是Java动态代理的一种实现方式,它不是依赖于Java的反射机制,而是通过生成目标类的子类来实现代理,因此在性能上通常优于基于接口的JDK动态代理。 CGlib动态代理的核心类包括`Enhancer`、`Callback`和`...
CGlib代理的工作原理是基于ASM库来生成子类并动态加载到内存中,当调用方法时,实际上是调用了被代理对象的方法。CGlib代理的创建过程主要包括以下几个步骤: 1. 创建Enhancer对象,它是CGlib的核心类,用于设置回...
这在Hibernate中非常有用,因为它允许动态生成实体类的代理,以便于实现懒加载、事务管理等特性。例如,你可以创建一个接口`Teller`,然后通过Enhancer和`MethodInterceptor`的实现,如`EchoCaller`,来拦截并处理`...
CGlib广泛应用于Spring AOP(面向切面编程)中,Spring使用它来创建AOP代理,实现事务管理、日志记录等切面功能。此外,它也常用于ORM框架如Hibernate中,为实体类提供透明的代理,以实现懒加载和其他高级特性。 ...
JDK的动态代理基于接口,如果目标类没有实现任何接口,就无法使用JDK的动态代理。而Cglib则解决了这个问题,它不依赖于接口,而是通过生成目标类的子类来实现动态代理。 **Cglib的核心组件** 1. **Enhancer**:这...
Cglib基于ASM库,能够在字节码层面操作Java类,通过生成子类来实现对目标类的扩展,而无需修改源代码。这种方法尤其适用于那些不支持接口或无法修改源代码的类。 2. **动态代理**:动态代理是Java中一个重要的概念...
首先,CGlib是一个基于ASM库的动态代理实现。ASM是一个字节码操作和分析框架,允许程序员生成和修改Java类和字节码。CGlib通过ASM在运行时创建新的子类,而不是接口的实现,来实现对目标对象的代理。这种方法使得...
这种方式比基于Java反射API的动态代理更高效,因为反射需要在运行时查找方法,而Cglib直接通过字节码操作实现。 在实际开发中,Cglib常用于AOP(面向切面编程)框架,例如Spring AOP。通过Cglib,Spring可以在不...
CGLIB被广泛应用于Spring AOP(面向切面编程)中,用于实现对目标对象的动态代理,以提供方法拦截、事务管理、性能监控等功能。 首先,我们要理解什么是动态代理。在Java中,动态代理是一种在运行时创建代理类的...
JDK的代理机制基于接口,而CGLib则通过继承实现,因此对于未实现接口的类,CGLib是更好的选择。 在实际项目中,CGLib常被用于AOP(面向切面编程)框架,如Spring。AOP允许开发者定义“切面”,即关注点的模块化,...
在实际应用中,Cglib常与Spring AOP结合使用,为非接口类提供代理服务,实现事务管理、日志记录等切面功能。此外,它也被许多ORM框架如Hibernate采用,用来动态生成持久化对象的子类,以便于实现懒加载和其他优化...
在实际应用中,比如在AOP(面向切面编程)中,Cglib常被用来生成代理对象,以便在方法执行前后插入额外的逻辑,如日志记录、性能监控、事务管理等。此外,它也在ORM框架(如Hibernate)中用于动态生成持久化类的代理...
- 如果目标类实现了接口,优先选择JDK动态代理,因为它是基于接口的,性能较好,且无需引入额外的库。 - 若目标类没有实现接口,或者需要对非接口方法进行代理,那么CGLIB是更好的选择。 6. **应用场景**: - ...
2. **定义事务代理**:然后,我们创建一个TransactionProxyFactoryBean实例,指定目标对象(需要事务管理的业务对象)和事务属性。 ```xml *">PROPAGATION_REQUIRED, -java.lang.Exception ``` 这里...
8. **cglib-nodep.jar**或**asm.jar**:这两个库之一通常用于为没有接口的类创建代理对象,这是Hibernate动态生成代理类的一种方式。 9. **antlr.jar**:ANTLR是一个强大的解析器生成器,Hibernate使用它来解析HQL...
- `cglib-nodep.jar`和`asm.jar`:这两个库通常用于动态代理和字节码操作,Hibernate在处理实体类的动态代理时可能会用到。 - `dom4j.jar`或`jdom.jar`:XML处理库,Hibernate的HQL查询结果集转换为XML时会用到。 ...
6. **Spring AOP代理**: 可以创建JDK动态代理或CGLIB代理,实现AOP功能。 7. **Spring Boot**: 快速启动的微服务框架,简化配置,开箱即用。 ### Hibernate与Spring整合 1. **Spring管理Hibernate Session**: 使用`...
- cglib和asm:用于动态代理和字节码操作,支持对未实现接口的类进行扩展。 - JTA(Java Transaction API):提供跨应用服务器的事务管理。 - 其他辅助库:如dom4j、ehcache等,分别用于XML处理和二级缓存。 **5. ...
4. ** cglib-nodep.jar**: 代码生成库,Hibernate在无法获取类的元数据时(例如,针对未继承Hibernate的实体类),会使用CGLIB生成代理类。 5. **asm.jar**: 字节码处理库,与CGLIB配合,用于动态生成字节码。 6. **...