1.Hibernate框架
ORM 规则:(ORM, Object Relation Mapping) 对象关系映射!
目标: 通过orm(对象关系映射), 可以做到:
a. 不写sql,包对象直接保存到数据库中
b. 不写sql, 从数据库中读取,直接获取的是封装好的对象!
ORM是一种思想,或者说是一种规则的定义, 基于orm的应用:
1. hibernate 框架
2. mybatis 框架
3. 自定义一套程序!
Hibernate框架
概念
基于ORM的持久层框架,对jdbc操作进行了封装!
Hibernate与具体数据库无关的技术,即可以框数据库平台!
Hibernate开发环境搭建
Hibernate版本: 3.6版本
整体步骤:
1. 下载源码,引入jar文件
2. 写配置
* hibernate.cfg.xml 主配置
* Users.hbm.xml 映射配置
3. Api
Configuration
SessionFactory
Transaction
Session
Query
2. Hibernate框架Api
|-- Session 一个与数据库连接的会话信息
Sesison里面维护了一个连接对象,且对常用操作进行封装!
更新:
session.save(obj); 保存一个对象
session.update(obj) 更新一个对象, 注意修改对象的主键一定要在数据库存在!
session.saveOrUpdate(obj) 保存或更新
如果有设置主键且主键存在执行更新!
没有设置主键执行保存!
session.delete(obj) 删除一个对象; 注意修改对象的主键一定要在数据库存在!
主键查询:
Session.get(clazz,id); 根据主键查询
Session.load(clazz,id); 根据主键查询
HQL查询:
Hibernate Query language
Hibernate提供的面向对象的查询语言!
查询的是对象、对象的属性!
HQL与SQL区别:
Hql 查询的是对象、对象的属性, 区分大小写!
Hql查询的对象一定要有映射!
SQL 查询的是表、字段,不区分大小写!
步骤实现:
1. 建库、建表
-- 删除数据库
DROP DATABASE hib_demo;
-- 创建数据库
CREATE DATABASE hib_demo DEFAULT CHARACTER SET utf8;
-- 建表
CREATE TABLE users(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
age INT
)
2. 引入hibernate核心jar文件
源码中:
hibernate3.jar + required 目录中所有 + jpa + 数据库驱动包
antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
hibernate-jpa-2.0-api-1.0.0.Final.jar
hibernate3.jar
javassist-3.12.0.GA.jar
jta-1.1.jar
mysql-connector-java-5.1.12-bin.jar
slf4j-api-1.6.1.jar
3. 主配置文件: hibernate.cfg.xml
<!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.url">jdbc:mysql:///hib_demo</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!-- 通过数据库方言,告诉hibernate如何生产sql。 hibernate会根据配置的方言,生产符合当前数据库语言的SQL语句 -->
<property cname="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
</session-factory>
</hibernate-configuration>
4. javabean/ 映射文件
<?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">
<!--
通过XML映射,把对象映射到数据库的表中!
-->
<hibernate-mapping package="cn.itcast.a_config">
<class name="Users" table="users">
<id name="userId" column="id">
<generator class="native"></generator>
</id>
<property name="userName" column="name"></property>
<property name="age" column="age"></property>
</class>
</hibernate-mapping>
5. App
// 测试类
public class App {
@Test
// 保存
public void testSave() throws Exception {
// 对象
Users users = new Users();
users.setUserName("Jack");
users.setAge(30);
// 1. 创建配置管理器对象
Configuration config = new Configuration();
// 2. 加载主配置文件, 默认加载src/hibernate.cfg.xml
config.configure();
// 3. 根据加载的主配置文件,创建对象
SessionFactory sf = config.buildSessionFactory();
// 4. 创建Session对象
Session session = sf.openSession();
// 5. 开启事务
Transaction tx = session.beginTransaction();
// --- 保存
session.save(users);
// 6. 提交事务/关闭session
tx.commit();
session.close();
}
@Test
// 获取对象
public void testGet() throws Exception {
// 1. 创建配置管理器对象
Configuration config = new Configuration();
// 2. 加载主配置文件, 默认加载src/hibernate.cfg.xml
config.configure();
// 3. 根据加载的主配置文件,创建对象
SessionFactory sf = config.buildSessionFactory();
// 4. 创建Session对象
Session session = sf.openSession();
// 5. 开启事务
Transaction tx = session.beginTransaction();
// --- 获取 (根据主键查询)
Users users = (Users) session.get(Users.class, 1);
System.out.println(users);
// 6. 提交事务/关闭session
tx.commit();
session.close();
}
}