hibernate通过session实现增删改查操作实例解析

今天学习了一下如何通过hibernate来实现对数据库的增删改查,下面来简单介绍一下:

首先创建个Student类:

package com.hibernate.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "_Teacher")
public class Teacher {
	private int id;
	private String name;
	private int age;
	private String birthPlace;
	@Id
	@GeneratedValue
	@Column(name = "_id")
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	@Column(name = "_name")
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Column(name = "_age")
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Column(name = "_birthPlace")
	public String getBirthPlace() {
		return birthPlace;
	}
	public void setBirthPlace(String birthPlace) {
		this.birthPlace = birthPlace;
	}
}

然后创建个JUnit Test Case类型的TeacherTest:

先讲讲session.save()方法,也就是增:

package com.hibernate.model;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
public class TeacherTest {
	public static SessionFactory sf = null;
	@BeforeClass
	  public static void beforeClass(){
		try{
			sf = new AnnotationConfiguration().configure().buildSessionFactory();
			//此处最好要获取一下异常,因为annotation有一个bug有时出现有时不出现
		}
		catch(Exception e){
			e.printStackTrace();
		}
		finally{
		}
	}
	@Test
	  public void testSave() {
		//增
		Teacher t = new Teacher();
		t.setAge(23);
		t.setName("moluo");
		t.setBirthPlace("huangshan");
		Session session = sf.getCurrentSession();
		session.beginTransaction();
		session.save(t);
		session.getTransaction().commit();
	}
	@AfterClass
	  public static void afterClass(){
		sf.close();
	}
}

亮结果:

再讲讲session.delete()方法,也就是删:

@Test
  public void testDelete() {
	//删
	Teacher t = new Teacher();
	t.setId(2);
	Session session = sf.getCurrentSession();
	session.beginTransaction();
	session.delete(t);
	session.getTransaction().commit();
}

亮结果:

接着再来session.get(),也就是查:

@Test
  public void testGet() {//get
    Session session = sf.getCurrentSession();
    session.beginTransaction();
    Teacher t = (Teacher)session.get(Teacher.class, 1);
    System.out.println("姓名为:"+t.getName());
    session.getTransaction().commit();
  } 

亮结果:

Hibernate: select teacher0_._id as column1_1_0_, teacher0_._age as column2_1_0_, teacher0_._birthPlace as column3_1_0_, teacher0_._name as column4_1_0_ from _Teacher teacher0_ where teacher0_._id=?
姓名为:moluo 

再来另一种查询方式:session.load():

@Test
  public void testLoad() {//load
    Session session = sf.getCurrentSession();
    session.beginTransaction();
    Teacher t = (Teacher)session.load(Teacher.class, 1);
    System.out.println("姓名为:"+t.getName());
    session.getTransaction().commit();
  } 

亮结果:

Hibernate: select teacher0_._id as column1_1_0_, teacher0_._age as column2_1_0_, teacher0_._birthPlace as column3_1_0_, teacher0_._name as column4_1_0_ from _Teacher teacher0_ where teacher0_._id=?
姓名为:moluo 

这里解释一下这俩查询之间的区别:首先当要查询的对象不存在的时候,返回的信息是不同的。get方式会返回:java.lang.NullPointerException

load方式会返回:org.hibernate.ObjectNotFoundException:Norowwiththegivenidentifierexists

其次,load返回的是代理对象,等真正用到的时候才会发出SQL语句;另外get是直接从数据库里加载数据,不存在延迟。

最后再讲讲最常用的更新方式,通过HQL语句来更新:

@Test
  public void testUpdate() {//更新
    Session session = sf.getCurrentSession();
    session.beginTransaction();
    String url = "update Teacher t set t.birthPlace = 'anhui' where id = 1";
    //注意这里的Teacher必须是对象名字,而不是表名,t是对象的别名
    Query q = session.createQuery(url);
    //这里导入的包是:import org.hibernate.Query;
    q.executeUpdate();
    session.getTransaction().commit();
  } 

亮结果:

通过更新,把摩罗我的籍贯从黄山更新成安徽了....

其实本身有session.update()这个更新方法的,但只是这个更新方法如果你每次只更新一部分列的话,这种更新方式也会把所有列都更新一遍,效率不是太高,所以就不怎么提倡使用,当然也有弥补方式,比如如果使用的是xml的话,可以在配置文件中某个不想被更新的列的property标签里设置update="false";另外也可以在配置文件的class后面设置动态更新:dynamic-update="true";当然如果使用的是Annotation,可以在不想更新的列上设置@column(update="false");其实这些都不灵活,使用HQL才是最好的,所以这里就只贴出HQL更新的代码。

总结

以上就是本文关于hibernate通过session实现增删改查操作实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以参阅本站:

快速了解Hibernate中的Session

hibernate属性级别注解实例代码

Hibernate使用hbm.xml配置映射关系解析

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

(0)

相关推荐

  • SSH整合中 hibernate托管给Spring得到SessionFactory

    <prop key="hibernate.current_session_context_class">thread</prop> 然后 Resource resource=new ClassPathResource("/WEB-INF/applicationContext.xml"); BeanFactory factory=new XmlBeanFactory(resource); SessionFactory sessionFactor

  • Hibernate管理Session和批量操作分析

    本文详细分析了Hibernate管理Session和批量操作的用法.分享给大家供大家参考.具体分析如下: Hibernate管理Session Hibernate自身提供了三种管理Session对象的方法 ① Session对象的生命周期与本地线程绑定 ② Session对象的生命周期与JTA事务绑定 ③ Hibernate委托程序管理Session对象的生命周期 在Hibernate的配置文件中,hibernate.current_session_context_class属性用于指定Sess

  • Hibernate中获取Session的两种方式代码示例

    Session:是应用程序与数据库之间的一个会话,是Hibernate运作的中心,持久层操作的基础.对象的生命周期/事务的管理/数据库的存取都与Session息息相关. Session对象是通过SessionFactory构建的,下面举个例子来介绍Hibernate两种获取session的方式. 日志,是编程中很常见的一个关注点.用户在对数据库进行操作的过程需要将这一系列操作记录,以便跟踪数据库的动态.那么一个用户在向数据库插入一条记录的时候,就要向日志文件中记录一条记录,用户的一系列操作都要在

  • Hibernate三种状态和Session常用的方法

    我们知道hibernate的核心就是对数据库的操作,里面的核心接口就是org.hibernate.Session接口.要想对数据库操作我们就要理清楚对象在整个操作中的所属的状态(Transient,Persistent,Detached).就像马士兵老师在视频中所说的,我们并不必死抠这些字眼,我们通过自己编写测试类就可以他们之间不同的区别. 其实三种状态各自的不必总结那么多,只是一个重要的地方就是Transient状态里面的对象是没有id的. session中常用的方法是save(),updat

  • 简介Java的Hibernate框架中的Session和持久化类

    Session Session对象用于获取与数据库的物理连接. Session对象是重量轻,设计了一个互动是需要与数据库每次被实例化.持久化对象被保存,并通过一个Session对象中检索. 会话中的对象不应该保持开放很长一段时间,因为他们通常不被线程安全的,他们应该被创建并根据需要摧毁他们.这次会议的主要功能是提供创建,读取和删除操作映射的实体类的实例.实例中可能存在以下三种状态之一在给定时间点: 短暂性: 持久化类的未与会话相关联,并在数据库中没有代表性,没有标识值的新实例被Hibernate

  • 快速了解Hibernate中的Session

    Hibernate中的Session是一级缓存,可以理解为进程级(是线程吧)的缓存,在进程(是线程吧)运行期间一直存在. session可以理解为一个可以操作数据库的对象,该对象中有操作数据库的方法. 在Java里面,缓存通常是指Java对象的属性占用的内存空间,通常是一些集合类型的属性.在Session接口的实现类SessionImpl中定义了一系列的Java集合,这些Java集合就构成了Session的缓存. 总的来说(我对Session的理解):Session是Hibernate和DB的中

  • Hibernate中Session增删改查操作代码详解

    把三状态转换图放在这,方便分析方法的作用: 1.Session的save()方法 Session是Hibernate所有接口中最重要的接口,提供了对数据保存,更新,查询和删除的方法. Session的save()方法可以使临时态或游离态转换为持久态.例如,保存一个Customer对象: SessionFactory sessionFactory; Configuration configuration = new Configuration().configure(); sessionFacto

  • hibernate通过session实现增删改查操作实例解析

    今天学习了一下如何通过hibernate来实现对数据库的增删改查,下面来简单介绍一下: 首先创建个Student类: package com.hibernate.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.T

  • java使用DOM对XML文档进行增删改查操作实例代码

    本文研究的主要是java使用DOM对XML文档进行增删改查操作的相关代码,具体实例如下所示. 源代码: package com.zc.homeWork18; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.tr

  • java连接mongoDB并进行增删改查操作实例详解

    本文实例讲述了java连接mongoDB并进行增删改查操作.分享给大家供大家参考,具体如下: 1.安装 MongoDB JDBC驱动程序 在java中使用mongoDB之前,首先需要拥有java连接mongoDB的第三方驱动包(jar包) 1)maven项目可通过在pom.xml中添加依赖 <dependencies> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-ja

  • python实现的MySQL增删改查操作实例小结

    本文实例总结了python实现的MySQL增删改查操作.分享给大家供大家参考,具体如下: 代码片段一 连接并执行sql #encoding:UTF-8 import MySQLdb conn = MySQLdb.Connect( host = '127.0.0.1', port = 3306, user = 'root', passwd='123456', db='imooc', charset='utf8' ) cursor = conn.cursor() print conn print c

  • java 数据库连接与增删改查操作实例详解

    本文实例讲述了java 数据库连接与增删改查操作.分享给大家供大家参考,具体如下: 1.设置数据库的基本配置信息 package mysql; //数据库配置资源连接 public final class DbConfig { //数据库资源 指定所使用的数据库类型 地址 端口 数据库名称 编码格式 public final static String dbUrl = "jdbc:mysql://localhost:3306/database_name?useUnicode=true&c

  • hibernate增删改查操作代码

    Hibernate对数据删除操作 删除User表中个一条数据,是需要更具User表的主键id值来删除的.首先根据id值向数据库中查询出来对应的对象.可以采用两种方式一是session的get方法,一个是session的load方法. Session的Get方法:调用这个方法会返回一个Object对象.然后我们对其强制转换.Useruser = (User)session.get(User.class," 402881e5441c035e01441c0360510003"); 当我们传递

  • Springboot+hibernate实现简单的增删改查示例

    1.创建好项目之后在配置端口号(也可以不用配置,默认端口8080) #server server.port=8080 server.tomcat.uri-encoding=utf-8 2.配置mysql #MySQL spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8 sprin

  • mybatis3使用@Select等注解实现增删改查操作

    1.需要的jar包 2.目录树 3.具体代码 一.需要的jar包 第一个:mybatis的jar包 第二个:mysql数据的驱动 二.目录树 三.具体代码 使用框架,配置文件先行! conf.xml:(配置 登录数据库,映射文件) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN

  • 使用IDEA对Oracle数据库进行简单增删改查操作

    1.1 Java中的数据存储技术 在Java中,数据库存取技术可分为如下几类: 1.JDBC直接访问数据库 2.JDO(Java Data Object)是Java对象持久化的新的规范,也是一个用于存取某种数据仓库中的对象的标准化API. 3.第三方O/R 比如Hibernate,Mybatis等 JDBC是java访问数据库的基石,JDO.Hibernate.MyBatis,JDO,Hibernate.MyBatyis等只是更好的封装的JDBC. 最近用idea连接Oracle数据库 并且实现

随机推荐