Hibernate ORM框架——第一章:Hibernate简介与操作基础

mac2022-06-30  27

一、相关使用工具的下载与导入(环境配置)

hibernate-release-4.2.21.Final-->旧版本hibernate-release-5.2.10.Final-->新版本

首先需要解压:hibernate-release-5.2.10.Final(新版本)-->把解压后的 hibernate-release-5.2.10.Final文件夹里的 lib文件夹里的required文件夹里的所有jar包复制到根项目下的lib文件夹里,包括JDBC的ojdbc6.jar包-->把所有的jar包变成牛奶瓶

解压:hibernate-tutorials文件:可以从这个文件中找到:basic--一直点进去直到看到java和resources的文件,再依据需求来选择要那个文件里面的xml头文件

-->hibernate.cfg.xml(配置文件的头文件)

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

 

-->EmpMapping.xml(映射文件的头文件)

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

 

 

 

 

二、第一个Hibernate添加操作

1)使用PL/SQL数据库

 

2)第一个类比原生的JDBC实现添加操作:(不需要封装util包)

注意:此代码是必须先在数据库中创建所需要的表

 

2.1)类比jave原生的JDBC实现添加操作

1.1  util包-->DbUtils.java:连接数据库驱动

package utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DbUtils { private static final String url = "jdbc:oracle:thin:@localhost:1521:orcl"; private static final String username = "myuser"; private static final String password = "123"; public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url, username, password); } public static void closeConnection(Connection conn) throws SQLException { conn.close(); } }

 

1.2  写实体对象

package entity; public class TestEntity { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }

 

1.3  写dao包

package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import entity.TestEntity; import utils.DbUtils; public class TestDao { public void insert(String name) throws SQLException{ Connection conn = DbUtils.getConnection(); String sql = "insert into mytable values(?)"; PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, name); ps.executeUpdate(); } public List<TestEntity> getAll() throws Exception { List<TestEntity> result = new ArrayList<TestEntity>(); Connection conn = DbUtils.getConnection(); String sql = "select * from mytable"; PreparedStatement ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery(); while(rs.next()){ TestEntity entity = new TestEntity(); entity.setName(rs.getString(1)); result.add(entity); } return result; } }

 

1.4  写test测试包

package yuanMain; import java.util.List; import dao.TestDao; import entity.TestEntity; public class YuanMain { public static void main(String[] args) throws Exception { /*仿照以前JDBC添加和查询数据库的操作*/ /*添加*/ TestDao testdao = new TestDao(); //testdao.insert("xxttt"); /*查询*/ List<TestEntity> all = testdao.getAll(); System.out.println(all.size()); for (TestEntity testEntity : all) { System.out.println(testEntity.getName()); } } }

 

3)第一个hibernate实现添加操作代码(优化上面的类比java的代码)

3.1  -->先把解压后的 hibernate-release-5.2.10.Final文件夹里的 lib文件夹里的所有jar包复制到根项目下的lib文件夹里,包括JDBC的ojdbc6.jar包-->把所有的jar包变成牛奶瓶

 

项目结构:

 

 

3.2  写代码:

配置文件

<?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="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property> <property name="connection.username">myuser</property> <property name="connection.password">123</property> <!-- 在添加数据时可选hbm2ddl.auto。在查询时,可以不用:避免唯一约束的冲突 --> <!-- 根据schema在PL/SQL中自动创建数据表的工具 --> <!-- <property name="hbm2ddl.auto">create</property> --> <!-- 生成优化的SQL --> <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property> <!-- 显示hibernate生成的sql语句 --> <property name="show_sql">true</property> <!-- 显示格式化的SQL语句:优化排版 --> <property name="format_sql">true</property> <!-- 数据表映射配置文件 --> <mapping resource="com/nf/Personer.xml"></mapping> </session-factory> </hibernate-configuration>

 

实体对象:

package com.nf; public class Personer { private long pid; private String pname; public long getPid() { return pid; } public void setPid(long pid) { this.pid = pid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } }

 

实体映射文件

<?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-mapping package="com.nf"> <class name="Personer" table="Personers"> <id name="pid" column="id"> <!-- 标识主键:increment/native自动增长、assigned自己输入 --> <generator class="increment"></generator> </id> <property name="pname"></property> </class> </hibernate-mapping>

 

测试类

package com.nf; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.boot.MetadataSources; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; public class Main { public static void main(String[] args) { StandardServiceRegistry registry = new StandardServiceRegistryBuilder() .configure().build(); SessionFactory sf = new MetadataSources(registry) .buildMetadata().buildSessionFactory(); Session s = sf.openSession(); Personer ps = new Personer(); ps.setPname("xxx"); /*ps.setPname("试试");*/ Transaction ts = s.beginTransaction(); s.save(ps); ts.commit(); s.close(); sf.close(); } }

 

三、hibernate的工作原理

1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件

2.由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>读取并解析映射信息

3.通过config.buildSessionFactory();//创建SessionFactory

4.sessionFactory.openSession();//打开Sesssion

5.session.beginTransaction();//创建事务Transation

6.persistent operate持久化操作

7.session.getTransaction().commit();//提交事务

8.关闭Session

9.关闭SesstionFactory

 

为什么要使用hibernate:

1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作

3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。

4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

 

/*以上个人整理笔记,如果有误或者有不懂的地方,欢迎评论与指出*/

 

转载于:https://www.cnblogs.com/Sunny-lby/p/7350414.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)