您的位置:首页 > 数据库

Hibernate学习笔记

2016-03-02 21:45 435 查看
一.常用配置文件

1.配置文件hibernate.cfg.xml

hibernate的数据库和一些别的选项在这里配置,长用的有
<!-- 数据库的用户名 -->
<property name="connection.username">root</property>
<!-- 数据库的密码 -->
<property name="connection.password">123</property>
<!-- 数据库的驱动 -->
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!-- 数据库的url -->
<property name="connection.url">
jdbc:mysql://localhost:3306/test3
</property>
<!-数据库的方言->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!--是否显示sql语句-->
<property name="show_sql">true</property>
<!-- hbm2ddl.auto这个有四个选项
creat:启动的时候先删除表结构,再创建表结构
update:启动的时候同步数据库
create-drop:启动的时候创建表结构,关闭的时候删除表结构
validate: 只会和数据库中的表进行比较,不会创建新表,但是会插入新值
-->
<property name="hbm2ddl.auto">update</property>
<!-- 调用sessionFactory.getCurrentSession()得到的Session实际是储存在ThreadLocal中的
-->
<property name="current_session_context_class">thread</property>
<!--是否启用二级缓存-->
<property name="cache.use_second_level_cache">true</property>
<!--二级缓存提供者-->
<property name="cache.provider_class">
org.hibernate.cache.EhCacheProvider
</property>
<!--加载类的映射文件-->
<mapping resource="com/yuan/Classes.hbm.xml" />


2.配置文件 类名.hbm.xml

例如有以下这个类:

public class Classes {
private Long cid;
private String name;
private String description;
private Set<Student> students;
public Long getCid() {
return cid;
}
public void setCid(Long cid) {
this.cid = cid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
}


配置文件Classes.hbm.xml如下:

<!--需要映射的类的名字-->
<class name="com.yuan.Classes" table="classes">
<!--主键-->
<id name="cid" length="10" type="long">
<!--主键生成模式-->
<generator class="increment"></generator>
</id>
<!--该类的属性-->
<property name="description" length="20" type="java.lang.String"></property>
<property name="name" length="20" type="java.lang.String"></property>
<!--集合成员变量
cascade:
all:所有情况下都进行级联操作。
delete:删除的时候进行级联操作
save-update:save和update时候进行级联操作
none:所有情况下都进行级联操作
set元素还有一个叫做table的元素,如果是many to many的,就会需要第三张表,table属性就是表的名字
-->
<set name="students" cascade="save-update">
<!--key是set集合的外检,也就是students的外键-->
<key>
<column name="cid"></column>
</key>
<!--一对多,多对一,多对多
class:对应的类名
cocolumn:多对多时,需要的主键
-->

<one-to-many class="com.yuan.Student"/>
</set>
</class>


每一个Session代表一个数据库连接,一般每次完成一个事务结束一次Session。

SessionFactory是进程级别的。

二,缓存

1.一级缓存。一级缓存是在Session中,每次get和save的时候都会在Session中缓存一份,在进行操作的时候如果一级缓存有需要操作的对象就操作一级缓存的对象,在Session close或者flush之后会对缓存和数据库进行同步,一级缓存的生命周期结束。

将对象放入缓存的方法:update,save,get

把对象清除出去的方法:evit,clear

2.二级缓存:二级缓存在SessionFactory中,可以使用Session的get和SessionFactory的list方法将数据放入二级缓存。使用人级缓存之前需要先进行相关的配置(见配置清单),需要二级缓存的对象需要配置。

二级缓存适合存放一些不常改变的数据。

提取二级缓存的方法:get ,iterator

(待续….)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hibernate 数据库