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");
}
}
完~