每日对Hbernate 的复习
hibernate 简介:
hibernate 是一个开源框架,它是面想对象的一个开源框架,它对JDBC做了轻量级的封装,而我们java程序员
可以使用面向对象的思想来操纵数据库
一 为什么要使用Hibernate
1.对jdbc访问数据库的代码做了封装,大大简化了数据访问层的繁琐的重复性代码
2.Hibernate是一个基于jdbc的主流框架,这是一个优秀的orm实现,他很大程度简化了dao层的编码工作
二 Hibernate框架的优缺点?
1.Hibernate 功能强大,是java应用关系数据库之间的桥梁,较之jdbc方式操作数据库,代码量大大减少,提高了持久化的代码
降低了维护成本
2.可移植性好。对于修改 /更换 数据库,通常只修改Hibernate配置文件即可
缺点:
不适合大场地
修改删除不适合用hibernate
步骤1 搭配之构建jdbc
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!--根节点-->
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="connection.username">happy1</property>
<property name="connection.password">happy1</property>
<!-- SQL dialect SQL方言 -->
<property name="dialect"> org.hibernate.dialect.Oracle10gDialect</property>
<!-- Enable Hibernate's automatic session context management session和当前线程绑定-->
<!--
如果在Hibernate配置文件中,参数current_session_context_class设置为thread,并采用SessionFactory的getCurrentSession()方法获得Session对象,则不需要执行session.close()方法。
-->
<property name="current_session_context_class">thread</property>
<!--打印sql 控制台-->
<property name="show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<!--自动构建表结构 create 先delete表结构 再创建,update直接更新表结构-->
<!-- update 加载hibernate自动更新数据库结构 -->
<property name="hbm2ddl.auto">update</property>
<!--关联entity--><!--找小配置-->
<!-- <mapping resource="cn/happy/entity/Dog.hbm.xml"/>-->
<!-- <mapping resource="cn/hql/entity/demp.hbm.xml"/>
<mapping resource="cn/hbm02/dynamic/Emp.hbm.xml"/>-->
<!--<mapping resource="cn/hbm03happ/manyone/Dept.hbm.xml"/>
<mapping resource="cn/hbm03happ/manyone/Emp.hbm.xml"/>-->
<!-- <mapping class="cn.hbm07.People"/>
<mapping class="cn.hbm07.Card"/>-->
<!-- <mapping resource="cn/hbm03happ/onetomanydouble/Dept.hbm.xml"></mapping>
<mapping resource="cn/hbm03happ/onetomanydouble/Emp.hbm.xml"></mapping>
<mapping resource="cn/hbm03happ/manytomany/Employee.hbm.xml"></mapping>
<mapping resource="cn/hbm03happ/manytomany/Project.hbm.xml"></mapping>-->
<!-- <mapping class="cn.hbonetomany.Dept"/>
<mapping class="cn.hbonetomany.Emp"/>-->
<mapping class="cn.hbmanytomany.Student"/>
<mapping class="cn.hbmanytomany.Teacher"/>
</session-factory>
</hibernate-configuration>
主键生成策略 :
identity
identity由底层数据库生成标识符。identity是由数据库自己生成的,但这个主键必须设置为自增长,使用identity的前提条件是底层数据库支持自动增长字段类型,如DB2、SQL Server、MySQL、Sybase和HypersonicSQL等,Oracle这类没有自增字段的则不支持。
<id name="id" column="id">
<generator class="identity" />
</id>
特点:只能用在支持自动增长的字段数据库中使用,如MySQL。
注释方式与配置文件底层实现方式相同,只是配置的方式换成了注释方式
自动增长,适用于支持自增字段的数据库
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
native
native由hibernate根据使用的数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式,灵活性很强。如果能支持identity则使用identity,如果支持sequence则使用sequence。
<id name="id" column="id">
<generator class="native" />
</id>
@Test
public void test03(){
//Configuration 接口类 可以new
Configuration cfg=new Configuration().configure();//1
//session对象
SessionFactory factory=cfg.buildSessionFactory(); //2
Session session = factory.openSession(); //3
Dog dog=session.load(Dog.class,1);
System.out.println(dog.getDogname());
session.close();
/*
* 所有增删改操作
* */
}