1. 程式人生 > >用eclipse寫hibernate連線MySQL資料庫案例

用eclipse寫hibernate連線MySQL資料庫案例

專案目錄如下:

需要匯入如下jar包,建議單獨放在一個lib資料夾下。

1.在MySQL中建立一個user表包含id, username,password三個屬性。id設為自動增長,其餘兩個為varchar(20)。

2.javabean user.java程式碼如下:

package habernateOne;

public class User {
	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password + ", id=" + id + "]";
	}
	private  String  username;
	private String password;
	private int id;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public User() {
		super();
		// TODO Auto-generated constructor stub
	}

}

3.全域性配置檔案hibernate.cfg.xml如下:

<?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 元素用於配置Hibernate中的屬性
			鍵:值 
		  -->
		  <!-- hibernate.connection.driver_class : 連線資料庫的驅動  -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		  <!-- hibernate.connection.username : 連線資料庫的使用者名稱 -->
		<property name="hibernate.connection.username">root</property>
		  <!-- hibernate.connection.password : 連線資料庫的密碼 -->
		<property name="hibernate.connection.password">YES</property>
		  <!-- hibernate.connection.url : 連線資料庫的地址,路徑 -->
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/ssh_hw</property>
		
		<!-- show_sql: 操作資料庫時,會 向控制檯列印sql語句 -->
		<property name="show_sql">true</property>
		<!-- format_sql: 列印sql語句前,會將sql語句先格式化  -->
		<property name="format_sql">true</property>
		<!-- hbm2ddl.auto: 生成表結構的策略配置
			 update(最常用的取值): 如果當前資料庫中不存在表結構,那麼自動建立表結構. 
			 		如果存在表結構,並且表結構與實體一致,那麼不做修改
			 		如果存在表結構,並且表結構與實體不一致,那麼會修改表結構.會保留原有列.
			 create(很少):無論是否存在表結構.每次啟動Hibernate都會重新建立表結構.(資料會丟失)
			 create-drop(極少): 無論是否存在表結構.每次啟動Hibernate都會重新建立表結構.每次Hibernate執行結束時,刪除表結構.
			 validate(很少):不會自動建立表結構.也不會自動維護表結構.Hibernate只校驗表結構. 如果表結構不一致將會丟擲異常.
		  -->
		<property name="hbm2ddl.auto">update</property> 		
		<!-- 資料庫方言配置 
		 org.hibernate.dialect.MySQLDialect (選擇最短的)
		 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

		<!-- hibernate.connection.autocommit: 事務自動提交  -->
		<property name="hibernate.connection.autocommit">true</property>
		<!-- 將Session與執行緒繫結=> 只有配置了該配置,才能使用getCurrentSession -->
		<property name="hibernate.current_session_context_class">thread</property>
		<!-- 引入ORM 對映檔案 
			填寫src之後的路徑
		 -->
		<mapping resource="habernateOne/User.hbm.xml"/>	
	</session-factory>
</hibernate-configuration>
	
	
	

4.區域性配置檔案如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <!-- ORM元資料  表物件關係對映檔案 
    	package : 配置該配置檔案中類所在的包.  -->
 <hibernate-mapping>
 	<class name="habernateOne.User" table="T_User">
        <id name="id"  column="id">
            <!--generator的class型別
                assigned:主鍵的狀態 assigned表示程式生成
                sequence:Oracle中的序列
                identity:Sql中的自動編號
                increment:先查詢最大的編號再增1
                uuid:生成32位長的字串
                native:根據資料庫自動生成
             -->
            <generator class="assigned" />
        </id>
        <!-- 直接使用property屬性設定 -->
        <property name="username"  column="username" length="20" />
         <property name="password" column="password" length="20" />
  </class>

 </hibernate-mapping>
 

5.測試類如下:

package habernateOne;


import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;

public class Test {
	 public static void main(String[] args) {
		Configuration con = new Configuration().configure();
		SessionFactory sessionFactory = con.buildSessionFactory();
		//向資料庫插入一條資料
		 Session session = sessionFactory.openSession();
		 User user = new User();
		user.setPassword("123");
		user.setUsername("六六六");
		session.save(user);
	   session.beginTransaction().commit();
              //查詢一條資料
                 User userx = (User)session.load(User.class,3);  //懶載入
	       System.out.println(userx);
	   session.close();
	}

}