采用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. echarts之toolbox-orient

    toolbox是echarts中的工具箱 当orient为'vertical' toolbox: { show : true, orient:'vertical' } 当orient为'horizon ...

  2. TProfiler

    下载:访问 TProfiler 的 GitHub 主页,https://github.com/alibaba/TProfiler,点击 Clone or download 按钮的打开下载选项,点击该选 ...

  3. The innocence is brilliant.

    [11.20~12.20] 2016年的最后一个月在听Avril的歌,感觉她发音状态好好(对此建议去听<Wish You Were Here>!!!) 到此12月份的活都干完了吧~还剩最后 ...

  4. 在HTML中使用JavaScript元素

    script属性<script async = async charset="utf-8" defer="defer" src="index.h ...

  5. python基础06 循环

      循环用于重复执行一些程序. for循环  for循环需要预先设定循环的次数n,然后执行隶属于for的语句. 基本构造是 for 元素 in 序列: statement 如: for a in [1 ...

  6. The method setPositiveButton(int, DialogInterface.OnClickListener) in the type AlertDialog.Builder is not applicable for the arguments

    The method setPositiveButton(int, DialogInterface.OnClickListener) in the type AlertDialog.Builder i ...

  7. Python Turtle

    之前对这个turtle这个模块不了解,觉得没什么意思,最近试了一下发现不错,来点最简单的.写的时候深刻感受到自己智商是个硬伤,算角度都算了半天... 图就不导了吧,懒癌晚期... import tur ...

  8. 移动端Web页面问题(转载)

    1.安卓浏览器看背景图片,有些设备会模糊.   用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢? 经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率 ...

  9. 用SQL语句将数据表中的数据保存为JSON格式

    没有找到好的工具,只想到了拼字符串的方式,用   NVARCHAR(MAX)  可能有截断,不推荐使用,方法中使用了 FOR XML PATH('') 实现,有关其使用方法参考这里 表结构: SQL ...

  10. HOJ 1797 Red and Black

    传送门  http://acm.hit.edu.cn/hoj/problem/view?id=1797 总体的思路是遍历可以到达的' . ',将其对应的vis数组化为1,然后统计所有为1的vis项; ...