Hibernate第一天(Hibernate的入门(搭建Hibernate的环境,完成CRUD的操作) )

1.2 Hibernate的概述

1.2.1 什么Hibernate

Hibernate就是一个持久层ORM的框架。对JDBC做了封装。

1.2.2 什么是ORM

ORMObject Relational Mapping对象关系映射。

将对象与数据库中表建立映射关系,操作对象就可以操作数据库中表。

1.2.3 为什么学习Hibernate

1.3 Hibernate的入门

1.3.1 下载Hibernate的开发包

Hibernate提供了3.x 4.x 5.x版本

https://sourceforge.net/projects/hibernate/files/hibernate-orm/5.0.7.Final/

1.3.2 解压hibernate

documentation :Hibernate的开发规范和文档

lib :Hibernate的开发使用的jar

project :Hibernate的提供测试的工程。

1.3.3 创建项目,引入jar

引入lib/required/*.jar

数据库驱动包

日志包

1.3.4 创建数据库和表

CREATE TABLE `cst_customer` (

  `cust_id` int AUTO_INCREMENT COMMENT '客户编号(主键)',

  `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',

  `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',   

  `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',

  `cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',

  `cust_phone` varchar(64) DEFAULT NULL COMMENT '固定电话',

  `cust_mobile` varchar(16) DEFAULT NULL COMMENT '移动电话',

  PRIMARY KEY (`cust_id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

1.3.5 创建实体类

 

1.3.6 创建Hibernate的映射文件

Hibernate的映射文件只要是一个XML文件就可以了。一般映射命名:类名.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC 

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

<!-- 建立映射关系:将类与表建立映射关系 -->

<!--

class标签:用于建立类与表的映射

* name:类的全路径

* table:数据库表名称

 -->

<class name="com.itheima.hibernate.domain.Customer" table="cst_customer">

<!-- 建立类中的属性与表中的字段的映射 -->

<!--

id标签:用来建立表中的主键字段与类中的属性的映射

 -->

<id name="cust_id" column="cust_id">

<!-- 主键生成策略: -->

<generator class="native"/>

</id>

<!-- 其他的属性都是用property建立映射 -->

<property name="cust_name" column="cust_name"/>

<property name="cust_source" column="cust_source"/>

<property name="cust_industry" column="cust_industry"/>

<property name="cust_level" column="cust_level"/>

<property name="cust_phone" column="cust_phone"/>

<property name="cust_mobile" column="cust_mobile"/>

</class>

</hibernate-mapping>

1.3.7 创建Hibernate核心配置文件: 默认SRC下有个hibernate.cfg.xml文件

<?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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

<property name="hibernate.connection.url">jdbc:mysql:///hibernates</property>

<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">abcd</property>

<!-- 配置Hibernate的相关属性 -->

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- 可选属性 -->

<!-- 显示SQL -->

<property name="hibernate.show_sql">true</property>

<!-- 格式化SQL -->

<property name="hibernate.format_sql">true</property>

<!-- hbm2ddl -->

<property name="hibernate.hbm2ddl.auto">update</property>

<!-- 加载映射文件: -->

<mapping resource="com/itheima/hibernate/domain/Customer.hbm.xml"/>

</session-factory>

</hibernate-configuration>

 

 

ml 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> <!-- session-factory:连接池  session:连接对象  -->

<!-- 5个必选项 -->

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

<property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>

<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">1234</property>

<!-- 配置方言      分页: limit sqlserver:top oracle:sql嵌套  -->

<!-- 作用:就是让hibernte自动的匹配符合当前数据库的sql语法 -->

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- 可选的 -->

<!-- 集成c3p0连接池 -->

<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

<!-- 让控制台输出hibernate生成的sql语句  默认是一行-->

<property name="hibernate.show_sql">true</property>

<!-- 可以格式化sql语句 -->

<property name="hibernate.format_sql">true</property>

<!-- 可以让hibernate根据配置好的映射文件自己生成表 -->

<!--

create: 没有 :hibernate根据映射文件创建对应的表,如果有表:删除再创建

create-drop:没有 :hibernate根据映射文件创建对应的表,如果有表:删除再创建 ,用完就删掉

// 测试数据的时候使用

update: 没有表创建表,有表使用表

validate: 默认的值 hibernate不会创建任何表

-->

<property name="hibernate.hbm2ddl.auto">update</property>

<!-- 引入映射文件地址 -->

<mapping resource="cn/itcast/domain/Customer.hbm.xml"/>

</session-factory>

</hibernate-configuration>

 

1.3.8 编写代码

@Test

/**

 * 保存客户

 */

public void demo1(){

// 1.加载核心配置文件:

Configuration configuration = new Configuration().configure();

// 2.创建一个SessionFactory对象(类似于连接池)

SessionFactory sessionFactory = configuration.buildSessionFactory();

// 3.获得Session对象(连接对象)

Session session = sessionFactory.openSession();

// 4.开启事务

Transaction transaction = session.beginTransaction();

// 5.操作

Customer customer = new Customer();

customer.setCust_name("郝宝强");

session.save(customer);

// 6.事务提交

transaction.commit();

// 7.资源释放

session.close();

}

1.4 Hibernate的常见配置

1.4.1 XML的提示问题

1.4.2 核心配置文件的配置

Hibernate的核心配置文件的方式有两种

hibernate.properties:不能加载映射文件。必须手动编写代码加载映射文件。必须加载核心配置文件hibernate.properties,还要加载映射文件customer.hbm.xml文件

hibernate.cfg.xml:结构清晰。(工作中使用)

手动加载映射文件   手动加载:con.addResource("cn/itcast/domain/customer.hbm.xml");

 

l Hibernate的核心配置文件中的内容:

n 数据库连接基本的参数

n Hibernate的属性

n 映射文件加载

1.4.3 映射文件配置

映射文件就是将类与表建立映射关系文件,这个文件只要是XML即可。通常名称:类名.hbm.xml

l class标签:建立类和表的映射

n name :类的全路径

n table :数据库中表的名称。

n catalog :数据库名称(可以省略)

l id标签:建立主键和类中属性映射

n name :类中的属性的名称

n column :表中的字段名称。(如果类中的属性名和表中的字段名一致,column可以省略)

l property标签:建立普通字段与类中属性映射

n name :类中的属性的名称

n column :表中的字段名称。(如果类中的属性名和表中的字段名一致,column可以省略)

n length :字段的长度(自动创建表)   hibernate自动创建表的时候字段的长度都是最长

n not-null :非空(自动创建表)

n unique :唯一(自动创建表)

1.5 Hibernate的常用API

1.5.1 Configuration :配置对象

l 用来加载核心配置文件

n hibernate.cfg.xml

Configuration cfg = new Configuration().configure();

l 用来加载映射文件

手动加载:con.addResource("cn/itcast/domain/customer.hbm.xml");

 

1.5.2 SessionFactorysession工厂对象

Session工厂,是一个线程安全的对象,内部维护Hibernate连接池。一般一个应用只需要创建一次的对象。

l 抽取工具类:

配置C3P0连接池:

引入C3P0相关jar包:

配置C3P0

<!-- 配置C3P0连接池 -->

<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

1.5.3 Session(*****):连接对象

Session相对于Connection,是线程不安全的,SessionHibernate持久化操作的核心API

Serializable save(Object obj); 保存数据

l T get(Class clazz, Serializable id); 根据ID查询数据

l T load(Class clazz, Serializable id); 根据ID查询数据

l update(Object obj);

l delete(Object obj);

1.5.4 Transaction :事务对象

l commit();提交事务

l rollback();回滚事务

1.5.5 Hibernate  单条查询getload区别

l hibernate在单条查询的时候有

l session.get(classid)

l session.load(classid)

l 两者的区别:

l 1.get查询是立即加载,load查询延迟加载

l 2.get返回的是本身的对象,load返回的是代理对象

l 3.get在查不到数据的时候返回null      load在查不到数据的时候会报错


猜你喜欢

转载自blog.csdn.net/wuqianjing/article/details/80885898