美文网首页
开发hibernate步骤

开发hibernate步骤

作者: 蘋果_283e | 来源:发表于2017-04-17 18:10 被阅读0次

创建工程可以是java也可以是web

1、引入jar文件

2、设计表同时开发和表的字段名一致的javabean(持久化类)

3、创建对象-关系映射文件:映射文件的扩展名为 .hbm.xml 这里Login.hbm.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

<class name="com.hw.entity.Student" table="tab_student">

<id name="id" type="integer" column="id"><!-- 如果列名和name名一致可以省去 -->

时间类型 把 java.util.Date 改成 java.sql.Date

<generator class="native"></generator><!-- 主键自增 --></id>

<property name="name" type="string"></property>

<property name="score" type="float"></property>

</class></hibernate-mapping>

4、创建 Hibernate 配置文件(hibernate.cfg.xml)

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                -->

<hibernate-configuration>

<session-factory>

<!-- hibernate 的mysql方言 -->

<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<property name="connection.url">jdbc:mysql://localhost:3306/stu?useUnicode=true&characterEncoding=utf8</property>

<property name="connection.username">root</property>

<property name="connection.password">root</property>

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>

<!-- hibernate自动生成表 -->

<property name="hibernate.hbm2ddl.auto">update</property>

<!-- hibernate显示sql -->(运行底下会显示语句,可以删)

<property name="show_sql">true</property>

<!-- hibernate 格式化sql-->(运行底下会显示语句,可以删)

<property name="format_sql">true</property>

<!-- hibernate映射文件 -->(点source的另一个 add加进去)

<mapping resource="com/hw/entity/Student.hbm.xml" />

</session-factory>

</hibernate-configuration>

5、加载xml文件,创建sessionFactory

public class HibernateUtil {

public static Session getSession() {//获取当前session

return new Configuration().configure().buildSessionFactory().openSession()

}

}

6、开发crud

private Session session=null;

public void add(Person per){//添加

session=HibernateUtil.getSession();

Transaction beginTransaction = session.beginTransaction();//开启事务

session.save(per);//添加

beginTransaction.commit();//事务提交

session.close();

}

public void update(Person per){//修改

session=HibernateUtil.getSession();

Transaction beginTransaction = session.beginTransaction();//开启事务

session.update(per);//修改

beginTransaction.commit();//事务提交

session.close();

}

//saveOrUpdate 添加或修改,有id且存在为修改或则为添加

public void del(Person per){//删除

session=HibernateUtil.getSession();

Transaction beginTransaction = session.beginTransaction();//开启事务

session.delete(session.get(Dept.class,id));//删除对象

beginTransaction.commit();//事务提交

session.close();

}

查询

1get和load可查询单个对象,两者区就是为查询不到时返回结果不同,get是null

load是not found

get方法

session=HibernateUtil.getSession();

// Transaction beginTransaction = session.beginTransaction();//开启事务

Person per = (Person) session.get(Person.class, id);//get获取单个对象

System.out.println(per.getId()+" "+per.getName()+" "+per.getMoney());

// beginTransaction.commit();//事务提交

session.close();  //注:查询可以不加事务

一、get方法查询单个对象,有就输出结果,没有则报空指针

案例:

public Person findByid(int id){//查询单个对象,可以不用事务

session=HibernateUtil.getSession();

Person per = (Person) session.get(Person.class, id);//get获取单个对象

session.close();

return per;

}

load方法

session=HibernateUtil.getSession();

// Transaction beginTransaction = session.beginTransaction();//开启事务

Person per = (Person) session.load(Person.class, id);//get获取单个对象

System.out.println(per.getId()+" "+per.getName()+" "+per.getMoney());

// beginTransaction.commit();//事务提交

session.close();  //注:查询可以不加事务

一、load方法查询单个对象,有就输出结果,没有则报找不到对象

http://www.iteye.com/topic/67686

(hibernate中get方法和load方法的根本区别

如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来延迟加载该对象。在用到对象中的其他属性数据时才查询数据库,但是万一数据库中不存在该记录,那没办法,只能抛异常ObjectNotFoundException,所说的load方法抛异常是指在使用该对象的数据时,数据库中不存在该数据时抛异常,而不是在创建这个对象时。由于session中的缓存对于hibernate来说是个相当廉价的资源,所以在load时会先查一下session缓存看看该id对应的对象是否存在,不存在则创建代理。所以如果你知道该id在数据库中一定有对应记录存在就可以使用load方法来实现延迟加载。

对于get方法,hibernate会确认一下该id对应的数据是否存在,首先在session缓存中查找,然后在二级缓存中查找,还没有就查数据库,数据库中没有就返回null。

虽然好多书中都这么说:“get()永远只返回实体类”,但实际上这是不正确的,get方法如果在session缓存中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是原先的代理对象,而不是实体类对象,如果该代理对象还没有加载实体数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数据库来加载数据,但是返回的还是代理对象,只不过已经加载了实体数据。

前面已经讲了,get方法首先查询session缓存,没有的话查询二级缓存,最后查询数据库;反而load方法创建时首先查询session缓存,没有就创建代理,实际使用数据时才查询二级缓存和数据库。

总之对于get和load的根本区别,一句话,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,就抛异常;而对于get方法,hibernate一定要获取到真实的数据,否则返回null。)1

1.get()采用立即加载方式,而load()采用延迟加载;

get()方法执行的时候,会立即向数据库发出查询语句,

而load()方法返回的是一个代理(此代理中只有一个id属性),只有等真正使用该对象属性的时候,才会发出sql语句

2.如果数据库中没有对应的记录,get()方法返回的是null.而load()方法出现异常ObjectNotFoundException

hibernate的get/load的根本区别分为4点:第一点是:load会抛出异常,get会返回空,一般采用的load方法。第二点是:get只返回实体对象实例。而load返回的是代理类实体对象实例。第三点是:get方法只能使用一级缓存。而load可以使用一级和二级缓存。第四点是:都是通过id得到单个对象的方法。

2list方法可以返回多个(hql)

public List<Dept>list() {//查询和原来jdbc有区别

Query createQuery = session.createQuery("from Dept");//from 后接类名

List<Dept>list = createQuery.list();

return list;

}

public List<Dept>listPage(int currentPage, int pageSize) {

//selecct* from dept limit ?,?

//hql中不支持limit分页,只能使用如下设置

Query createQuery = session.createQuery("from Dept");//from 后接类名

/*hibernate分页错误写法

* createQuery.setInteger(0,(currentPage-1)*pageSize);

createQuery.setInteger(1,pageSize);*/

//相当于limit的第1个问号

createQuery.setFirstResult((currentPage-1)*pageSize);

//相当于limit的第2个问号

createQuery.setMaxResults(pageSize);

List<Dept>list = createQuery.list();

return list;

}

public List<Dept>listLike(String name) {

//from Dept  相当于sql语句的 select * from Dept

Query createQuery = session.createQuery("from Dept where dname like ?");

//from 后接类名

createQuery.setString(0, '%'+name+'%');

//hibernate是从0开始,jdbc是从1开始

List<Dept>list = createQuery.list();

return list;

}

public int getCount() {//统计数量

Query createQuery = session.createQuery("from Dept");//from 后接类名

List<Dept>list = createQuery.list();

return list.size();

}

Query query = session.createQuery("select count(*) from "

+ clazz.getSimpleName());

count = (Long) query.uniqueResult();

session.close();

hql的update(不用)

public void updateStudent2(Student stu) {

Session session = HibernateUtils.getSession();

// 4创建数据库事务(要么同时功要么同时失败):开发中除了查询外都要用事务

Transaction beginTransaction = session.beginTransaction();

String hql="update Student set name=?,score=? where id=?";

// String hql="insert into Student values(null,?,?)"; //hib不支持insert

Query createQuery = session.createQuery(hql);

createQuery.setString(0, stu.getName());

createQuery.setFloat(1, stu.getScore());

createQuery.setInteger(2, stu.getId());

createQuery.executeUpdate();//执行修改或删除

beginTransaction.commit();

// 7关闭Session

session.close();

}

hql的delete(不用)

public void delStudent2(int id) {

Session session = HibernateUtils.getSession();

// 4创建数据库事务(要么同时功要么同时失败):开发中除了查询外都要用事务

Transaction beginTransaction = session.beginTransaction();

String hql="delete from Student  where id=?";

Query createQuery = session.createQuery(hql);

createQuery.setInteger(0,id);

createQuery.executeUpdate();//执行修改或删除

beginTransaction.commit();

// 7关闭Session

session.close();

}

createSQLQuery:用于复杂sql语句查询

public ListlistLikeStudentPage2(String name, int currentPage,int pageSize) {Session session = HibernateUtils.getSession();String sql="select * from tab_student where name like ? limit ?,?";//createSQLQuery:用于复杂sql语句查询SQLQuery query = session.createSQLQuery(sql);query.setString(0, '%'+name+'%');query.setInteger(1, (currentPage-1)*pageSize);query.setInteger(2, pageSize);query.addEntity(Student.class);//一定要添加实体类Listlist = query.list();

return list;

}

相关文章

  • hibernate

    Hibernate开发步骤搭建 1、导入相关jar包(Hibernate压缩包 > lib包 > required...

  • 开发hibernate步骤

    创建工程可以是java也可以是web 1、引入jar文件 2、设计表同时开发和表的字段名一致的javabean(持...

  • hibernate开发步骤

    原文链接http://zhhll.icu/2020/12/04/%E6%A1%86%E6%9E%B6/hibern...

  • Hibernate(二)HelloWord

    一、Hibernate开发步骤 1. 创建 Hibernate 配置文件 2. 创建持久化类 3. 创建对象-关系...

  • Hibernate应用开发步骤

    1.涉及持久化实体类 2.创建对象-关系映射文件 命名:实体类名字.hbm.xml 注册到关系映像文件 3.准备好...

  • Hibernate学习小记

    Hibernate开发的基本步骤? 编写配置文档hibernate.cfg.xml 编写实体类 生成对应实体类的映...

  • java框架Hibernate入门

    针对版本hibernate-distribution-3.6.0.Final的学习 搭建环境及开发步骤 引入jar...

  • Hibernate学习笔记:IDEA下Maven工程使用Hibe

    开发步骤 1、使用IDEA创建Maven工程;2、添加MySQL和Hibernate依赖,并通过IDEA生成Hib...

  • 框架第十五天

    Spring + SpringMVC + Hibernate3框架整合开发步骤首先导入jar包(我做的项目中涉及文...

  • 数据持久化之Hibernate(07)

    Hibernate的使用 一. Hibernate HelloWorld 1.1 搭建Hibernate开发环境步...

网友评论

      本文标题:开发hibernate步骤

      本文链接:https://www.haomeiwen.com/subject/iqztzttx.html