View
表示层
View
Action/sevlet/xx
数据
Jsp
模板
-----------------------------------
Service
业务层
Dao
数据访问层
-----
MySQL, Oracle, SqlServer, Db2, ...
MySQLDaoImpl
OracleDaoImpl
MVC
JDBC
SQL
==============================
配置文件(xml方式添加,也可以java代码手动添加 new Configure().addClass(User.class)自动搜索当前类所在包的user对象):
hibernate.cfg.xml
对象-->xxx.hbm.xml
全限定名 com.leigedomain.User
简单名称 User
假设共有25(count)条记录,每页显示10(pageCount)条,则共3页,页码为pageCode。
firstResult
maxResults
----------------------------------------
第1页
0
10
第2页
10
10
第3页
20
10
total / pageSize
total % pageSize
公式: (pageCode-1)*pageCount pageCount
Session
SQL
查询的是表和表中的字段。
不区分大小写
HQL
Hibernate Query Language
与SQL相似
查询的是对象和对象中的属性。
关键字不区分大小写,但类名与属性名区分大小写。
==========================================================
API
1,API简介。
2,Session中的方法。
3,查询:HQL与Criteria
配置:
1,主配置文件
2,映射文件
映射基础
普通属性
主键
集合属性
关联关系
一对多/多对一
多对多
一对一
继承结构
-----------------------------------
-- API简介
Configuration
配置
configure()
configure(String resource)
addResource(String resource)
导入一个指定位置的映射文件
addClass(Class clazz)
导入与指定类同一个包中的以类名为前缀,后缀为.hbm.xml的映射文件
buildSessionFactory()
SessionFactory
Session工厂
openSession()
getCurrentSession()
close()
Session
很重要的一个对象
操作对象的方法
save(Object)
update(Object)
delete(Object)
查询的方法
createQuery(String)
--> Query
createCriteria(Class)
管理事务的方法
beginTransaction() --> Transaction
getTransaction() --> Transaction
获取当前Session中关联的事务对象
其他的方法
...
Transaction
事务
commit()
rollback()
Query
查询
list()
查询一个结果集合。
uniqueResult()
查询一个唯一的结果,如果没有结果,则返回null,如果结果有多个,就抛异常。
...
--------------------------------
Hibernate主配置文件
1,配置的key前面的hibernate.前缀 可以有,也可以没有。如hibernate.dialect或dialect都可以。
2,按作用可分为三类:
1,数据库信息
<property ...>
方言、JdbcUrl、驱动、用户名、密码
2,导入映射文件
<mapping ...>
3,其他配置
<property ...>
show_sql
显示生成的SQL语句
format_sql
格式化生成的SQL语句
hbm2ddl.auto
自动生成表结构
hibernate.hbm2ddl.auto
生成表结构的两种方式:
1,hbm2ddl.auto
2,使用SchemaExport工具类
注意:只能建表,不能建库
==============
主键:
如果是数字,建议使用包装类型。
identity
sequence
hilo
native
assigned
uuid
foreign
...
hibernate中常用的主键生成策略,大家可以去官方文档查看www.hibernate.org:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.itcast.d_hbm_id">
<class name="User" table="t_user">
<!-- id元素用于映射主键。
子元素generator是用于指定主键生成策略的。
-->
<id name="id">
<!-- identity:使用数据库的自动增长策略,不是所有数据库都支持,比如oracle就不支持
<generator class="identity"/>
-->
<!-- sequence:在 DB2,PostgreSQL,Oracle,SAP DB,McKoi 中使用序列(sequence)
在使用Oracle数据库时可以使用这一个
<generator class="sequence"/>
-->
<!-- hilo,使用高低位算法生成主键值。
只需要一张额外表,所有的数据都支持。
<generator class="hilo">
<param name="table">hi_value</param>
<param name="column">next_value</param>
<param name="max_lo">100</param>
</generator>
-->
<!-- 根据底层数据库的能力选择 identity、sequence 或者 hilo中的一个。
<generator class="native"></generator>
-->
<!-- increment:由Hibernate维护的自动增长。
先查询当前最大的id值,再加1使用
不推荐使用,因为在多线程下会问题。
<generator class="increment"></generator>
-->
<!-- assigned:手工指定主键值
<generator class="assigned"></generator>
-->
<!-- foreign:使用外部表的字段作为主键
<generator class="foreign"></generator>
-->
<!-- uuid:由Hibernate自动生成UUID并指定为主键值。 -->
<generator class="uuid"></generator>
</id>
<property name="name"/>
</class>
</hibernate-mapping>