Hibernate笔记
来源:互联网 发布:手机网络渗透 编辑:程序博客网 时间:2024/05/01 05:30
hibernate.cfg.xml常用配置
connection.username
数据库用户名
connection.password
数据库密码
connection.url
数据库地址
connection.driver_class
jdbc驱动
connection.dialect
配置Hibernate数据库方言,针对方言对不同数据库进行优化
hibernate.show_sql
是否把hibernate运行时的sql语句输出到控制台
hibernate.format_sql
输出到控制台的sql语句是否进行排版
hbm2ddl.auto
指定数据库表的生成策略(create、update、creat-drop/validate)
创建持久化类
需要遵循javabean设计原则
1.类为public
2.成员为private
3.提供公有的不带参数的构造方法
4.提供getter和setter
创建对象关系映射文件
生成hbm.xml文件,并在配置文件中增加<mapping>标签
<mapping resource=”Student.hbm.xml”/>
创建session
//创建配置对象
Configuration config = new Configuration().configure();
//创建会话工厂对象
SessionFactory sessionFactory = config.buildSessionFactory();
//打开会话
Session session = sessionFactory.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
事务Transaction
Hibernate对数据库的操作都是封装在事务中,并且默认是非自动提交的方式。用session保存对象是,如果不开启事务并手工提交事务,对象并不会真正保存到数据库中。
如果想让Hibernate自动提交事务,必须调用session对象的到doWork()方法,获取jdbc的connection后,设置为自动提交模式。(不推荐)
Session
获得session对象
getCurrentSession();
openSession();
如果使用getCurrentSession(),需要在hibernate.cfg.xml文档中进行配置
如果是本地事务(jdbc事务)
<property name="hibernate.current_session_context_class">thread</property>
如果是全局事务(jta事务)
<property name="hibernate.current_session_context_class">jta</property>
两种方法的区别
1.getCurrentSession在提交事务或回滚之后会自动关闭,而openSession需要手动关闭。如果使用openSession而没有手动关闭,多次后会导致连接池溢出。
2.openSession每次创建新的session对象,getCurrentSession使用现有的Session对象。
主键生成策略
在hbm配置文档中<id>标签标示主键,其中有generator标签表示主键生成策略
<generator class="assigned" />
表示由Java程序负责生成
<generator class="native" />
由数据库自动生成标识符,如果是mysql就是自动增长
组件属性
实体类中的某个属性是用户自定义的类的对象
该类必须也满足javabean设计原则
在hbm文档中加入<component>标签
如Address类的对象address是Students的属性,其又有number,address三个成员变量,在Student类的hbm文档中加入
<component name="address" class="hibernate.Address">
<property name="number" column="NUMBER"/>
<property name="address" column="ADDRESS"/>
</component>
数据库表中增加number和address字段
增删改查
增:sava(Object o)
删:delete(Object o)
改:update(Object o)
查:get、load(查询单个记录)
get(Student.class,key),load(Student.class,key)
get与load的区别
在不考虑缓存的情况下,get方法会在调用之后立即向数据库发出sql语句,返回持久化对象。load方法会返回一个代理对象,只保存了实体对象的id,直到使用对象的非主键属性是才会发出sql语句。
当查询对象不存在时,get方法返回null,load方法抛出异常org.hibernate.ObjectNotFoundException
一对多映射
通过在一方持有多方的集合实现,即在一方使用<set>元素表示持有多方一端的对象
- Hibernate笔记
- Hibernate 笔记
- Hibernate笔记
- Hibernate笔记
- Hibernate笔记
- hibernate笔记
- Hibernate笔记
- Hibernate笔记
- hibernate笔记
- hibernate笔记
- Hibernate笔记
- hibernate 笔记
- Hibernate笔记
- Hibernate笔记
- Hibernate 笔记
- Hibernate 笔记
- Hibernate 笔记
- Hibernate笔记
- ContentProvider 内容提供器
- 最长公共子序列
- 1019. General Palindromic Number (20)
- 二分查找应用-旋转数组
- Rails 十日谈
- Hibernate笔记
- Kotlin 第九章:可见性修饰词
- 创建mysql数据库
- Servlet如何编写以及写Servlet注意事项
- c++静态数据成员和静态成员函数
- Eclipse安装maven插件
- pyton阶乘
- 【机器学习】朴素贝叶斯
- [备战软考]数据结构与算法基础