什么是框架?
就是一个半成品的项目,书写项目可以从半成品开始写,这样能够大大的提高开发效率。
不必纠结于框架本身的实现,自要学会如何使用即可。
Hibernate框架
简介
Hibernate是一个开源的对象关系映射(ORM)框架。对JDBC进行了非常轻量级的对象封装。 将对象和数据库表建立映射关系,Hibernate框架使用在数据持久化层(dao)。 也就是:实体类和数据表之间建立了联系,通过操作对象,直接对数据库进行修改。
ORM:Object relaction mapping
框架中的分工:
框架搭建
1、导包
导入hibernate所需要的架包,还有数据库驱动包
2、准备一个实体类
- 所有的属性应该设置为私有,并添加get-set方法;
- 构造函数要么不写,如果要写至少要写两个(必须包含一个空的)//因人而异,我学的时候老师就是这样教的
- 属性的类型应是包装类型
- 必须拥有一个在主键
3、准备数据库
数据库必须由我们自己建立,数据库表可以由hibernate自动创建;如果手动创建,表中的字段要和实体类一一对应。
4、创建实体类和数据表之间的映射配置文件
创建一个 实体类名+.hbm+.xml 建议此文件与实体类在同一目录下
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--下面class中的类的路径,下面的class name属性可以简写-->
<hibernate-mapping package="cn.hd.bean">
<!--<hibernate-mapping>-->
<!--映射类和数据库表之间的关系-->
<!--name属性是实体类名 如果报红,说明没有这个实体类--><!-- 写完整路径名-->
<class name="User" table="t_user">
<!--<class name="cn.hd.bean.User" table="t_user">-->
<!--映射文件中必须拥有 -->
<id name="id" column="id">
<!--主键生成策略
native :自动递增
identity :mysql自动递增
increment :从数据库中取出主键的最大值(每个session只取1次),以该值为基础,每次增量为1
sequence :oracle数据库中的自动递增
assigned :主键由外部程序负责生成,在 save() 之前必须指定一个
UUID :自动增长 格式:xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)
其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字 多用于企业
-->
<generator class="native"></generator>
</id>
<!--基本属性 column是字段名 在这里可以设置数据库的属性-->
<property name="name" column="name"></property>
<property name="sex" column="sex"></property>
<property name="age" column="age"></property>
<property name="balance" column="balance"></property>
</class>
</hibernate-mapping>
5、书写核心配置文件
名字必须是 hibernate.cfg.xml 必须放在src目录下
<!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://localhost:3306/hibernate?useUnicode=true&characterEncoding=utf-8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!--org.hibernate.dialect.MySQL5Dialect-->
<!--方言 必须设置 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!--在控制台展示SQL语句 不必须-->
<property name="hibernate.show_sql">true</property>
<!--SQL语句格式化 不必须-->
<property name="hibernate.format_sql">true</property>
<!--1、update 如果映射文件和数据库表保持一致就不修改,如果没有就自动创建
2、create 每次执行都会重新创建一个表(覆盖)
3、create-drop 先将原来的表删除 然后重新创建
4、validate 只做校验,不修改表-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--事务的隔离级别
1 什么都不解决
2 解决了 脏读 幻读
4 解决了 脏读 不可重复读
8 都能解决-->
<property name="hibernate.connection.isolation">4</property>
<!--扫描映射文件
class 必须 映射文件和配置文件的名字和路径 一致
package 扫描该包下的配置文件
resource 指定某个确定的xml配置文件
-->
<mapping resource="cn/hd/bean/User.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
6、书写测试代码
public static void main(String[] args) {
//读取配置文件
Configuration cfg = new Configuration();
cfg.configure();
//创建sessionFactory
SessionFactory sessionFactory = cfg.buildSessionFactory();
//获得一个session
Session session = sessionFactory.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
User user = new User();
user.setName("张三");
user.setAge(22);
user.setBalance(10000);
user.setSex("男");
session.save(user);
//提交事务
transaction.commit();
//释放资源
session.close();
sessionFactory.close();
}
测试前:
测试后:
控制台显示内容:
下面就是
<property name="hibernate.show_sql">true</property>//显示SQL语句
<property name="hibernate.format_sql">true</property>//格式化SQL语句 的作用,方便查看
声明:开发工具:IDEA 数据库:MySQL