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