采用JUnit测试,继承TestCase

import java.util.Date;

import junit.framework.TestCase;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class Client extends TestCase{ Configuration config = new Configuration().configure();
SessionFactory factory = config.buildSessionFactory();
Session session = factory.openSession();

一.添加数据

public void testAdd1(){
//user对象进入transient状态
User user = new User();
user.setName("用户1");
user.setCreateTime(new Date());
user.setExpireTime(new Date());
try{
//开启事务
session.beginTransaction();
//session管理user对象,进入Persistent状态
session.save(user);
//提交事务,把内存的改变提交到数据库保存
session.getTransaction().commit();
} catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
} finally {
if(session != null && session.isOpen()){
//session.关闭,user对象进入detached状态
session.close();
}
}
}

二.查询数据
使用get查询,没有延迟加载,把需要的一次性都查询出来
使用load查询,有延迟加载,只把需要显示的查询出来,如果还需要查询其他的数据,再次进行查询(在一定程度上提高性能)
查询一条数据

public void testGetOrLoad(){
// User user = (User)session.get(User.class, "2c90e481596c44da01596c44dba30001");
User user = (User)session.load(User.class, "2c90e481596c44da01596c44dba30001");
System.out.println(user.getName());
}

查询表中的所有数据

public void testQuery(){
try{
Query query = session.createQuery("from User");
//建议使用这种方式读取数据,一次都查询出来
List<User> userList = query.list();
for(Iterator<User> iter = (Iterator) userList.iterator(); iter.hasNext(); ){
User user = iter.next();
System.out.println(user.getName());
}
//使用迭代器的方式,每个对象都要查询一次,大量查询时会增加数据库的负担和延迟
// Iterator<User> iter = query.iterate();
// while(iter.hasNext()){
// User user = iter.next();
// System.out.println(user.getName());
// }
} catch(Exception e){
e.printStackTrace();
} finally{ }
}

三.修改数据

public void testUpdate(){
//需要先把数据从数据库中查询出来到对象中,修改对象,再update对象
User user = (User)session.load(User.class, "2c90e481596c44da01596c44dba30001");
user.setName("修改用户");
try{
session.beginTransaction();
session.update(user);
session.getTransaction().commit();
} catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
} finally {
if(session != null && session.isOpen()){
session.close();
}
}
}

四:删除数据

public void testDelete(){
//需要先把数据从数据库中查询出来到对象中,再delete对象
User user = (User)session.load(User.class, "2c90e481596c44da01596c44dba30001");
try{
session.beginTransaction();
session.delete(user);
session.getTransaction().commit();
} catch(Exception e){
e.printStackTrace();
session.getTransaction().rollback();
} finally {
if(session != null && session.isOpen()){
session.close();
}
}
}

hibernate学习笔记之四 Hibernate的增删改查的更多相关文章

  1. Mysql学习笔记(六)增删改查

    PS:数据库最基本的操作就是增删改查了... 学习内容: 数据库的增删改查 1.增...其实就是向数据库中插入数据.. 插入语句 insert into table_name values(" ...

  2. mysql学习笔记一 —— 数据的增删改查

    1.连接mysql mysql 直接回车(是以root身份,密码空,登陆的是本机localhost) [root@www mysql]# mysql -uroot -p123 -S /var/lib/ ...

  3. Mybatis学习笔记之---CRUD(增删改查)

    Mybatis的CRUD(增删改查) 1.pom.xml <dependencies> <dependency> <groupId>junit</groupI ...

  4. Hibernate5笔记2--单表的增删改查操作

    单表的增删改查操作: (1)定义获取Session和SessionFactory的工具类: package com.tongji.utils; import org.hibernate.Session ...

  5. MVC3+EF4.1学习系列(二)-------基础的增删改查和持久对象的生命周期变化

    上篇文章中 我们已经创建了EF4.1基于code first的例子  有了数据库 并初始化了一些数据  今天这里写基础的增删改查和持久对象的生命周期变化 学习下原文先把运行好的原图贴来上~~ 一.创建 ...

  6. MongoDB学习总结(二) —— 基本操作命令(增删改查)

    上一篇介绍了MongoDB在Windows平台下的安装,这一篇介绍一下MongoDB的一些基本操作命令. 下面我们直奔主题,用简单的实例依次介绍一下. > 查看所有数据库 (show dbs) ...

  7. Django基础学习四_数据库的增删改查

    今天主要学习两个东西 1.如何对数据库做增删改查 2.如果将数据库中的数据用html的方式返回到前台 一.对数据库中增删改查操作 1.首先需要先见表,见表的方法我们在“http://www.cnblo ...

  8. mongodb数据库学习【安装及简单增删改查】

    //@desn:mongodb数据库学习 //@desn:码字不宜,转载请注明出处 //@author:张慧源  <turing_zhy@163.com> //@date:2018/08/ ...

  9. Python学习---django之ORM的增删改查180125

    模型常用的字段类型参数 <1> CharField        #字符串字段, 用于较短的字符串.        #CharField 要求必须有一个参数 maxlength, 用于从数 ...

随机推荐

  1. Service and controller in angularJs

    Separation of concern is at the heart while designing an AngularJS application. Your controller must ...

  2. CentOS安装JDK和安装Glassfish

    1.首先下载对应CentOS版本的jdk:下载:jdk-7u75-linux-x64.tar.gz 2.下载该jdk到本地,并上传到CentOS系统的opt临时目录下 3.在安装自己下载的jdk之前, ...

  3. Delphi之静态方法,虚方法virtual,动态dynamic,抽象abstract,消息

    Delphi之静态方法,虚方法virtual,动态dynamic,抽象abstract,消息 http://www.cnblogs.com/zhwx/archive/2012/08/28/266055 ...

  4. IE浏览器下一些图片无法显示的(在其他非ie浏览器能够显示)解决办法

    因为要完成本学期老师布置得网页作业,做完的时候进行网页的兼容性测试,chrome和360都没有问题. ie下却有两个图片无法显示. 一般这种情况代码是没有什么问题的,一般是图片本身的问题, 当我用Ps ...

  5. 【转】《从入门到精通云服务器》第七讲—负载均衡和CDN技术

    在IDC知识中,我们常常会遇上负载均衡与CDN的概念而不知所云.第一讲[什么是云计算], 我们提到过负载均衡,仅给大家留下了印象.这次我们将深入浅出的讲讲到底什么是负载均衡与CDN技术.---互联网数 ...

  6. Windows安装mysql-5.7.17-winx64.zip方式

    1.去官网上下载.zip格式的文件. 2.解压到一个文件夹,这里我用D:\MySql表示 3.在D:\MySql\mysql-5.7.17-winx64下新建my.ini配置文件 黄色背景色的地方需要 ...

  7. 配置python环境变量(转)

    默认情况下,在windows下安装python之后,系统并不会自动添加相应的环境变量.此时不能在命令行直接使用python命令. 1.首先需要在系统中注册python环境变量:假设python的安装路 ...

  8. heml设置浏览器版本

    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> action类获取se ...

  9. win2003+sql2005配置

    1.安装win2003+sp1 2.安装IIS: a.启用Asp支持(2003 默认安装不安装IIS 6 ,需另外安装.安装完IIS 6,需单独开启ASP支持) 控制面板 -> 管理工具 -&g ...

  10. python 中使用 global 引发了莫名其妙的问题

    哪里出问题了 python 中,使用 global 会将全局变量设为本函数可用.同时,在函数内部访问变量会先本地再全局. 在嵌套函数中,使用 global 会产生不合常理的行为. 上代码: In [9 ...