hibernate學習過程中遇到的幾個小問題,簡單記錄一下,就當是學習筆記了。
一.DML是什么?以前面試時候背的好熟啊,但是忘記了,雖然不屬于Hibernate,但是突然想起來了就記錄一下。
DML(data manipulation language):數據庫操作語言。它們是SELECT、UPDATE、INSERT、DELETE,主要是對數據庫中的數據進行操作的語 言。
DDL(data definition language):數據庫定義語言。主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定義或改變表(TABLE)的結構,數據類型,表之間的鏈接和約束等初始化工作上,他們大多在建立表時使用。
DCL(Data Control Language):數據庫控制語言。是用來設置或更改數據庫用戶或角色權限的語句,包括(grant,deny,revoke等)語句。在默認狀態下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人員才有權力執行DCL。
二.Hibernate的JNDI數據源的配置
轉自:http://hi.baidu.com/smugmd/blog/item/884da31f4f6b91f1e0fe0b8e.html/cmtid/7e7aa1d32d7059d1a8ec9a6a
Hibernate使用Tmocat的連接池的配置過程:1.在Tomcat的server.xml里加入 <Context path="/ttt" docBase="ttt" debug="5" reloadable="true" crossContext="true"> <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" passWord="" driverClassName="com.MySQL.jdbc.Driver" url="jdbc:mysql://localhost:3306/tianyu?autoReconnect=true"/> </Context>2.把mysql的驅動程序導入的項目下的/WEB-INF/lib下,或直接導入到Tomcat的jar包文件里3./WEB-INF下的web.xml修改成 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/TestDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>4.hibernate.cfg.xml改為 <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration> <session-factory> <PRoperty name="connection.datasource">java:comp/env/jdbc/TestDB</property> <property name="show_sql">true</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Mapping files --> <mapping resource="com/Student.hbm.xml" /> </session-factory></hibernate-configuration>5.其他的javabean類和session工廠可以使用自動生成
三.配置文件中的方言
首先,為什么要使用方言,數據可以都是支持SQL的,但是不同的數據庫在語法上會有一些差異,而hibernate是支持跨數據庫的,那么在使用不同的數據庫的時候,為了解決數據庫之間的差異問題就出現了方言。方言的出現保證了HQL翻譯成SQL的正確性。
下面轉載了一下對方言的解釋,地址:http://blog.chinaunix.net/uid-20550186-id-1927306.html
如果一個系統可能運行于多種數據庫,或者同時使用多種數據庫,那么,使用Hibernate將會給你帶來很多的方便,想信很多接觸Hibernate的人都會體會到。Hibernate底層是通過dialect包來對各種數據庫的差異進行抽象的。Dialect類中實現每種數據庫相同的東西,而不同數據庫對應會有該類的一個擴展實現,最終通過DialectFactory來決定創建哪一個類。通常我們都會指定hibernate.dialect屬性,那直接創建該屬性對應的類。如果我們沒有指定該屬性,那么由Hibernate自己決定選擇合適的方言。在DialectFactory中初始化各種數據庫對應的方言的Map,以數據庫產品名為key,以方言的包裝對象為value。Hibernate自動選擇方言時,會通過JDBC的DatabaseMetadata取得數據庫的產品名稱,根據名稱取得對應的方言。DialectFactory中對該Map的初始化的部分代碼如下:
Java代碼
原本上,這種自動選擇的方式,會給我們帶來方便,只可惜,從以上的代碼的注釋中可以知道,目前這一部分的初始化是通過硬編碼的,只有在以后的版本才會移動到配置文件或其他容易用戶編譯的地方,否則,我們可以非常容易的添加我們的配置供Hibernate進行自動選擇。而經常我們所使用的數據庫驅動程序所取到的數據庫產品名稱會跟以上硬編碼的不同,所以最終我們還是得自己配置數據庫方言。
由于我們的系統中用到了好幾個數據源,經常也是對應不同類型的數據庫,并且數據源都是由容器提供的,在首次部署時經常因為數據庫類型變了而忘了修改對應的數據庫方言,而出了問題,這給實施人員帶來了很多的不便。不過目前除了對各種數據庫提供與以上硬編碼相同的數據庫產品名稱的驅動程序外,我們就只能自己動手了。
新聞熱點
疑難解答