hibernate第二天:hibernate原理
hibernate原理:
1.测试实例
Student s=new Student();
s.setId("1");
s.setName("larry");
session.save(s)
2.session.save(s)原理如下:
3.session工厂根据配置文件(xx.hbm.xml)生成DML语句
<hibernate-mapping>
<class name="com.hltech.hibernate.Student">
<id name="id" />
<property name="name" />
<property name="age" />
</class>
</hibernate-mapping>
即:session工厂拿到配置文件,然后拼SQL语句
如:insert table Student(id,name,age) value(?,?,?)
3.获取PreparedStatment ps然后设值
ps.setInt(i,t.getXXX);
ps.setString(i+1,t.getXXX);
4.方法名:通过配置文件找到方法名methodName[i]
通过save传入的Student->s对象,
Method m=s.getClass().getMethod(methodName[i]);
{Class r =m.getReturnType();
if(r.getName().equals("java.lang.String)
String returnValue=(String)m.revoke(s); --此处采用反射
即:ps.setString(i,returnValue);
}
5.但是hibernate原理并没有反射而是CGLIB动态代理
CGLIB(Code Generation Library)是一个开源项目!
是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。
Hibernate支持它来实现PO(Persistent Object 持久化对象)字节码的动态生成。