1.什么是框架?
提高我们的开发效率,可以理解成是一个半成品项目。
2.hibernate框架
dao层框架
操作数据库
以面向对象的方式操作数据库
orm思想,对象关系映射,通过映射文件配置对象与数据库中表的关系。
3.hibernate框架
1>导包
required + 驱动包
2>准备实体类,以及orm元数据
3>创建主配置文件
4>书写代码测试
orm元数据
<?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" >
<!--配置表与实体对象的关系-->
<!--package属性:填写一个包名,在元素内部凡是需要书写完整类名的属性,可以直接写简单类名-->
<hibernate-mapping package="cn.itheima.domain">
<!--
class元素:配置实体与表的对应关系的
name:完整类名
table:数据库表名
-->
<class name="Customer" table="cst_customer">
<!--
id:配置主键映射的属性
name:填写主键对应属性名
column:填写表中的主键列名
-->
<id name="cust_id" column="cust_id">
<!--generator:主键生成策略-->
<generator class="native"><generator>
</id>
<!--property元素:除id之外的普通属性映射
name:填写属性名
column:填写列名
type(可选):填写列(属性)的类型。默认hibernate会自动检测实体的属性类型。
每个类型有三种填法:java类型|hibernate类型|数据库类型
not-null(可选):配置该属性(列)是否不能为空,默认值:false
length(可选):配置数据库中列的长度。默认值:使用数据库类型的最大长度。
-->
<property name="cust_name" column="cust_name"></property>
<property name="cust_source" column="cust_source"></property>
<property name="cust_industry" column="cust_industry"></property>
<property name="cust_level" column="cust_level"></property>
<property name="cust_linkman" column="cust_linkman"></property>
<property name="cust_phone" column="cust_phone"></property>
<property name="cust_mobile" column="cust_mobile"></property>
</class>
</hinernate-mapping>
hibernate主配置
主配置在src目录下,文件名是hibernate.cfg.xml。
必选属性配置(5个)
<!--数据库驱动-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!--数据库url-->
<property name="hibernate.connection.url">jdbc:mysql:///hibernate_32</property>
<!--数据库连接用户名-->
<property name="hibernate.connection.username">root</property>
<!--数据库连接密码-->
<property name="hibernate.connection.password">1234</property>
<!--数据库方言
不同的数据库中,sql语法略有区别,指定方言可以让hibernate框架在生成sql语句时,针对数据库的方言生成
sql99标准:
DDL:定义语言 库表的增删改查
DCL: 控制语言 事务权限
DML:操作语言 增删改查
注意:MYSQL在选择方言时,请选择最短的方言
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>可选属性配置(3个)
<!--将hibernate生成的sql语句打印到控制台-->
<property name="hibernate.show_sql">true</property>
<!--将hibernate生成的sql语法格式化(语法缩进)-->
<property name="hibernate.format_sql">true</property>
<!--
自动导出表结构,自动建表
hibernate.hbm2ddl.auto create 自动建表,每次框架运行都会创建新的表,以前表将会被覆盖,表数据会丢失(开发环境中测试使用)
hibernate.hbm2ddl.auto create-drop 自动建表,每次框架运行结束都会将所有表删除(开发环境中测试使用)
hibernate.hbm2ddl.auto update(推荐使用) 自动生成表,如果已经存在不会再生成,如果表有变动,自动更新表(不会删除任何数据)
hibernate.hbm2ddl.auto validate 校验,不自动生成表,每次启动会校验数据库中表是否正确。-->
元数据引入配置
<!--引入orm元数据
路径书写:填写src下的路径
-->
<mapping resource="cn.itheima/domain/Customer.hbm.xml" />
hibernateAPI详解
Configuration
Configuration功能:配置加载类,用于加载主配置,orm元数据加载
//1.创建,调用空参构造
Configuration conf= new Configuration()
//2.读取指定主配置文件(5个函数)=>空参加载方法,加载src下的hibernate.cfg.xml文件
conf.configure();
//3.读取指定orm元数据(扩展),如果主配置中已经引入映射配置,不需要手动加载
//conf.addResource(resourceName);
//conf.addClass(persistentClass);
SessionFactory
//SessionFactory功能:用于创建操作数据库核心对象session对象的工厂。简单说功能就一个 ----创建session对象
//注意:1.sessionfactory 负责保存和使用所有配置信息,消耗内存资源非常大。
2.SessionFactory属于线程安全的对象设计。
//结论:保证在web项目中,只创建一个sessionFactory.
//4.根据配置信息,创建SessionFactory对象
SessionFactory sf= conf.buildSessionFactory();
//5.获得session
// 打开一个新的session对象
sf.openSession();
//获得一个与线程绑定的session对象
sf.getCurrentSession();
Session
//session 对象功能:表达hibernate框架与数据库之间的连接(会话)。session类似于JDBC年代的connection对象。还可以完成对数据库中数据的 增删改查操作。
//session是hibernate操作数据库的核心对象
//session获得操作事务的Transaction对象
//获得操作事务的tx对象
Transaction tx = session.getTransaction();
//开启事务并获得操作事务的tx对象(建议使用)
Transaction tx2=session.beginTransaction();
//----------新增操作
customer c=new Customer();
c.setCust_name("传智播客");
session.save(c);
//----------
//---------session的查询
//查询id为1的customer对象
session.get(Customer.class,1l);
//----------
//---------session的修改
//1.获得要修改的对象
Customer c=session.get(Customer.class,1l);
//2.修改
c.setCust_name("黑马程序员");
//3.执行update
session.update(c);
//---------
//-----------session的删除
//删除id为1的customer对象
//1.获得要修改的对象
Customer c=session.get(Customer.class,1l);
//2.调用delete删除对象
session.delete(c);
//--------
Transaction
tx2.commit();//提交事务
//tx2.rollback();//回滚事务
session.close();//释放资源
sf.close();//释放资源
CRM练习:保存客户
crm:customer relation manager 客户关系管理系统