Hibernate笔记.docx
- 文档编号:10213594
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:40
- 大小:226.94KB
Hibernate笔记.docx
《Hibernate笔记.docx》由会员分享,可在线阅读,更多相关《Hibernate笔记.docx(40页珍藏版)》请在冰点文库上搜索。
Hibernate笔记
2012-09-21
Hibernate(冬眠)ORM框架数据库与对象一一对应
数据持久层的框架,与数据库有见面的关系
StrutsMVC框架
1.hibernate的包结构
docHibernate的官方文档
egHibernate提供参考的小例子
ectHibernate核心配置文件的模版
testHibernate技术的测试文档
srcHibernate的源代码
libHibernate的所有的jar包
grammarhql语言的语法定义
Hibernate3.jarHibernate的核心jar包
2.找到Hibernate的11个基本的jar包和数据库的jar包
antlr.jarcglib.jar(做代理的)asm.jarasm-attrs.jarscommons-collections.jar
commons-logging.jarehcache.jarhibernate3.jarjta.jar(java事务处理)
dom4j.jar(解析的)log4j.jarojdbc6.jar(连接数据库)
3.关于hibernate.cfg.xml的作用
hibernate.cfg.xml配置数据库连接的核心配置文件有且只有一个
*.hbm.xml配置类和数据库表的映射的核心配置文件*一定要和类名保持一致无限多个
一个vo有一个hbm.xml文件
配置核心配置文件具体的每一个property请参考hibernate.properties文件
oracle:
thin:
@localhost:
1521:
orcl
配置类和数据表的映射的文件
类在哪个包下配置文件就应该在该包下
Student类
privateintstu_id;
privateStringstu_name;
privateStringstu_sex;
privateintstu_age;
privateStringstu_address;
对应的Student.hbm.xml文件
4.将写好的Student.hbm.xml的路径通过mapresource=“”填入到hibernate.cfg.xml
配置文件中
*.hbm.xml文件的作用
*.hbm.xml配置类和数据库表的映射的核心配置文件
*一定要和类名保持一致无限多个
一个vo有一个hbm.xml文件
配置核心配置文件具体的每一个property请参考hibernate.properties文件
#
#
#
#
#
oracle:
thin:
@localhost:
1521:
orcl
#
#
#
#
#配置类和数据表的映射的文件
#类在哪个包下配置文件就应该在该包下
#Student类
#privateintstu_id;
#privateStringstu_name;
#privateStringstu_sex;
#privateintstu_age;
#privateStringstu_address;
#对应的Student.hbm.xml文件
#
#
#
#
#
#
#
#
#
5.将ECT文件夹中的log4j.properties文件拷贝到src目录中
6.通过以下语句根据hbm配置文件去建表
Configurationcfg=newConfiguration();
cfg.configure();
//通过我们的类来建一张表
SchemaExportexport=newSchemaExport(cfg);
export.create(true,true);
//新增一条数据publicvoidaddStudent(){
//1.新建configuration对象该对象用来解析各种配置文件
Configurationcfg=newConfiguration();
//2.默认的configuration只会解析hibernate.properties属性文件
//但是我们需要去解析hibernate.cfg.xml文件,所以我们必须调用configure方法
cfg.configure();
//强制让configuration对象去到src目录中去寻找hibernate.cfg.xml文件并且解析它这样就可以与数据库产生连接
//3.我们通过configuration对象去创建SessionFactory对象,该对象用来创建session对象
SessionFactorysf=cfg.buildSessionFactory();
//4.session对象是用来与数据库产生连接的
Sessions=sf.openSession();
//5.因为我们在操作数据库的时候,在进行增加删除修改的时候要操作事务
Transactiontran=s.beginTransaction();
//所以当前我们要通过session对象来开启事务
//6.这里新建一个任意的对象
Studentstudent=newStudent(3,"赵xx","男",26,"湖北荆州");
//7.调用session对象的save方法将对象做为参数保存进去这样该对象就可以保存(持久化到数据表中)
s.save(student);
//8.提交事务
mit();
//9.关闭session
s.close();
//10.关闭sessionfactory和数据库断开连接
sf.close();
}
2012-09-24
1.封装的完整的HibernateUtil
2.方言:
dialect
每个数据库的分页语句都不一样
Hql就是一门世界语,面向对象的SQL语句
Hibernate屏蔽了数据库之间的差异性,可根据数据库的不同,生成该数据库相对应的分页语句
3.hibernate.cfg.xml中可选配置
show_sql=true
format_sql=true
hbm2ddl.auto为create时,不管你执行任何操作,会先删掉之前的表再重新建一个
为update时,若发现表结构没有变,就在后面插入数据;
若是表结构变了,也继续往后插入,只是数据变为了null
小结:
如果表结构需要重新设计就使用create;若是只需要添加数据,就使用update
4.MyEclipse支持自动添加Hibernate插件
选中项目,右键选择MyEclipse------>addhibernate......
按照提示一步步完成配置,最后一步是自动生成HibernateUtil工具类
5.反向工程由表生成类
在database.explorer中选中数据库中的要反向生成类的表,右键选择“HibernateReverse.....”.
6.主键生成策略
被映射的类必须定义对应的数据表的主键字段
主键特点:
非空且不能相同
Hibernate为我们提供了很多的主键生成方法以达到非空且不能相同的目的:
#Incrementmysql的主键生成方式类似于sqlserveridentity可以支持oracle
#Identity这个sqlservermysqldb2不支持oracle
#sequence是oracle支持的haha就是当前你oracle中存在的一个序列名
#hilo高低位的算法现在我们的数据库创建一个表hahaxixi里面有一个字段叫nextvalue初始值是1每插入100数据就加next_value就加1个
#seqhilo创建一个临时的sequence叫做next_value初始值是0
#uuid生成一长串的不同的字符串例如4028ac1639f73f7e0139f73f8147000
#guid是mssqlserver中的一种主键生成方式例如:
6E5B36946881432DB3E780014EE19D3A
#native会自动选择
在oracle中设置主键生成的方式native,它会以sequence的形式去生成主键,这个自动生成的sequence的名字叫hibernate_sequence这个序列会被每一个实体所共享
#assigned让应用程序在save之前为对象分配一个标示符
#select使用触发器来生成一个主键
#sequence-identity使用数据库序列来生成唯一值
7.关系映射(双向和单向)
一对多
/*说明:
部门表
*/
publicclassDept{
/*部门编号*/
privateintdept_id;
/*部门名称*/
privateStringdept_name;
部门表的映射文件
/*说明:
员工表
*/
publicclassEmpVO{
/*员工编号*/
privateintemp_id;
/*员工名称*/
privateStringemp_name;
/*这里就代表员工属于哪个部门*/
privateDeptdept;
员工表的映射文件
在做增加的时候
如果先增加部门在增加员工2条语句
Hibernate:
insertintoDept(dept_name)values(?
)
Hibernate:
insertintoEmpVO(emp_name,dept_id)values(?
?
)
如果先增加员工再增加部门3条语句最后一条语句是用来建立关联关系的是一条update语句
Hibernate:
insertintoEmpVO(emp_name,dept_id)values(?
?
)
Hibernate:
insertintoDept(dept_name)values(?
)
Hibernate:
updateEmpVOsetemp_name=?
dept_id=?
whereemp_id=?
单向一对一的关联我们可以从多方找到一方
双向关联我们可以从一方获得多方
/*说明:
部门表
*/
publicclassDept{
/*部门编号*/
privateintdept_id;
/*部门名称*/
privateStringdept_name;
privateSet
部门表的映射文件
2012-09-25
一对一
在此处声明:
Myeclipse生成的hibernateSessionFactory有bug
主键双向一对一
publicclassMan{
/*男人的编号*/
privateintman_id;
/*男人的名字*/
privateStringman_name;
/*男人对应的女人*/
privateWomanwoman;
最重要的配置还是在从表这边
publicclassWoman{
/*女人的编号*/
privateintwoman_id;
/*女人的名字*/
privateStringwoman_name;
/*可以通过这里找到关联的男人*/
privateManman;
--这里标识这里的主键同时又是外键--> --是名称为man的property的类对应的表的主键的外键--> 主外键一对一的关系 在从表中添加一个字段(非空唯一和主表的主键相关联) Woman表 publicclassWoman{ privateintwoman_id; privateStringwoman_name; privateManman;/*这个字段是必须的就代表了在表中再添加一个字段*/ Man表 publicclassMan{ privateintman_id; privateStringman_name; privateWomanwoman; 这里的property-ref就代表了引用Woman类的对应的配置文件中的叫做man的这个属性 多对多 publicclassCommonRole{ /*角色编号*/ privateintrole_id; /*角色名称*/ privateStringrole_na
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hibernate 笔记