hibernate的表的映射和hql--第三天

来源:互联网 发布:有没有抢购软件 编辑:程序博客网 时间:2024/06/03 18:44

缓存:其实就是一块内存空间,将数据源(数据库和文件)中的数据存放到缓存中,当我们下次再获取的时候,是直接从缓存中取,而不是再次去连接数据库进行查找


事务: 事务是一组操作,要么都成功,要么都失败

 

特性:

1 原子性 :事务不可分割

2 一致性 : 事务执行前后数据保持一致

3 隔离性 :事务的独立,不会受到其他事务的干扰

4 持久性 :  事务一旦提交,则永久保存在数据库中

 

假如事务不考虑隔离性,会引发一些问题

1 脏读 :一个事务读到另一个事务未提交的数据

 

2 不可重读:一个事务读到另一个事务已提交的数据,导致多次查询的结果不一致

 

3 虚读:就是不可重读,但是不可重读强调的是一个事务读到另一个事务修改的数据,而虚读强调的是一个事务读到另一个事物添加的数据

 

如果要避免以上的问题:

如何解决:设置隔离级别 (级别从低到高,效率从高到底)

1 未提交读:以上3中问题都有可能会发生

2 已提交读:避免了脏读,但是另外两个问题有可能发生 (oracle)

 

3 可重复读:避免了脏读和不可重读,但是最后一个问题有可能发生  (mysql

 

4 串行化: 以上几个问题都不会发生

 

可以手动通过hibernate去设置隔离级别

<property name="hibernate.connection.isolation">1|2|4|8</property>

其中: 1,2,4,8分别对应以上的1,2,3,4

 

hql语句:把以前的sql的表换成类,把列换成属性

from where条件 group by .. having..order by ...

 

 

1  普通条件 名字=小白


2 查询 id3~5的小白


3 查询指定的属性:

1 javabean中写一个带指定属性的构造方法



4 预编译 hiberate的? 是从 0开始


5 like


6用参数去代替?  语法格式 :名字




7 如果引用参数的个数很多

1  hql中的:后面写上属性名

2 得到一个对象,分别去设置你想要的属性值

3 query.setProperties(对象) 


8 聚合函数 (count max min avg sum)

count(*) -- long

max(id) -- int



9 分页:类似于mysql

query.setFirstResult(0);//跳过0条记录

query.setMaxResults(3);//获取3条记录

 

 

10 子查询:mysql一样(用类名和属性名)


表与表的关系

学生表

id  name  majorid

1   小明  1

2   小红  1

3   小黑  2

 

专业表

id  name

1   java

2   C语言

 

 

 

 

 

many-to-one (多对一)

多:外键表

一:主键表

 

第一步:配置 Many这一方

 

1 javabean中配上外键所对应类的对象



2 hbm.xml中配

这里的name=majorstu对象的属性名所以小写

<many-to-one name="major" class="com.beans.Major" >

  <column name="majorid"></column>

  </many-to-one>

 

第二部:配置one这一方

1 javabean中封装set<many>集合

 

2 hbm.xml中配


整合 struts2 hibernate3

1 整合jar

2 整合strut2filter

3 整合 所有的xml配置文件

struts:struts.xml

hibernate: hibernate.cfg.xml和所有的xx.hbm.xml