Hibernate入門

Hibernate的使用

1.導入依賴包


2.配置hibernate.cfg.xml文件,  src目錄下

<?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.cfg.xml 配置文件提供鏈接數據庫的基本信息:賬號 密碼 驅動 數據庫ip 端口 -->
<hibernate-configuration>
	<session-factory>
        <!-- 數據庫連接設置 -->
        
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- jdbc:mysql://localhost:3306/study?characterEncoding=UTF-8 -->
        <property name="connection.url">jdbc:mysql://127.0.0.1:3306/study?characterEncoding=UTF-8</property>
        <property name="connection.username">root</property>
        <property name="connection.password">joey</property>
        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="current_session_context_class">thread</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">update</property>
        <mapping resource="com/joey/pojo/Employee.hbm.xml" />
	</session-factory>
</hibernate-configuration>
3.建立實體類

package com.joey.pojo;

/**
 * Employee實體類
 * 
 * @author Joey
 */
public class Employee {

	public int id;

	public String name;

	public String email;

	public int salary;

	public Employee(int id, String name, String email, int salary) {
		super();
		this.id = id;
		this.name = name;
		this.email = email;
		this.salary = salary;
	}

	public Employee(String name, String email, int salary) {
		super();
		this.name = name;
		this.email = email;
		this.salary = salary;
	}

	public Employee(String name) {
		super();
		this.name = name;
	}

	public Employee() {
		super();
	}

	@Override
	public String toString() {
		return "Employee [id=" + id + ", name=" + name + ", email=" + email + ", salary=" + salary + "]";
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public int getSalary() {
		return salary;
	}

	public void setSalary(int salary) {
		this.salary = salary;
	}
}
4.配置(實體類名)Employee.hbm.xml文件

, 與實體類同目錄:即com.joey.pojo中

<?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">

<!-- Product.hbm.xml 提供對象與表的映射關係 : 對應哪個表? 什麼屬性,對應什麼字段 -->
<hibernate-mapping package="com.joey.pojo">
	<class name="Employee" table="employee">
		<id name="id" column="id">
			<generator class="native">
			</generator>
		</id>
		<property name="name" /><!-- 沒有寫column是因爲跟name一致 -->
		<property name="email" />
		<property name="salary" />
	</class>
</hibernate-mapping>
5.測試
package com.joey.test;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;

import com.joey.pojo.Employee;

public class TestHibernate {

	public static void main(String[] args) {

		SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();
		
		Session session=sessionFactory.openSession();
		session.beginTransaction();
		
		/*Employee employee=new Employee();
		System.out.println("此時對象employee是瞬時狀態");
		employee.setName("最帥的帥浪");
		employee.setEmail("[email protected]");
		employee.setSalary(9999);
		session.save(employee);
		System.out.println("此時對象employee是持久狀態");*/
		
		// 通過get(實體類,id)獲取數據
		/*int idGet=19;
		Employee employee2=(Employee) session.get(Employee.class, idGet);
		System.out.println("id爲"+idGet+"的employee: "+employee2.toString());*/
		
		// delete-->先獲取目標數據,再進行刪除操作
		/*int idDel=8;
		Employee employee3=(Employee) session.get(Employee.class, idDel);
		session.delete(employee3);*/
		
		// update先獲取目標數據,再進行修改操作
		/*int idUpdate=6;
		Employee employee4=(Employee) session.get(Employee.class, idUpdate);
		employee4.setName("不帥的浪");
		session.update(employee4);*/
		
		/* 使用HQL,根據name進行模糊查詢 
		 * 1. 首先根據hql創建一個Query對象
		 * 2. 設置參數(和基1的PreparedStatement不一樣,Query是基0的)
		 * 3. 通過Query對象的list()方法即返回查詢的結果了。
		 * */
		/*String name="最帥的";
		// 使用HQL的時候,用的是類名而不是表名,並且不需要select
		Query query=session.createQuery("from Employee employee where employee.name like ?");
		query.setString(0, "%"+name+"%");//Query是基0的
		List<Employee> employees=query.list();
		for (Employee employee : employees) {
			System.out.println(employee.getName());
		}*/
		
		/* 使用Criteria 查詢數據
		 * 1. 通過session的createCriteria創建一個Criteria 對象
		 * 2. Criteria.add 增加約束。 在本例中增加一個對name的模糊查詢(like)
		 * 3. 調用list()方法返回查詢結果的集合
		 */
		String name="浪";
		Criteria criteria=session.createCriteria(Employee.class);
		criteria.add(Restrictions.like("name", "%"+name+"%"));
		List<Employee> employees=criteria.list();
		for (Employee employee : employees) {
			System.out.println(employee.getName());
		}
		
		
		session.getTransaction().commit();
		session.close();
//		System.out.println("此時對象employee是脫管狀態");
		sessionFactory.close();
		System.out.println("OK");
		
	}
}

完~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章