1. 程式人生 > >數據持久化編程學習總結

數據持久化編程學習總結

jdbc src struts2 b2c 基本 nat 編程 發現 orm框架

一、JDBC編程


1. 使用JDBC規範

在數據庫編程方面。最先使用的數據持久化技術無疑是JDBC

能夠說JDBC(Java Data Base Connectivity)是學習其他數據持久化技術的基礎

Java中訪問數據庫使用的就是JDBC。基本操作有CRUD(Create-Read-Update-Delete)

JDBC定義了數據庫的連接。SQL語句的運行以及查詢結果集的遍歷,一般操作過程例如以下:

1. 註冊驅動:DriverManager.registerDriver(driver);

2. 建立連接:Connection conn = DriverManager.getConnection(url, "username","password");

3. 獲取對象:Statement stmt = conn.createStatement();

4. 運行查詢:ResultSet rs = stmt.executeQuery(sqlstring);

5. 處理結果:while (rs.next()){doing something about the result}

6. 釋放連接:rs.close(); stmt.close();conn.close();

總結:在初學階段,無疑是必須學會使用原生態的JDBC進行數據庫編程

長處:JDBC為數據庫編程提供了可能,規範了數據庫的連接和操作方式

缺點:JDBC API和SQL語句與Servlet和JSP夾雜在一起

每次進行數據庫操作都要進行對象的創建與銷毀

二、JDBC高級應用


1. 使用DAO模式

大量進行JDBC編程後,就積累了不少經驗和發現不少缺點,於是對JDBC進行分層和模塊化

而DAO(Data Access Object)和POJO(Plain Old Java Object)則是JDBC下經常使用的模式

在DAO模式出現之前,操作數據庫的代碼與業務代碼均出如今Servlet或者JSP中

SQL語句、Java語句和Html語句夾雜在一起了,導致開發效率非常底下

而使用了DAO模式後,全部的JDBC API和SQL語句均移到了DAO層

實現分層後Servlet、JSP僅僅與Java Bean、DAO層交互,而不會有JDBC API和SQL語句

這無疑添加了程序的清晰性、可讀性。並且其可重用性比較好

2. 使用DBCP

在JDBC編程中。每一次的數據操作,都要創建並銷毀conn對象、stmt對象和rs對象

繁瑣的創建和銷毀這些對象無疑會消耗一定的時間和IO資源,在並發訪問時尤其明顯

使用數據源DBCP(DataBase connection pool)技術能夠解決這一問題

數據源一般配置在xml文件裏,使用數據源會自己主動進行優化和管理,一般配置例如以下:

		<property name="driverClassName" value="driverClassName"></property>
		<property name="url" value="jdbc url"></property>
		<property name="username" value="username"></property>
		<property name="password" value="password"></property>

總結:DAO模式攻克了JDBC API和SQL語句與JSP的夾雜問題並實現了分層

DBCP則為繁瑣的創建和銷毀對象提供了解決方法

三、使用ORM框架Hibernate進行數據庫編程


1. ORM框架的基本原理

DAO模式無非就是手動將POJO拆分並拼裝成SQL語句和將SQL查詢結果拼裝回POJO

在使用了JDBC高級技術和DAO模式進行編程後。仍然須要編寫大量的SQL語句

而ORM通過xml配置文件或使用Java註解的方式把Java對象映射到數據庫上

這樣ORM(Object-Relative Database-Mapping框架就能自己主動生成SQL語句

2. 使用ORM框架Hibernate進行數據庫編程

Hibernete是ORM框架的一種,相同可以自己主動生成SQL語句

在DAO模式中,一個簡單的Person POJO例如以下(省略getter和setter方法):

public class Person {
	private Integer id;
	private String name;
}

相應於數據庫的表person(使用MySQL數據庫)

create table if not exists person ( 
   id int primary key auto_increment, 
   name varchar(20) not null,   
);

使用Java註解後Person POJO實體類能映射到數據庫上,並能自己主動生成SQL語句

代碼例如以下(省略getter和setter方法):

	@Entity
	@Table(name = "person")
	public class Person{
	     @Id
	     @GeneratedValue(strategy= IDENTITY)
	     private Integer id;
	     @Column(name = "name")
	     private String name;
	}

Hibernate使用Session和HQL語句進行數據庫的相關操作。如查詢數據的操作例如以下:

       Session session = HibernateSessionFactory.getSessionFactory().openSession(); 
       String queryString = "select p.id,p.name from Person p"; 
       //查詢並輸出全部的記錄 
       List<Object[]> personList = session.createQuery(queryString).list(); 
       for(Object[] row : personList){ 
           for(Object obj : row) 
                System.out.print("  " + obj); 
           System.out.println(); 
       } 
       session.close();

總結:ORM這類的框架攻克了DAO層須要編寫大量的SQL語句的問題

(Hibernate使用HQL攻克了數據庫的移植問題)

長處:無需再編寫大量的SQL語句並攻克了數據庫移植問題

缺點:在數據庫事務操作上仍然要編寫較多的代碼

四、使用JPA規範進行數據庫編程

1. 使用JPA規範

因為人們使用各種不同的數據庫如Oracle、DB2、MySQL和SQL Server等進行數據存儲

所以進行數據庫連接的方式必定多種多樣。而JDBC則規範了數據庫的連接方式

相同的道理,各種ORM框架的出現必定會使開發和維護的難度升級

所以Java官方又推出了JPA規範。旨在規範各種ORM框架。使其有統一的接口和方法

使用JPA規範進行數據庫編程僅僅需指定一種ORM框架作為底層的實現,如Hibernate

假設須要更換其他的ORM框架則僅僅需在配置文件裏改動,類似於更換其他的數據庫

而JPA規範則使用EntityManager進行相關的數據庫操作。如查找操作例如以下:

	public boolean findPersonByName(String name) {
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("persistence-unitname");
		EntityManager em = emf.createEntityManager();
		Person person = em. findPersonByName(name);
		if (a == null)
			return false;
		return true;
	}

總結:JPA須要指定一種ORM框架作為底層的實現

JPA也是使用Java註解配置POJO,使用EntityManager進行相關的數據庫操作

長處:JPA規範旨在規範各種ORM框架,使其有統一的接口和方法

缺點:仍然須要對事務管理進行編程

五、使用SpringDAO進行數據庫編程

SpringDAO對JDBC進行了封裝,結合DAO模式進行使用

SpringDAO規範使用JDBCTemplate進行相關的數據庫操作。如查找操作,代碼例如以下:

public int getPersonCount(){
     String sql = "select count(*) from person";
     return getJdbcTemplate().queryForInt(sql);
}

總結:SpringDAO對JDBC進行了封裝,隱藏了JDBC API,僅僅需使用getJdbcTemplate()方法

類似於使用DAO模式,僅僅是封裝了JDBC和提供了事務管理,降低了代碼量

長處:可以通過使用Spring進行事務管理

隱藏和封裝了JDBC API

缺點: 類似於使用DAO模式,仍然須要編寫和使用大量的SQL語句

六、使用SpringORM進行數據庫編程

SpringORM就是為了解決SpringDAO的缺點。讓其完好起來

這樣一來,SpringORM就有了全部的長處,包含可以使用DAO模式進行分層

可以使用ORM框架解決編寫大量的SQL語句的問題

隱藏和封裝了JDBC API。僅僅需使用getHibernateTemplate()方法,降低了代碼量

可以使用HQL解決數據庫的移植問題,而且通過使用Spring進行事務管理

總結:使用SpringORM進行數據持久化編程是相對照較理想的

補充:使用SSH框架進行Java Web編程可以做到合理分層

能將業務邏輯、數據持久化和表現邏輯明白分開,思路清晰

表現邏輯層中的Struts2是MVC框架。可以進行頁面導航和實現視圖顯示

在結構上表現為使用action進行頁面導航,使用JSP作為視圖界面

數據持久層中的Hibernate則是持久化ORM框架。可以自己主動生成SQL語句

在結構上表現為使用DAOPOJOdomain)實現數據持久化

業務邏輯層的Spring則能使用簡單的封裝好的JDBC API進行CRUD操作和事務管理

在結構上表現為使用service進行業務管理

技術分享





數據持久化編程學習總結