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对数据进行增删改差的步骤:

  1. 获得连接
  2. 开启事务
  3. 增删改查操作
  4. 提交事务
  5. 关闭连接

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 实现对数据库的增删改查相关推荐

  1. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  2. Mybatis学习笔记(二) 之实现数据库的增删改查

    开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...

  3. java jdbc 连接mysql数据库 实现增删改查

    好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...

  4. php修改数据库字段内容,php对数据库的增删改查操作

    在我看来数据库是个既复杂又高深莫测的东西,但百分之八十左右的程序员都不需要去精通他,对于我们前端开发来说,只要会数据库的增删改查语句就差不多了.首先我们来说说sql的增删改查语句. 一.增删改查 插入 ...

  5. shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)

    shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)Shell脚本与MySQL数据库交互(增删改查)# 环境准备:安装mariadb 数据库 [root ...

  6. 通过Loadruner对mysql数据库进行增删改查

    通过Loadruner对mysql数据库进行增删改查 操作mysql数据库,是在实现mysql数据源配置的基础上操作,可先阅读:loadrunner参数化使用mysql数据源失败解决方法 写之前先理一 ...

  7. Springboot使用JPA框架对数据库实现增删改查(附详细代码)

    前言 1.本文将详细阐述如何使用JPA框架对数据库实现增删改查操作,业务中比较常见的应用场景几乎在这里都能看到,并且有详尽的代码可供直观演示,其中遇到的坑也进行了实时标注. 2.JPA的环境配置在前面 ...

  8. Django实现对数据库数据增删改查(二)

    目录 1.基本框架 1.1.路由分发 1.2.视图函数-逻辑处理 1.3.模板 2.查询功能 2.1.视图函数 2.2.模板函数 3.添加功能 3.1.路由分发 3.2视图函数 3.3.模板 4.编辑 ...

  9. 利用koa实现mongodb数据库的增删改查

    概述 使用koa免不了要操纵数据库,现阶段流行的数据库是mongoDB,所以我研究了一下koa里面mongoDB数据库的增删改查,记录下来,供以后开发时参考,相信对其他人也有用. 源代码请看:我的gi ...

最新文章

  1. esxi 6.7 7.0 区别_摩托车国产车和合资车有什么区别?
  2. git上传提交遇到问题
  3. 【Scratch】青少年蓝桥杯_每日一题_8.09_列表
  4. mysql时间排序_mysql – 按日期和时间降序排序?
  5. 前端学习(3146):react-hello-react之getBeforeUpdate
  6. 【C语言】文件程序设计实践
  7. java-io流理解
  8. 并发编程之多线程操作
  9. 设计一款编程语言有多难?Ruby 创始人揭秘
  10. DotNetBar.Bar图标列表的使用
  11. XCode - 无法对iPhone真机调试的解决方法!
  12. ASP.NET留言板 文字加表情
  13. Rust : codewars的Product of consecutive Fib numbers
  14. 卡在一直同步_Apple Music,可能是最好的本地音乐云同步平台
  15. 2017.11.21 课程随记
  16. 相关性分析及SPSS软件操作
  17. iTextSharp 使用详解(转) 感谢原著作者
  18. cadence allegro 16.6的下载与安装-破译版
  19. win7系统搜索共享的计算机名,win7系统共享打印机搜索ip需用户名和密码怎么回事...
  20. 如何来做用户意图识别

热门文章

  1. [转]JQuery.Ajax之错误调试帮助信息
  2. .net httpwebrequest 并发慢_go语言并发之MPG模型
  3. php详解递归,PHP递归算法详解
  4. 宝塔 没有找到站点_宝塔面板正确开启TLS 1.3并删除TLS 1.1
  5. Wine下完美安装QQ 2010:
  6. python interactive window_如果PySide应用程序是从IPython interactive cons运行的,上下文菜单就会消失...
  7. 【TypeScript系列教程01】入门介绍
  8. 值得一谈的鸿蒙2.0,程序员们拿起你们手中的编译器撸一下hello world
  9. linux下php可以实现哪些功能,基于Linux的远程管理系统的设计与实现(PHP)
  10. 会计用计算机很快是,40个超实用电脑快捷键,老会计都在用