1. 程式人生 > >搭建簡單的hibernate框架,完成對mysql的增刪改查

搭建簡單的hibernate框架,完成對mysql的增刪改查

搭建hibernate的步驟:

1.首先下載hibernate原始碼https://nchc.dl.sourceforge.net/project/hibernate/hibernate4/4.3.11.Final/hibernate-release-4.3.11.Final.zip

2.建立一個java專案,hibernate是對資料庫操作的,所以建立一個普通的java專案就可以了。然後把解壓的hibernate-release-4.3.11.Final中lib裡的required中的所有jar包放到專案中

3.配置hibernate.cfg.xml(名稱隨意,但一般是這個名稱,因為Configuration呼叫configure時預設的檔名稱就是它)

4.建立實體類,並配置實體類的對映配置檔案


開始建立java專案:

1.在建立完java專案後,再建立一個lib資料夾,把所有的jar放到lib中,然後選中所有jar,右鍵add,把它加入就可以了。(注:建立的動態web專案是不用add的,直接放到lib中它會自動新增的)

 

 

 

 

 

2.建立 hibernate.cfg.xm檔案

在src下建立xml檔案,然後在hibernate-core的jar包中找到dtd校驗的檔案頭

配置連線資料庫的相關內容

<?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="hibernate.connection.driver_class">
        com.mysql.jdbc.Driver
    </property>
    <property name="hibernate.connection.url">
        jdbc:mysql://127.0.0.1:3306/testdb?useUnicode=true&amp;characterEncoding=UTF-8
    </property>
    <property name="hibernate.connection.username">
        root
    </property>
    <property name="hibernate.connection.password">
        123
    </property>
</session-factory>
</hibernate-configuration>

 建立實體類

package com.pojo;
/**
 * 使用者實體類
 * @author zy
 *
 */
public class UserInfo {
	
	private int userId;
	private String userName;
	private String userSex;
	
	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserSex() {
		return userSex;
	}
	public void setUserSex(String userSex) {
		this.userSex = userSex;
	}
	
	@Override
	public String toString() {
		return "UserInfo [userId=" + userId + ", userName=" + userName + ", userSex=" + userSex + "]";
	}
}

 建立實體類的對映檔案

<?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">
<hibernate-mapping package="com.pojo">
<!-- 配置UserInfo的ORM對映 :配置package可以讓class中的name只寫類名-->
<class name="UserInfo" table="t_user">
<!-- 配置主鍵對映 -->
<!-- id ->name:UserInfo類中的主鍵屬性名稱 ,區分大小寫
    column->name:不區分大小寫,資料庫表中的欄位
-->
<id name="userId" type="int">
<column name="user_id"/>
<!-- 配置主鍵的生成策略
    identity
    increment
    native
    如果設定了主鍵自動增長就把下面generator的註釋開啟
 -->
<!-- <generator class="native"></generator> -->
</id>
<!-- 屬性對映 -->
<property name="userName" column="user_name"></property>
<property name="userSex" column="user_sex"></property>
</class>
</hibernate-mapping>

再在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 name="hibernate.connection.driver_class">
        com.mysql.jdbc.Driver
    </property>
    <property name="hibernate.connection.url">
        jdbc:mysql://127.0.0.1:3306/testdb?useUnicode=true&amp;characterEncoding=UTF-8
    </property>
    <property name="hibernate.connection.username">
        root
    </property>
    <property name="hibernate.connection.password">
        123
    </property>
    <!-- 加入ORM對映檔案  -->
    <mapping resource="com/pojo/UserInfo.hbm.xml"/>
</session-factory>
</hibernate-configuration>

建立測試類:

package com.test;
/**
 * 測試hibernate的使用
 * @author zy
 *
 */

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;


import com.pojo.UserInfo;

@SuppressWarnings("all")
public class Test {
	private static SessionFactory sessionFactory;
	//SessionFactory是重量級的物件,很佔記憶體,所以使用靜態塊只建立一次。
	static{
		//載入並解析hibernate的配置檔案configure()中可以不寫,因為預設的就是/hibernate.cfg.xml
		Configuration cfg=new Configuration().configure("/hibernate.cfg.xml");
		//建立註冊服務物件
		ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
		//建立SessionFactory物件
		sessionFactory=cfg.buildSessionFactory(serviceRegistry);
	}
	public static void main(String[] args) {
		myquery();
		
	}
	//單條查詢
	private static void queryOne(){
		Session session = sessionFactory.openSession();
		//簡單單條查詢,查詢表中的第一條資料
		UserInfo userInfo=(UserInfo) session.get(UserInfo.class, 1);
		System.out.println(userInfo);
	}
	//更新
	private static void update(){
		Session session = sessionFactory.openSession();
		//開啟事務
		Transaction tx=session.beginTransaction();
		//簡單單條查詢,查詢表中的第2條資料
		UserInfo userInfo=(UserInfo) session.get(UserInfo.class, 2);
		//更新
		userInfo.setUserName("胡歌");
		session.update(userInfo);
		tx.commit();
	}
	//新增
	private static void save(){
		Session session = sessionFactory.openSession();
		//開啟事務
		Transaction tx=session.beginTransaction();
		UserInfo userInfo=new UserInfo();
		userInfo.setUserId(5);
		userInfo.setUserName("怎麼說");
		userInfo.setUserSex("男");
		session.save(userInfo);
		tx.commit();
	}
	//刪除
	private static void delete(){
		Session session = sessionFactory.openSession();
		//開啟事務
		Transaction tx=session.beginTransaction();
		//簡單單條查詢,查詢表中的第3條資料
		UserInfo userInfo=(UserInfo) session.get(UserInfo.class,3);
		session.delete(userInfo);
		tx.commit();
	}
	//自定義查詢yuj
	private static void myquery(){
		Session session = sessionFactory.openSession();
		//查詢特定類屬性,from+類名不是表名
		String hql="from com.pojo.UserInfo";
		//查詢某個欄位
		hql="select us.userName from UserInfo us";
		//where條件查詢
		hql="from UserInfo us where us.userId=2";
		Query query = session.createQuery(hql);
		//使用命名引數查詢
	/*	String hql = "FROM UserInfo us WHERE us.userId = :us_id";
		Query query = session.createQuery(hql);
		query.setParameter("us_id",4);
		List results = query.list();*/
		
		List lists = query.list();
		for (Object list : lists) {
			System.out.println(list);
		}
		session.close();
	}
/**
 * UPDATE 語句能夠更新一個或多個物件的一個或多個屬性。下面是使用 UPDATE 語句的簡單的語法:
	String hql = "UPDATE UserInfo set userName = :userName "  + 
	             "WHERE userId = :userId";
	Query query = session.createQuery(hql);
	query.setParameter("userName", "忽悠");
	query.setParameter("userId", 10);
	int result = query.executeUpdate();
	System.out.println("Rows affected: " + result);
 */
/**
 * DELETE 語句可以用來刪除一個或多個物件。以下是使用 DELETE 語句的簡單語法:
	String hql = "DELETE FROM UserInfo "  + 
	             "WHERE userId = :userId";
	Query query = session.createQuery(hql);
	query.setParameter("userId", 10);
	int result = query.executeUpdate();
	System.out.println("Rows affected: " + result);
 */
	/**
	 * HQL 只有當記錄從一個物件插入到另一個物件時才支援 INSERT INTO 語句。下面是使用 INSERT INTO 語句的簡單的語法:
	String hql = "INSERT INTO UserInfo(userId, userName, userSex)"  + 
	             "SELECT userId, userName, userSex FROM old_UserInfo";
	Query query = session.createQuery(hql);
	int result = query.executeUpdate();
	System.out.println("Rows affected: " + result);
	 */
}