每日对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> 主键生成策略 : identityidentity由底层数据库生成标识符。identity是由数据库自己生成的,但这个主键必须设置为自增长,使用identity的前提条件是底层数据库支持自动增长字段类型,如DB2、SQL Server、MySQL、Sybase和HypersonicSQL等,Oracle这类没有自增字段的则不支持。
<id name="id" column="id">
<generator class="identity" />
</id>
特点:只能用在支持自动增长的字段数据库中使用,如MySQL。
注释方式与配置文件底层实现方式相同,只是配置的方式换成了注释方式
自动增长,适用于支持自增字段的数据库
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
nativenative由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(); //3Dog dog=session.load(Dog.class,1);
System.out.println(dog.getDogname()); session.close(); /* * 所有增删改操作 * */ }