Hibernate ORM框架——第一章:Hibernate簡介與操作基礎
一、相關使用工具的下載與導入(環境配置)
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文件夾裏的所有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 { privatestatic 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 ORM框架——第一章:Hibernate簡介與操作基礎