Hibernate1(入门)
来源:互联网 发布:无法触碰影评 知乎 编辑:程序博客网 时间:2024/06/14 00:03
1、ORM数据库框架
ORM框架即(Object-Relational Mapping):对象关系映射
把JavaBean和数据库表中数据进行转换。
2、Hibernate介绍
1、ORM数据库框架
2、对关系数据库进行CRUD操作
3、轻量
4、自动生成sql语句
3、Hibernate的流程
package com.example.hiberante;import javax.persistence.Temporal;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.Test;import com.example.bean.User;public class TestDemo { @Test public void test1() { User user = new User(); user.setUid(1); user.setName("yu1"); user.setAge(20); // 1、加载配置文件 Configuration configuration = new Configuration().configure(); // 2、获取SessionFactory,相当于获取链接池 SessionFactory factory = configuration.buildSessionFactory(); // 3、获取Session,连接JDBC,每执行一次openSession() 将获得一个新的session Session session = factory.openSession(); // 4、事务 Transaction transaction = session.beginTransaction(); // 5、进行CRUD操作 session.save(user); // 6、提交或者回滚 transaction.commit(); // 7、关闭session,factory session.close(); factory.close(); }}
1、核心配置文件
Configuration configuration = new Configuration().configure();
用于加载src下的hibernate.cfg.xml文件
名称必须是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://localhost:3306/student</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123456</property> <!--方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> <!--数据库表的设置,如果不存在就自动创建表 --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 加载映射文件 --> <mapping resource="com/example/bean/User.hbm.xml" /> </session-factory></hibernate-configuration>
在配置文件中
<property name="hibernate.hbm2ddl.auto">update</property>
1、create : 每一次运行时,都将创建表,运行完成表没有删除。一般用于测试。
2、create-drop : 每一次运行时,都将创建表,运行完成表删除。
3、validate : 运行时校验hbm.xml 是否与 表匹配。如果不匹配,将抛异常。
4、update : 如果表不存在,将创建。如果表存在,将更新(只添加,不删除)字段。
2、映射文件
核心配置加载时,hibernate将执行addResource加载配置的映射文件
hbm.xml 后缀固定的,必须与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"><hibernate-mapping> <class name="com.example.bean.User" table="t_user"> <!-- 主键的配置 --> <id name="uid"> <!-- 固定值 --> <generator class="native"></generator> </id> <!-- 其他属性配置 --> <property name="name"></property> <property name="age"></property> </class></hibernate-mapping>
映射文件详解:
<!-- <hibernate-mapping> 根标签 * package 用于配置包。如果配置了包之后使用同包下面的类时,就可以只写类名,而不需要全限定名称。 # 没有配置 <class name="cn.itcast.d_hbm.User"> # 配置 <hibernate-mapping package="cn.itcast.d_hbm"> <class name="User"> <class> 用于配置 对象 和表 之间的关系的 * name : 用于确定对象。默认使用的类的全限定名称 * table : 数据库中的表名。一般建议:表都应该有前缀 * catalog : 用于确定数据库的名称,默认使用hibernate.cfg.xml 配置url设置的数据库名称。例如:h_day01 <id>子标签 , 用于配置主键 * name : 对象的字段名称 * <generator> 用于配置主键生成策略 <property> 用于配置PO类的普通属性 * name : 默认情况使用的是属性名称 (通过getter或setter方法获得) * column : 确定表中对应字段(列)名称。默认值name的值 * length : 确定字段的长度。如果 varchar 默认值255 * type : 确定字段类型 1 使用hibernate类型:type="string" 注意大小写 2 使用java类型:type="java.lang.String" 3 使用sql类型:例如:varchar <property name="username"> <column name="xxx" sql-type="varchar(50)"> * not-null 是否为null * unique 是否唯一 注意:如果配置文件存在sql关键字,建议使用重音符修饰字段的名称 <property name="desc" column="`desc`"></property> -->
3、SessionFactory对象
1、SessionFactory相当于连接池,可以提供操作数据的Session对象。
2、SessionFactory 是线程安全,及不同的线程都可以使用。且可以保存,不同的线程获得session必须不同。
SessionFactory factory = config.buildSessionFactory();
4、Session对象
1、相当于 JDBC的 Connection
2、Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心
3、Session是线程不安全的
4、所有持久化对象必须在 session 的管理下才可以进行持久化操作
5、Session 对象有一个一级缓存,显式执行 flush 之前,所有的持久层操作的数据都缓存在 session 对象处
6、持久化类与 Session 关联起来后就具有了持久化的能力
常用方法:
1、save/persist:将指定PO保存到数据库,将执行一条insert语句
2、update:通过id更新所有数据,将执行一条update()语句
3、saveOrUpdate:如果没有id:执行save语句
如果有id:执行update语句
4、delete:通过id删除
5、get:通过id查询,立即执行sql语句
6、load:延迟查询,执行load后,不马上执行sql语句,当使用数据时,才执行真正的执行sql语句
7、createQuery:执行HQL语句
8、createSQLQuery:执行sql语句
9、merge:与saveOrUpdate非常相似
没有id值 :将执行insert语句
如果有id值,将执行select语句
如果数据没有变化,将不触发任何语句。
如果数据变化了,将触发update语句。
3、Transaction
1、开启事务:session.beginTransaction();
2、提交事务:transaction.commit();
3、回滚事务:transaction.rollback();
4、获得当前事务:session.getTransaction();
4、主键生成
1、 increment : hibernate 自己维护主键的增强。通过执行select max(id) from …查询最大值,加1.
2、identity :hibernate 将采用数据库底层的自动增强。例如:mysql auto_increment
3、sequence :hibernate 将采用数据库底层的序列。例如:oracle 不支持自动增强,但支持序列
4 、hilo:高低位算法,如果数据库不支持序列,也不支持自动增强,hibernate将采用算法机制。
5、uuid :使用随机字符串
6、assigned :自然主键(程序自己维护)
7、native :根据底层数据库的能力选择 identity、sequence 或者 hilo 中的一个。
<id name="uid"> <!-- 固定值 --> <generator class="native"></generator></id>
5、Hibernate的三种状态
瞬时态:transient,session没有缓存,数据库没有数据。例如:new对象
OID没有值
持久态:persistent,session缓存,数据库中最终会有数据。例如:save(obj)
OID有值
脱管态:detached,session没有缓存,但数据库中有数据。例如:new User() , user.setUid(1)
OID有值
- Hibernate1(入门)
- hibernate1
- Hibernate1
- hibernate1
- Hibernate1
- Hibernate1
- Hibernate1
- hibernate1
- Hibernate1
- Hibernate1 Xdoclet
- Hibernate1--简介
- hibernate1.1
- hibernate1.2
- Hibernate1基本知识点
- Hibernate1之例子
- com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'hibernate1.user' doesn't exist
- Mybatis入门(自己入门)
- IOS入门(入门篇)
- java-mysql数据库基本操作学习笔记(1)
- Android 6.0 Dangerous Permissions与授权机制
- java Map的删除操作和Map相关
- 【9801】黑白棋游戏 - Pascal
- TCP运输连接管理解析(三次握手过程解析)
- Hibernate1(入门)
- hive 配置 mysql时的问题(Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
- SCSI设备IO过程:磁盘上线与IO过程
- Centos7手动部署Openstack Mitaka版安装配置--(一)环境准备
- Hive metastore database is not initialized. Please use schematool(...) to create the schema.
- 大数据开发利器:Hadoop(4)
- JS中在html中加载的顺序
- The VirtualBox kernel modules do not match this version of VirtualBox 解决 (linux update,nvidia失败)
- qt---cdb(Microsoft Console Debugger)调试