hibernate学习笔记之四 Hibernate的增删改查
采用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的增删改查的更多相关文章
- Mysql学习笔记(六)增删改查
PS:数据库最基本的操作就是增删改查了... 学习内容: 数据库的增删改查 1.增...其实就是向数据库中插入数据.. 插入语句 insert into table_name values(" ...
- mysql学习笔记一 —— 数据的增删改查
1.连接mysql mysql 直接回车(是以root身份,密码空,登陆的是本机localhost) [root@www mysql]# mysql -uroot -p123 -S /var/lib/ ...
- Mybatis学习笔记之---CRUD(增删改查)
Mybatis的CRUD(增删改查) 1.pom.xml <dependencies> <dependency> <groupId>junit</groupI ...
- Hibernate5笔记2--单表的增删改查操作
单表的增删改查操作: (1)定义获取Session和SessionFactory的工具类: package com.tongji.utils; import org.hibernate.Session ...
- MVC3+EF4.1学习系列(二)-------基础的增删改查和持久对象的生命周期变化
上篇文章中 我们已经创建了EF4.1基于code first的例子 有了数据库 并初始化了一些数据 今天这里写基础的增删改查和持久对象的生命周期变化 学习下原文先把运行好的原图贴来上~~ 一.创建 ...
- MongoDB学习总结(二) —— 基本操作命令(增删改查)
上一篇介绍了MongoDB在Windows平台下的安装,这一篇介绍一下MongoDB的一些基本操作命令. 下面我们直奔主题,用简单的实例依次介绍一下. > 查看所有数据库 (show dbs) ...
- Django基础学习四_数据库的增删改查
今天主要学习两个东西 1.如何对数据库做增删改查 2.如果将数据库中的数据用html的方式返回到前台 一.对数据库中增删改查操作 1.首先需要先见表,见表的方法我们在“http://www.cnblo ...
- mongodb数据库学习【安装及简单增删改查】
//@desn:mongodb数据库学习 //@desn:码字不宜,转载请注明出处 //@author:张慧源 <turing_zhy@163.com> //@date:2018/08/ ...
- Python学习---django之ORM的增删改查180125
模型常用的字段类型参数 <1> CharField #字符串字段, 用于较短的字符串. #CharField 要求必须有一个参数 maxlength, 用于从数 ...
随机推荐
- 调用0A中断输入字符串数据段的DUP定义
;这是自动生成的代码模板 STACKS SEGMENT STACK ;堆栈段 DW DUP(?) ;注意这里只有128个字节 STACKS ENDS DATAS SEGMENT ;数据段 STRING ...
- .NET静态变量与静态方法并发的问题
我们知道,静态变量与静态方法都是在程序编译的时候就定义好了的,并且不会存在多个副本.所以对于静态变量来说,一旦修改了就会影响全局. 因此,静态变量是存在并发性问题的,所以当我们在操作静态变量的时候需要 ...
- Linux SHELL 命令入门题目(一)
新年新气象,注重知识积累,提高手敲代码能力,而不是眼高手低,只会复制黏贴. 1.使用shell 打印 “Hello World!” 2.求变量'hello world'的字符长度 3.$0 .$SHE ...
- 转载:安装ie driver和chrome driver
很多同学在使用webdriver的时候总是忘了安装ie driver和chrome driver, 因此在这里简单介绍一下这2个driver的安装方式. IE driver 在新版本的webdrive ...
- JavaScript之基础篇
标识符 命名要求 以字母.下划线或者$开头: 由字母.下划线.$和数字组成. 关键字和保留字 关键字.保留字不可以作为标识符. 大小写敏感 区分大小写. 基本数据类型 Number 整数 浮点数 特殊 ...
- 采用Lambda表达式快速实现实体模型对象转换到DTO
在项目中,采用code first时建立的模型对象不能直接用于数据传输,需要从新根据需求建立Dto对象 为什么需要建立Dto对象呢? DTO即数据传输对象.之前不明白有些框架中为什么要专门定义DTO来 ...
- Linux基础命令-有关于目录的命令
1. 查看帮助: [root@oracle ~]# man cd //查看 cd 指令的帮助文档 2. 显示当前工作目录: [root@oracle ~]# pwd/root 3. 列出当前目录下的内 ...
- java 的各种实用类库(jar包)
总列表:# dom4j # org.json # pinyin4j # sqlite-jdbc # JavaMail # JLayer # dom4j 介绍:处理 xml 的类库.采用了 Java 集 ...
- BCD码和十六进制,十进制转换
参考文档: http://wenku.baidu.com/link?url=CfK2Wl7sCEmpzEabnbHSbcwf2t4yoSH6_n8sUIRw54piWaRB7hZ6RkaStWEkbC ...
- MySQL字符集
字符集的选择 1.如果数据库只需要支持中文,数据量很大,性能要求也很高,应该选择双字节定长编码的中文字符集(如GBK).因为相对于UTF-8而言,GBK"较小",每个汉字只占2个字 ...