Hibernate 【第一章 基础】
程序员文章站
2022-04-24 16:46:23
...
一、入门
1、创建数据库
create database test;
2、创建表
use test;
CREATE TABLE product_ (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(30) ,
price float ,
PRIMARY KEY (id)
) DEFAULT CHARSET=UTF8;
3、导入lib包
4、创建实体类,提供get/set
package com.cex.pojo;
public class Product {
int id;
String name;
float price;
}
5、创建Product.hbm.xml文件
<?xml version="1.0"?>
<!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.cex.pojo">
<class name="Product" table="product_">
<id name="id" column="id">
<generator class="native">
</generator>
</id>
<property name="name" />
<property name="price" />
</class>
</hibernate-mapping>
6、src目录下创建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>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</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/cex/pojo/Product.hbm.xml" />
</session-factory>
</hibernate-configuration>
7、基本原理图
hibernate.cfg.xml 配置文件提供链接数据库的基本信息
账号 密码 驱动 数据库ip 端口
Product.hbm.xml 提供对象与表的映射关系
对应哪个表? 什么属性对应什么字段
二、对象状态
实体类对象在Hibernate中有3种状态:分别是瞬时,持久和脱管
瞬时 指的是没有和hibernate发生任何关系,在数据库中也没有对应的记录,一旦JVM结束,这个对象也就消失了
持久 指得是一个对象和hibernate发生联系,有对应的session,并且在数据库中有对应的一条记录
脱管 指的是一个对象虽然在数据库中有对应的一条记录,但是它所对应的session已经关闭了
三、通过ID获取对象(get和load区别)
p
public class TestHibernate {
public static void main(String[] args){
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
Product product = (Product) session.get(Product.class,3);
System.out.println("product的名字是:"+product.getName());
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
}
四、删除一条数据
public class TestHibernate {
public static void main(String[] args){
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
Product p = (Product) session.get(Product.class,2);
session.delete(p);
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
}
五、更新一条对象
public class TestHibernate {
public static void main(String[] args){
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
Product p = (Product) session.get(Product.class,4);
p.setName("iphone-modify");
session.save(p);
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
}
六、使用HQL查询
public class TestHibernate {
public static void main(String[] args){
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
String name="iphone";
Query q = session.createQuery("from Product p where p.name like ?");
q.setString(0,"%"+name+"%");
List<Product> list = q.list();
for(Product p : list){
System.out.println(p.getName());
}
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
}
Query 的 setString 方法 设置hql参数,使用类名,非表名
七、使用Criteria查询
使用Criteria进行数据查询。
与HQL和SQL的区别是Criteria 完全是 面向对象的方式在进行数据查询,将不再看到有sql语句的痕迹。
提供分页,从记录下标3开始,显示4条记录。
public class TestHibernate {
public static void main(String[] args){
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
String name="iphone";
Criteria criteria = session.createCriteria(Product.class);
criteria.add((Restrictions.like("name","%"+name+"%")));
criteria.setFirstResult(3);
criteria.setMaxResults(4);
List<Product> list = criteria.list();
for(Product p : list){
System.out.println(p.getName());
}
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
}
八、使用标准sql查询
返回的集合里的每一个元素是一个对象数组。 然后再通过下标把这个对象数组中的数据取出来。
public class TestHibernate {
public static void main(String[] args){
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
String name="iphone";
String sql = "select * from Product_ p where p.name like '%"+name+"%'";
Query q = session.createSQLQuery(sql);
List<Object[]> list = q.list();
for (Object[] os : list){
for(Object o : os ){
System.out.println(o);
}
}
session.getTransaction().commit();
session.close();
sessionFactory.close();
}
}