hibernate总结

来源:互联网 发布:java语言的变量命名 编辑:程序博客网 时间:2024/06/08 13:41
对象---表:先映射再查
先映射对象,再去数据库查询
不用操作sql。纯面向对象的关系型数据库,全自动性数据库框架
一系列的Java类借口和配置文件/session/session工厂
配置文件:数据源/映射文件(理解)
Java与数据库的解耦
ORM:
数据库与表的映射

hibernate:中有三个状态
瞬态对象(引用失效就会被回收new),如果跟某个连接关联之后就会变成持久状态(session引用),持久态在session关闭的时候变为游离态;再次关联到持久态,如果被删了就会到瞬态;可用互转
知道版本就用指定的,不知道就用公共的
数据库方言:也就是指定用哪一种数据库
<property name="dialect">
org.hibernate.dialect.MySQLDialect
org.hibernate.dialect.OracleDialect
org.hibernate.dialect.SQLServerDialect
</property>
配置数据库连接池:C3p0
<property name="hibernate.connection.provider_class">
org.hibernate.c3p0.internal.C3P0ConnectionProvider
</property>
hibernate中id生成策略有。
increment:自增长,是由hibernate框架实现,先去查对应表的maxid,+1作为id;
identity:也是同增长,是由数据库自己负责,不作为操作
uuid.hex 使用128位的uuid算法得到一个32位不重复的16进制的字符串,常用于高鬓发,
assigned hibernate和数据库不作负责,程序员自己负责,如setid
foreign 这种方式比较少见,一般是用于在o2o主键关联表设计中
写上长度,减轻数据库压力,不到数据库里面去判断长度

配置orm映射文件:<mapping resource="com/lovo/xmls/UserBean.xml" />
Query query = session.createQuery(hql);是在预编译
//只想查询对象中的某一部分属性的时候,用map时不需要添加对应的构造器,否则需要添加对应构造器
String hql = "select new map(u.name as name,u.pwd as pwd) From UserBean as u where u.name LIKE CONCAT(:userName,'%')";
Query query = session.createQuery(hql);//这句话就是在预编译
query.setString("userName", user.getUserName());


UserBean user=new UserBean(null,12,22)
关联之后
id,null自动发生改变
问get和load的区别?
session:二级缓存
get:先查一级(内存,session),再查二级(session工厂,文件中),再去数据库
load:先查一级,再查二级,不会去查找数据库,返回一个代理对象,(默认数据库中有一条数据存在,所以产生一个动态代理对象)(相当于延时加载)用的时候才去加载,查询数据库
传递的对象需要是映射过的,不支持批量新增或者删除
jdbC中预编译第一个:为1,在hibernate中为0;

<![[]]>

只查本分的事添加对应的bean的对应的构造器
criteria(面向对象(纯)):条件限制查询容器
Anywhere向两边查,






0 0
原创粉丝点击