Hibernate 笔记4 实现对数据库的增删改查
1 准备
首先在mysql数据库中建表User,并添加相关信息。
user表结构如下。
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | YES | | NULL | |
| pwd | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
建立User类,添加set,get 方法。
使用hibernate对数据进行增删改差的步骤:
- 获得连接
- 开启事务
- 增删改查操作
- 提交事务
- 关闭连接
2 对数据进行添加(insert)
插入操作使用 session.save(类对象)如上述代码14行所示。
可以使用session.saveorupdate(类对象),由hibernate判断是添加还是更新。
saveorupdate与sava的区别,以及saveorupdate的好处?
save是返回插入数据的主见的,而saveOrUpdate是void
save方法更适用与确定了是要插入,而且需要得到插入数据的主键而saveOrUpdate更倾向于不确定是插入还是更新,而且你不需要得到他的主键
另一方面,如果你无法确定你要插入或更新的对象是不是持久态或游离态时。如果你save一个持久态或更新一个游离态,这都是有问题的,
此时你就要用到 saveOrUpdat
总体来说,如果你能确定你即将操作对象的状态,则不需要用saveOrUpdate
1 public void TestInsert() throws Exception{ 2 User user= new User(); //初始化User 3 user.setId(1); //设置属性的数据 4 user.setName("蓝冰竹斋"); 5 user.setPwd("123"); 6 7 Configuration config=new Configuration().configure(); // 加载总配置文件 8 SessionFactory sessionFactory= config.buildSessionFactory(); // 建立工厂 9 Session session=null; //定义Session10 Transaction tx=null; // 定义事务11 try{12 session=sessionFactory.openSession(); // 通过工厂建立连接13 tx=session.beginTransaction(); // 通过连接开启事务14 session.save(user); // 通过连接保存user15 tx.commit(); // 提交16 17 }catch(Exception e){18 tx.rollback(); // 出现异常回滚19 20 }finally{21 if(session!=null){22 session.close(); // 关闭连接23 }24 if(sessionFactory!=null){25 sessionFactory.close(); // 关闭连接工厂26 }27 }28 }
测试后打印出的语句:Hibernate: insert into user (name, pwd) values (?, ?)
3 对数据进行修改(update)
修改操作使用session.save(类对象),根据表id知道要修改的对象。 如果id不存在,出现异常org.hibernate.StaleStateException
如果某列不需要更新,需要在映射文件的相应<property>中加入 update="false",如不更新name,
<propertyname="pwd" column="pwd" update="false"></property>
更新时需要将表中所有字段数据进行设置,不设置的字段,其值默认为null.
可以使用session.saveorupdate(类对象),由hibernate判断是添加还是更新。
public void TestUpdate() throws Exception{ User user= new User(); user.setId(1); user.setName("蓝冰"); //对name进行了修改 user.setPwd("1321121"); //对pwd进行了修改 Configuration config=new Configuration().configure(); SessionFactory sessionFactory= config.buildSessionFactory(); Session session=null; Transaction tx=null;try{ session=sessionFactory.openSession(); tx=session.beginTransaction(); session.update(user); //修改数据 tx.commit(); }catch(Exception e){ tx.rollback(); }finally{if(session!=null){ session.close(); }if(sessionFactory!=null){ sessionFactory.close(); } } }
Hibernate: update user set name=?, pwd=? where id=?
4 删除数据(deleted)
修改操作使用session.delete(类对象)
注意,只能通过id来删除数据,不能通过title或content来删除,会报缺少标示符错误。
public void TestDelete() throws Exception{ User user= new User(); user.setId(1); user.setName("蓝冰竹斋1"); //根据ID删除,设置其他属性不起作用 user.setPwd("1321121"); Configuration config=new Configuration().configure(); SessionFactory sessionFactory= config.buildSessionFactory(); Session session=null; Transaction tx=null; try{ session=sessionFactory.openSession(); tx=session.beginTransaction(); session.delete(user); //删除数据 tx.commit(); }catch(Exception e){ tx.rollback(); }finally{ if(session!=null){ session.close(); } if(sessionFactory!=null){ sessionFactory.close(); } } }
Hibernate: delete from user where id=?
5 查询数据(select)
通过ID进行查询。
查询有两种方式,1 session.get(类.class,id);
2 session.load(类.class,id);
类名.class 返回这个类的Class类型对象
load 支持懒加载,既使用对象时才执行。调用getID() 和 getclass()两个方法不执行。
两者的区别会在后面详细说明。
public void TestSelect() throws Exception{ User user1=null; // 用户1,使用get方法查询 User user2=null; // 用户2,使用load方法查询 Configuration config=new Configuration().configure(); SessionFactory sessionFactory= config.buildSessionFactory(); Session session=null; Transaction tx=null;try{ session=sessionFactory.openSession(); tx=session.beginTransaction(); user1=(User) session.get(User.class, 3); //用户1 get查询 get方法中第一个字段是查询的类.class,第二个参数是id
user2=(User) session.load(User.class, 3); //用户2 load查询 参数同上 System.out.println(user1.getName()+"user1用户"); System.out.println(user2.getPwd()+"user2用户"); tx.commit(); }catch(Exception e){ tx.rollback(); }finally{if(session!=null){ session.close(); }if(sessionFactory!=null){ sessionFactory.close(); } } }
Hibernate: select user0_.id as id0_0_, user0_.name as name0_0_, user0_.pwd as pwd0_0_ from user user0_ where user0_.id=?
转载于:https://www.cnblogs.com/zilong882008/archive/2011/11/03/2234859.html
Hibernate 笔记4 实现对数据库的增删改查相关推荐
- MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Mybatis学习笔记(二) 之实现数据库的增删改查
开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...
- java jdbc 连接mysql数据库 实现增删改查
好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...
- php修改数据库字段内容,php对数据库的增删改查操作
在我看来数据库是个既复杂又高深莫测的东西,但百分之八十左右的程序员都不需要去精通他,对于我们前端开发来说,只要会数据库的增删改查语句就差不多了.首先我们来说说sql的增删改查语句. 一.增删改查 插入 ...
- shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)
shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)Shell脚本与MySQL数据库交互(增删改查)# 环境准备:安装mariadb 数据库 [root ...
- 通过Loadruner对mysql数据库进行增删改查
通过Loadruner对mysql数据库进行增删改查 操作mysql数据库,是在实现mysql数据源配置的基础上操作,可先阅读:loadrunner参数化使用mysql数据源失败解决方法 写之前先理一 ...
- Springboot使用JPA框架对数据库实现增删改查(附详细代码)
前言 1.本文将详细阐述如何使用JPA框架对数据库实现增删改查操作,业务中比较常见的应用场景几乎在这里都能看到,并且有详尽的代码可供直观演示,其中遇到的坑也进行了实时标注. 2.JPA的环境配置在前面 ...
- Django实现对数据库数据增删改查(二)
目录 1.基本框架 1.1.路由分发 1.2.视图函数-逻辑处理 1.3.模板 2.查询功能 2.1.视图函数 2.2.模板函数 3.添加功能 3.1.路由分发 3.2视图函数 3.3.模板 4.编辑 ...
- 利用koa实现mongodb数据库的增删改查
概述 使用koa免不了要操纵数据库,现阶段流行的数据库是mongoDB,所以我研究了一下koa里面mongoDB数据库的增删改查,记录下来,供以后开发时参考,相信对其他人也有用. 源代码请看:我的gi ...
最新文章
- esxi 6.7 7.0 区别_摩托车国产车和合资车有什么区别?
- git上传提交遇到问题
- 【Scratch】青少年蓝桥杯_每日一题_8.09_列表
- mysql时间排序_mysql – 按日期和时间降序排序?
- 前端学习(3146):react-hello-react之getBeforeUpdate
- 【C语言】文件程序设计实践
- java-io流理解
- 并发编程之多线程操作
- 设计一款编程语言有多难?Ruby 创始人揭秘
- DotNetBar.Bar图标列表的使用
- XCode - 无法对iPhone真机调试的解决方法!
- ASP.NET留言板 文字加表情
- Rust : codewars的Product of consecutive Fib numbers
- 卡在一直同步_Apple Music,可能是最好的本地音乐云同步平台
- 2017.11.21 课程随记
- 相关性分析及SPSS软件操作
- iTextSharp 使用详解(转) 感谢原著作者
- cadence allegro 16.6的下载与安装-破译版
- win7系统搜索共享的计算机名,win7系统共享打印机搜索ip需用户名和密码怎么回事...
- 如何来做用户意图识别
热门文章
- [转]JQuery.Ajax之错误调试帮助信息
- .net httpwebrequest 并发慢_go语言并发之MPG模型
- php详解递归,PHP递归算法详解
- 宝塔 没有找到站点_宝塔面板正确开启TLS 1.3并删除TLS 1.1
- Wine下完美安装QQ 2010:
- python interactive window_如果PySide应用程序是从IPython interactive cons运行的,上下文菜单就会消失...
- 【TypeScript系列教程01】入门介绍
- 值得一谈的鸿蒙2.0,程序员们拿起你们手中的编译器撸一下hello world
- linux下php可以实现哪些功能,基于Linux的远程管理系统的设计与实现(PHP)
- 会计用计算机很快是,40个超实用电脑快捷键,老会计都在用