ssh備考-01搭建hibernate框架+hibernate增刪改查

01搭建hibernate框架

02多表關聯關係映射

03hibernate各種查詢方式


目錄

一、準備好jar包文件

二、新建web項目,導入jar包

三、寫javabean和建立數據庫表

3.1寫javabean

3.2建立數據庫和表

四、編寫配置文件

4.1編寫javabean配置文件(一個javabean對應一個)

4.2編寫核心配置文件(一個項目一個)

五、編寫測試代碼

5.1封裝工具類

5.2編寫測試代碼

5.3 運行測試

六、增刪改查api:

6.1 HibernateTest.java(day01一半的重點)

6.2 兩個查詢接口Query和Criteria簡介(day02接口簡介)


一、準備好jar包文件

所有文件下載地址:直接下載hibernate01.zip       網盤備份下載

二、新建web項目,導入jar包

ctrl+V複製

三、寫javabean和建立數據庫表

3.1寫javabean

package cn.ahpu.domain;

/**
 * 學生的javabean
 * @author wwwha
 *
 */
public class Student {
	private Long id;
	private String name;
	private Integer age;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	
}

3.2建立數據庫和表

(後期會寫配置文件了,就不用建立表了,hibernate根據javabean幫你生成)

win+r->cmd進入命令行

mysql -uroot -proot
Create database hibernate01;
Use hibernate01;
CREATE TABLE student (
`id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '學生編號(主鍵)',
`name` varchar(32) NOT NULL COMMENT '客戶名稱(公司名稱)',
`age` int DEFAULT NULL COMMENT '客戶級別',
PRIMARY KEY (`id`)
);

 

四、編寫配置文件

4.1編寫javabean配置文件(一個javabean對應一個)

新建xml,命名爲Student.hbm.xml

內容如下:

<?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>
	<class name="cn.ahpu.domain.Student" table="student">
		<!-- java主鍵屬性與表的主鍵列名對應 -->
		<id name="id" column="id">
			<generator class="native"/>
		</id>
		
		<!-- 其他非主鍵屬性對應的配置   name爲類屬性名  column爲表列名-->
		<property name="name" column="name"/>
		<property name="age" column="age"/>
	</class>

</hibernate-mapping>

4.2編寫核心配置文件(一個項目一個)

src根目錄下新建xml,命名爲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:///hibernate01</property>
		 <property name="hibernate.connection.username">root</property>
		 <property name="hibernate.connection.password">root</property>
		 <!-- mysql數據庫方言 -->
		 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		 
		 <!-- 打印sql語句以及自動更新表 -->
		 <property name="hibernate.show_sql">true</property>
		 <property name="hibernate.format_sql">true</property>
		 <property name="hibernate.hbm2ddl.auto">update</property>
		 
		 <!-- 映射配置文件,需要引入映射的配置文件 -->
		 <mapping resource="cn/ahpu/domain/Student.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

 

五、編寫測試代碼

5.1封裝工具類

新建類HibernateUtils.java

package cn.ahpu.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {
	public static final Configuration CONFIG;
	public static final SessionFactory SESSION;

	static {
		CONFIG = new Configuration().configure();// 別忘記.configure()加載核心xml配置文件
		SESSION = CONFIG.buildSessionFactory();// 構造工廠
	}

	/**
	 * 從工廠獲取session對象
	 */
	public static Session getSession() {
		return SESSION.openSession();
	}
}

5.2編寫測試代碼

package cn.ahpu.test;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.ahpu.domain.Student;
import cn.ahpu.utils.HibernateUtils;

public class HibernateTest {
	@Test
	public void testsave(){
		Session session = HibernateUtils.getSession();//獲取能操控數據庫表的session
		Transaction tr = session.beginTransaction();//開啓事務
		try {
			//封裝數據
			Student stu = new Student();
			stu.setName("張三");
			stu.setAge(18);//id自動遞增千萬不要自己設置
			
			//一行代碼實現保存
			session.save(stu);
			
			tr.commit();//提交事務
		} catch (Exception e) {
			tr.rollback();
			System.out.println("訪問數據庫失敗,已經回滾!");
			e.printStackTrace();
		}finally{
			session.close();
		}
		
	}
}

 

5.3 運行測試

運行結果

若出現亂碼:將my.ini裏的utf8全部改爲gbk,然後重啓mysql服務。因爲dos窗口默認gbk,

或者利用chcp 65001將dos窗口的編碼改爲utf8也行    改回來是chcp 936

 

成功利用hibernate讀取了數據庫

下面是session的一些具體的增刪改查的代碼

六、增刪改查api:

6.1 HibernateTest.java(day01一半的重點)

package cn.ahpu.test;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;

import cn.ahpu.domain.Student;
import cn.ahpu.utils.HibernateUtils;

public class HibernateTest {
	
	/**
	 * 添加記錄
	 */
	@Test
	public void testSave() {
		Session session = HibernateUtils.getSession();// 獲取能操控數據庫表的session
		Transaction tr = session.beginTransaction();// 開啓事務
		try {
			
			Student stu = new Student();
			stu.setName("張三");
			stu.setAge(18);//id自增 千萬別自己set
			
			// 一行代碼實現添加
			session.save(stu);
			
			tr.commit();// 提交事務
		} catch (Exception e) {
			tr.rollback();
			System.out.println("訪問數據庫失敗,已經回滾!");
			e.printStackTrace();
		} finally {
			session.close();
		}
	}
	
	
	/**
	 * 測試簡單查詢 通過主鍵查詢一條記錄用get就夠了
	 */
	@Test
	public void testGet() {
		Session session = HibernateUtils.getSession();// 獲取能操控數據庫表的session
		Transaction tr = session.beginTransaction();// 開啓事務  查詢不需要啥事務的。。。
		Student stu = session.get(Student.class, 1L);
		System.out.println(stu.getName()+"||"+stu.getAge());
		tr.commit();// 提交事務
		session.close();
	}

	/**
	 * 測試刪除  注意hibernate刪除前必然先查詢
	 */
	@Test
	public void testDel() {
		Session session = HibernateUtils.getSession();// 獲取能操控數據庫表的session
		Transaction tr = session.beginTransaction();// 開啓事務
		try {
			//刪除id爲1的學生記錄
			Student stu = session.get(Student.class, 1L);
			System.out.println("查詢到:"+stu.getName());

			// 一行代碼實現刪除
			session.delete(stu);

			tr.commit();// 提交事務
		} catch (Exception e) {
			tr.rollback();
			System.out.println("訪問數據庫失敗,已經回滾!");
			e.printStackTrace();
		} finally {
			session.close();
		}
	}
	
	
	/**
	 * 測試更新  先插詢到javabean 修改javabean的值 再update更新
	 */
	@Test
	public void testUpdate() {
		Session session = HibernateUtils.getSession();// 獲取能操控數據庫表的session
		Transaction tr = session.beginTransaction();// 開啓事務
		try {
			//修改id爲2的學生記錄
			Student stu = session.get(Student.class, 2L);
			System.out.println("查詢到:"+stu.getName());
			
			//修改內容
			stu.setAge(20);
			
			// 一行代碼實現更新
			session.update(stu);
			
			tr.commit();// 提交事務
		} catch (Exception e) {
			tr.rollback();
			System.out.println("訪問數據庫失敗,已經回滾!");
			e.printStackTrace();
		} finally {
			session.close();
		}
	}
	
	/**
	 * 保存或修改
	 * 有則修改 沒有添加
	 */
	@Test
	public void testSaveOrUpdate(){
		Session session = HibernateUtils.getSession();
		Transaction tr = session.beginTransaction();
		
		//添加
		/*Student stu = new Student();
		stu.setName("李四");//id千萬不能自己set
		session.saveOrUpdate(stu);*/
		
		//修改
		Student stu2 = session.get(Student.class, 3L);//前提已經有3L id的記錄   於是可以修改3號學生年齡
		stu2.setAge(21);
		session.saveOrUpdate(stu2);
		
		tr.commit();
		session.close();
	}
	
	
	/**
	 * 測試查詢方法 (get只能簡單通過id查詢)  
	 * createQuery() -- HQL語句的查詢的方式
	 * 
	 * 後面詳細講解查詢
	 */
	@Test
	public void testQuery(){
		Session session = HibernateUtils.getSession();
		Transaction tr = session.getTransaction();
		
		//創建查詢接口  (最簡單的一種)
		Query query = session.createQuery("from Student");
		//查詢所有
		List<Student> list = query.list();
		for (Student stu : list) {
			System.out.println(stu.getName()+"\t"+stu.getAge());
		}
		
		tr.commit();
		session.close();
	}
}

6.2 兩個查詢接口Query和Criteria簡介(day02接口簡介)

TestQuerySimple.java

package cn.ahpu.test;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;

import cn.ahpu.domain.Student;
import cn.ahpu.utils.HibernateUtils;

/**
 * 第二天查詢接口的簡介 記錄一下  最後一天會詳細講解
 * 	query查詢接口和Criteria查詢接口簡介
 */
public class TestQuerySimple {
	//TODO query查詢接口
	/****************************query查詢接口***************************/
	//1.查詢所有記錄	query查詢接口
	@Test
	public void TestQuery1(){
		Session session = HibernateUtils.getSession();
		Transaction tr = session.beginTransaction();
		
		Query query = session.createQuery("from Student");
		List<Student> list = query.list();
		for (Student stu : list) {
			System.out.println(stu.getName()+"\t"+stu.getAge());
		}
		
		tr.commit();
		session.close();
	}
	
	
	//2.條件查詢1		query查詢接口
	@Test
	public void TestQuery2(){
		Session session = HibernateUtils.getSession();
		Transaction tr = session.beginTransaction();
		
		Query query = session.createQuery("from Student where name=?");
		query.setString(0, "張三");//設置第0個?號值爲"張三"
		List<Student> list = query.list();
		for (Student stu : list) {
			System.out.println(stu.getName()+"\t"+stu.getAge());
		}
		
		tr.commit();
		session.close();
	}
	
	
	//3.條件查詢2		query查詢接口
	@Test
	public void TestQuery3(){
		Session session = HibernateUtils.getSession();
		Transaction tr = session.beginTransaction();
		
		Query query = session.createQuery("from Student where name=:aa and age=:bb");
		query.setString("aa", "張三");//設置:aa值爲"張三"
		query.setInteger("bb", 100);//設置:bb值爲100
		List<Student> list = query.list();
		for (Student stu : list) {
			System.out.println(stu.getName()+"\t"+stu.getAge());
		}
		
		tr.commit();
		session.close();
	}
	
	//TODO query查詢接口
	/********************Criteria查詢接口(做條件查詢非常合適  完全屏蔽了sql語句  各種查詢條件都封裝了api)****************/
	//1.查詢所有		Criteria查詢接口
	@Test
	public void testQuery1(){
		Session session = HibernateUtils.getSession();
		Transaction tr = session.beginTransaction();
		
		Criteria criteria = session.createCriteria(Student.class);
		List<Student> list = criteria.list();
		for (Student stu : list) {
			System.out.println(stu.getName()+"\t"+stu.getAge());
		}
		
		tr.commit();
		session.close();
	}
	
	
	//2.條件查詢1(where name=?)		Criteria查詢接口
	@Test
	public void testQuery2(){
		Session session = HibernateUtils.getSession();
		Transaction tr = session.beginTransaction();
		
		Criteria criteria = session.createCriteria(Student.class);
		criteria.add(Restrictions.eq("name", "張三"));
		List<Student> list = criteria.list();
		for (Student stu : list) {
			System.out.println(stu.getName()+"\t"+stu.getAge());
		}
		
		tr.commit();
		session.close();
	}
	
	
	//2.條件查詢2(where name=? and age=?)		Criteria查詢接口
	@Test
	public void testQuery3(){
		Session session = HibernateUtils.getSession();
		Transaction tr = session.beginTransaction();
		
		Criteria criteria = session.createCriteria(Student.class);
		criteria.add(Restrictions.eq("name", "張三"));
		criteria.add(Restrictions.eq("age", 100));//注意屬性名都加""
		List<Student> list = criteria.list();
		for (Student stu : list) {
			System.out.println(stu.getName()+"\t"+stu.getAge());
		}
		
		tr.commit();
		session.close();
	}
	
	
	//2.條件查詢3(其他各種查詢條件)		Criteria查詢接口
	@Test
	public void testQuery4(){
		Session session = HibernateUtils.getSession();
		Transaction tr = session.beginTransaction();
		
		Criteria criteria = session.createCriteria(Student.class);
		criteria.add(Restrictions.eq("age", 100));
		criteria.add(Restrictions.like("name", "張%"));
		List<Student> list = criteria.list();
		for (Student stu : list) {
			System.out.println(stu.getName()+"\t"+stu.getAge());
		}
		
		tr.commit();
		session.close();
	}
}

 

 

發佈了388 篇原創文章 · 獲贊 89 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章