项目中框架的体系结构
ORM框架
- 对象关系映射(Object Relational Mapping)
- 对象和表字段进行对应
- 是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换
- Object:对象,java对象,此处特指JavaBean,Model
- Relational:关系,二维表,数据库中的表。
- Mapping:映射
- 主流的ORM框架:Apache DBUtils 、Spring JDBCTemplate
什么是Hibernate
Hibernate是一个数据持久化dao层的ORM框架,它对JDBC进行轻量级的对象封装,将POJO与数据库表建立映射关系,把对象映射到表中,提供了对关系型数据库增删改操作API,是一个全自动的ORM框架。
- DBUtils也是对JDBC的封装
- POJO(Plain Ordinary Java Object):简单的Java对象,实际就是普通JavaBeans
Hibernate的优点
- Hibernate自动生成SQL语句,自动执行,使程序员可以使用对象编程思维来操纵数据库
- Hibernate对JDBC访问数据库代码封装,简化了数据访问层代码
- Hibernate使用java的反射机制
- Hibernate是一个轻量级框架,性能好,支持很多关系型数据库,多种场合
Hibernate的使用步骤
- 下载Hibernate并导入jar包
- 创建数据库和表
- 编写对象模型Javabean POJO
- 配置核心配置文件hibernate.cfg.xml【连接数据库的配置】
- 编写映射文件hibernate mapping(*.hbm.xml),【声明对象模型能关联数据库表字段】
- 调用Hibernate的api
下载Hibernate并导入jar包
创建数据库和表
编写对象模型Javabean POJO
配置核心配置文件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>
<!-- 1、配置数据库连接的4个参数 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///项目名</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">12345</property>
<!-- 是否显示sql语句 -->
<property name="show_sql">true</property>
<!-- 是否格式化sql语句 -->
<property name="format_sql">true</property>
<!-- 是否自动提交事务 -->
<property name="hibernate.connection.autocommit">true</property>
<!-- 2、配置JavaBean与表的映射文件 -->
<mapping resource="com/zjc/hibernate/domain/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
编写映射文件hibernate mapping(*.hbm.xml),【声明对象模型能关联数据库表字段】
//javabean:
public class User {
private int uid;
private String username;
private String password;
..............setter+getter............
}
--------------------------------------------------------------------
对应User的映射配置文件 User.hbm.xml
<!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="对应的.User类路径" table="t_user对应的数据库表名">
<!-- 1、主键,如果属性与表字段不一至,要指定column -->
<id name="uid" column="id">
<!-- 主键生成策略 -->
<generator class="native"></generator>
</id>
<!-- 2、用户字段 -->
<property name="username"></property>
<property name="password"></property>
</class>
</hibernate-mapping>
调用Hibernate的api 测试
public class Demo01 {
@Test
public void test1(){
//1.获取核心 配置文件对象,默认是加载src的hibernate.cfg.xm文件
Configuration cfg = new Configuration().configure();
//2.创建会话工厂
SessionFactory factory = cfg.buildSessionFactory();
//3.创建会话
Session session = factory.openSession();
//开启事务
Transaction trans = session.beginTransaction();
//保存
User user = new User();
user.setUsername("zjc");
user.setPassword("123");
session.save(user);
//提交事务
trans.commit();
//4.关闭会话
session.close();
//5.关闭工厂,释放资源
factory.close();
}
}
常见问题:
- 下面未知的实体是指在hibernate.cfg.xml中没有配置映射文件