1.Hibernate基本使用
Configuration
SessionFactory
Session
Transaction
Query
Cirteria
openSession() 事务自动处理
问题: 插入,查询,正常的,删除和更新(update,delete,saveOrUpdate有问题)
getCurrentSession() 事务自己处理
插入,查询,删除,更新全部正常
前提条件:必须配置<property name="current_session_context_class">thread</property>
Transaction t = session.beginTransaction();
t.commit();
t.rollback();
4.hibernate.cfg.xml中
<!-- hibernate.hbm2ddl.auto:
5.2.11
create-drop:不管有没有数据库表,先删除后创建表,在执行操作 ,一般做测试调试用
create:不管有没有数据库表,先删除后创建表,在执行操作 ,一般做测试调试用
update:没有数据库表就创建,如果有直接进行插入,删除,修改,查询更新。
validate:校验 表必须已经存在,而且表中的字段必须按照指定策略或者要求生成。
校验 sql语句语法是否正常(校验方言)
-->
<property name="hibernate.hbm2ddl.auto">update</property>
5.元数据配置文件:xx.hbm.xml
5.1 实体类映射到数据库表的类型指定: 通过type属性指定,但是值必须是包装类型 (包名+类名)
示例:<id name="id" type="java.lang.Integer">
<property name="name" type="java.lang.String"></property>
备注: 建议大家实体类中的基本类型写成包装类型。
5.2 测试主键生成策略:
自然主键:Hibernate不管理主键,开发者自己维护,而且必须手动插入。
代理主键:hibernate管理主键。按照指定策略生成主键
推荐的主键生成策略是uuid。
native: 本地策略。根据数据平台不同,根据当前数据库的特性会自动选择生成的主键策略
mysql: 生成的id特点:主键,不为null,自动增长 ,identity
orcale:sequence
increment:适用于int,short,long作为主键。
生成方式:
1.先去查询数据库的最大id,
2.再最大的id值上增加1,
3.把增加后的id值作为新的id值进行插入
控制台:select max(id) from stu;
insert into .....
identity:只能用在支持自动增长的数据库中。mysql支持,Oracle不支持。
uuid:字符串类型(char,varchar),长度32位,占用空间大,跨数据库平台(移植性好)。
sequence:Orcale数据库策略