Hibernate入门
来源:互联网 发布:知乎更新图标 编辑:程序博客网 时间:2024/06/06 00:31
Hibernate是一个轻量级的ORMapping框架.
ORMapping基本对应规则:
1:类跟表相对应
2:类的属性跟表的字段相对应
3:类的实例与表中具体的一条记录相对应
4:一个类可以对应多个表,一个表也可以对应对个类
5:DB中的表可以没有主键,但是Object中必须设置主键字段
6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系
7:Object中属性的个数和名称可以和表中定义的字段个数和名称不一样
Hibernate主要用来实现Java对象和表之间的映射,除此之外还提供还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。
在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层。它通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(***.hbm.xml)把JAVA对象或PO(Persistent Object,持久化对象)映射到数据库中的数据库,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作。
除配置文件,映射文件和持久化类外,Hibernate的核心组件包括以下几部分:
1)Configuration类:用来读取Hibernate配置文件,并生成SessionFactory对象。
2)SessionFactory(org.hibernate.SessionFactory)接口:针对单个数据库映射关系经过编译后的内存镜像,是重量级线程安全的(不可变)。 它是产生Session实例的工厂,本身要用到ConnectionProvider。
3)Session(org.hibernate.Session)接口:表示应用程序与持久储存层之间交互操作的一个单线程对象,此对象生存期很短,隐藏了JDBC连接,也是Transaction的工厂。session会关联一个connection,session是持久化的管理器,非线程安全的。其生命周期最好跟事务一致,事务完成就将其关闭。它有get(),load(),save(),update()和delete()等方法用来对PO进行加载,保存,更新及删除等操作。它是Hibernate的核心接口。
4)Query(org.hibernate.Query)接口:用来对PO进行查询操。它可以从Session的createQuery()方法生成。
5)Transaction(org.hibernate.Transaction)接口:用来管理Hibernate事务,它是单线程的,生命周期很短。它通过抽象将应用从底层具体的JDBC、JTA以及CORBA事务隔离开,它主要方法有commit()和rollback(),可以从Session的beginTrancation()方法生成。
6)ConnectionProvider (org.hibernate.connection.ConnectionProvider):生成JDBC连接的工厂(有连接池的作用)。它通过抽象将应用从底层的Datasource或DriverManager隔离开。
7)TransactionFactory (org.hibernate.TransactionFactory):生成Transaction对象实例的工厂。
Hibernate的运行过程如下:
A:应用程序先调用Configration类,该类读取Hibernate的配置文件及映射文件中的信息,并用这些信息生成一个SessionFactpry对象。
B:然后从SessionFactory对象生成一个Session对象,并用Session对象生成Transaction对象;可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载,保存,更新,删除等操作;在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将 提交这些操作结果到数据库中。
ORMapping基本对应规则:
1:类跟表相对应
2:类的属性跟表的字段相对应
3:类的实例与表中具体的一条记录相对应
4:一个类可以对应多个表,一个表也可以对应对个类
5:DB中的表可以没有主键,但是Object中必须设置主键字段
6:DB中表与表之间的关系(如:外键)映射成为Object之间的关系
7:Object中属性的个数和名称可以和表中定义的字段个数和名称不一样
Hibernate主要用来实现Java对象和表之间的映射,除此之外还提供还提供数据查询和获取数据的方法,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。
在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层。它通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(***.hbm.xml)把JAVA对象或PO(Persistent Object,持久化对象)映射到数据库中的数据库,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作。
除配置文件,映射文件和持久化类外,Hibernate的核心组件包括以下几部分:
1)Configuration类:用来读取Hibernate配置文件,并生成SessionFactory对象。
2)SessionFactory(org.hibernate.SessionFactory)接口:针对单个数据库映射关系经过编译后的内存镜像,是重量级线程安全的(不可变)。 它是产生Session实例的工厂,本身要用到ConnectionProvider。
3)Session(org.hibernate.Session)接口:表示应用程序与持久储存层之间交互操作的一个单线程对象,此对象生存期很短,隐藏了JDBC连接,也是Transaction的工厂。session会关联一个connection,session是持久化的管理器,非线程安全的。其生命周期最好跟事务一致,事务完成就将其关闭。它有get(),load(),save(),update()和delete()等方法用来对PO进行加载,保存,更新及删除等操作。它是Hibernate的核心接口。
4)Query(org.hibernate.Query)接口:用来对PO进行查询操。它可以从Session的createQuery()方法生成。
5)Transaction(org.hibernate.Transaction)接口:用来管理Hibernate事务,它是单线程的,生命周期很短。它通过抽象将应用从底层具体的JDBC、JTA以及CORBA事务隔离开,它主要方法有commit()和rollback(),可以从Session的beginTrancation()方法生成。
6)ConnectionProvider (org.hibernate.connection.ConnectionProvider):生成JDBC连接的工厂(有连接池的作用)。它通过抽象将应用从底层的Datasource或DriverManager隔离开。
7)TransactionFactory (org.hibernate.TransactionFactory):生成Transaction对象实例的工厂。
Hibernate的运行过程如下:
A:应用程序先调用Configration类,该类读取Hibernate的配置文件及映射文件中的信息,并用这些信息生成一个SessionFactpry对象。
B:然后从SessionFactory对象生成一个Session对象,并用Session对象生成Transaction对象;可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载,保存,更新,删除等操作;在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将 提交这些操作结果到数据库中。
Hibernate简单示例:hibernate-release-4.3.10.Final\lib\required\*.jar、mysql-connector-java-5.1.6-bin.jar
hibernate.cfg.xml配置
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><!-- 数据库方言信息,可以指定不同数据库的分页 --><property name="dialect">org.hibernate.dialect.MySQLDialect</property><property name="connection.url">jdbc:mysql://127.0.0.1:3306/zero</property><property name="connection.username">root</property><property name="connection.password">123456</property><property name="connectio.useUnicode">true</property><property name="connection.characterEncoding">utf-8</property><!-- 显示sql语句 --><property name="hibernate.show_sql">true</property><!-- <property name="hibernate.format_sql">true</property> --><mapping resource="com/zero/hibernate/vo/User.hbm.xml" /></session-factory></hibernate-configuration>vo类:
public class User {private int id;private String name;private String password;private Date birthday;public User() {}public User(String name, String password, Date birthday) {this.name = name;this.password = password;this.birthday = birthday;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}}User.hbm.xml
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.zero.hibernate.vo.User" table="t_user"><id name="id" column="userID"><generator class="native" /><!-- 主键 --><!-- native/uuid --></id><property name="name" /><property name="password" /><property name="birthday" /></class></hibernate-mapping>
测试:
public class TestDB {public static void main(String[] args) {// init();addUser();Query saQuery = null;}public static void init() {// 默认读取hibernate.cfg.xmlConfiguration cfg = new Configuration().configure();// 将hbm生成ddl,创建数据库SchemaExport export = new SchemaExport(cfg);export.create(true, true);}public static void addUser() {// 创建SessionFactorySessionFactory factory = null;/** 此方法在Hibernate4中被标记为过时 */// factory = new Configuration().configure().buildSessionFactory();Configuration cfg = new Configuration().configure();ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();factory = cfg.buildSessionFactory(serviceRegistry);// 取得sessionSession session = null;try {session = factory.openSession();session.beginTransaction();User user = new User("zero", "123456", new Date());// 保存数据session.save(user);// 提交事务session.getTransaction().commit();} catch (Exception e) {e.printStackTrace();session.getTransaction().rollback();} finally {if (session != null) {if (session.isOpen()) {session.close();}}}}}
0 0
- Hibernate 入门
- Hibernate 入门
- Hibernate入门
- Hibernate入门
- Hibernate入门
- Hibernate 入门
- Hibernate入门
- Hibernate入门
- Hibernate 入门
- Hibernate入门
- Hibernate入门
- Hibernate入门
- Hibernate入门
- Hibernate入门
- Hibernate入门
- hibernate 入门
- Hibernate入门
- hibernate入门
- [leetcode][tree][stack] Binary Search Tree Iterator
- IOS 整体框架类图值得收藏
- 稻盛和夫给中国企业家的忠告
- ServiceStack.Redis 使用过程中碰到的两个问题
- 随机更换背景颜色和背景时钟
- Hibernate入门
- 【原创】sqlite3数据库SQL error: database disk image is malformed问题探究(1)
- python book 学习笔记(二)
- 腾讯实习面试总结
- 快慢指针在链表中的应用
- Longest Palindromic Substring leetcode 5
- 如何让PC浏览器作为文件管理器(client),访问android手机(server)?
- STC89C52单片机——串口发送程序1
- 日志之Log4j