hibernate——简单的增删改查

hql增删改查 自己总结的代码,里面包括了几种最常用的方法 立即下载

增删改比较简单,查稍微复杂一点。查询有两种方式,一种是通过hql语句和Query接口来实现,一种是条件查询,通过Ctiteria接口来实现,下面举例说明:

UserDao接口:

package com.suo.hibernate.dao;

import java.util.List;

import com.suo.domain.User;

public interface UserDao {
	public void saveUser(User user);
	public User findUserById(int id);
	public List<User> findUserByName(String name);
	public void removeUser(User user);
	public void updateUser(User user);
}
获得session的工具类:

package com.suo.hibernate.util;

import java.io.Serializable;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.suo.domain.User;

public final class HibernateUtil {
	
	private static SessionFactory sessionFactory;
	
	/**
	 * 私有的构造方法,这样就可以防止实例化这个类
	 */
	private HibernateUtil(){}
	
	/**
	 * 因为读取配置文件和映射文件很耗时间,所以这段代码块定义成静态的,那么只加载一次就可以了
	 */
	static{
		Configuration config=new Configuration();
		config.configure();//读取配置文件,默认的是读取hibernate.cfg.xml,若文件名不是这个,也可以以参数形式指定
		sessionFactory=config.buildSessionFactory();
	}

	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}
	
	public static Session getSession(){
		return sessionFactory.openSession();
	}
}
对接口的实现类:UserDaoImpl

package com.suo.hibernate.impl;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.suo.domain.User;
import com.suo.hibernate.dao.UserDao;
import com.suo.hibernate.util.HibernateUtil;

public final class UserDaoImpl implements UserDao {

	public void saveUser(User user) {
		Session session=null;
		Transaction transaction=null;
		try{
			session=HibernateUtil.getSession();//获得一个连接
			transaction=session.beginTransaction();//开启一个事务
			session.save(user);
			transaction.commit();
		}catch(HibernateException e){
			if(transaction!=null){
				transaction.rollback();
			}
			e.printStackTrace();
		}finally{
			if(session!=null){
				session.close();
			}
		}
	}

	/**
	 * 通过session的get方法进行查询操作
	 * @param id 通过主键来查询
	 * @return 若存在则返回查询到对象,否则返回空
	 */
	public User findUserById(int id) {
		Session session=null;
		try{
			session=HibernateUtil.getSession();
			
			User user=(User)session.get(User.class, id);
			
			return user;
			
		}catch(HibernateException e){
			e.printStackTrace();
			return null;
		}finally{
			if(session!=null){
				session.close();
			}
		}
	}

	/**
	 * 通过hql语句进行查询操作
	 * @param name 通过name键来进行查询
	 */
	public List<User> findUserByName(String name) {
		Session session=null;
		try{
			session=HibernateUtil.getSession();
			
			String hql="from User as user where user.name=?";
			Query query=session.createQuery(hql);
			query.setString(0, name);
			List<User> list=query.list();
			
			return list;
		}catch(HibernateException e){
			e.printStackTrace();
			return null;
		}finally{
			if(session!=null){
				session.close();
			}
		}
	}

	/**
	 * 删除某个对象
	 */
	public void removeUser(User user) {
		Session session=null;
		Transaction transaction=null;
		try{
			session=HibernateUtil.getSession();//获得一个连接
			transaction=session.beginTransaction();//开启一个事务
			session.delete(user);//这里不太明白,这里的user处于脱管状态,到底是怎么删除的呢?
			transaction.commit();
		}catch(HibernateException e){
			if(transaction!=null){
				transaction.rollback();
			}
			e.printStackTrace();
		}finally{
			if(session!=null){
				session.close();
			}
		}
	}
	/**
	 * 更新某个对象
	 */
	public void updateUser(User user) {
		Session session=null;
		Transaction transaction=null;
		try{
			session=HibernateUtil.getSession();//获得一个连接
			transaction=session.beginTransaction();//开启一个事务
			session.update(user);
			transaction.commit();
		}catch(HibernateException e){
			if(transaction!=null){
				transaction.rollback();
			}
			e.printStackTrace();
		}finally{
			if(session!=null){
				session.close();
			}
		}
	}
	
}

需要注意的是用session中的delete删除一个对象和用update更新一个对象,都是通过id来查找该对象的,通过它执行的sql语句可以知道,所以,在删除一个对象时,首先要new一个user,然后指明id,才会正确的删除和更新,此外,更新操作的sql语句是更新所有的除id之外的属性,所以,对于更新,除了要指明id之外,还要设置各个属性值,否则会全部置为默认值。


hibernate增删改查和动态sql 这里是hibernate增删查改和采用freemarker实现动态sql,hql 立即下载

相关推荐

hql的增删改查

总结的hql的语句的常用的增删改查,自己留着看的

HQL增删改查

一  增加 getSession().save(entity) 二  删除 1 String hql = " DELETE FROM Student dm WHERE  dm.id = ? "; this.delete(hql,stu.getId()); 2 Transaction trans=session.beginTransaction();    String

aliushui的专栏 1379

hibernate增删改查

hibernate的增删改查代码。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

Hibernate增删查改操作【HQL】

前提:所有sql语句中的表名统统在hql中换成实体类名! 一、HQL //1.查询所有(格式与sql差别): from Student //2.部分查询: select name,age from Student //3.条件查询(别名): from Student a where a.city = '上海' select a.name,a.age from Studen...

@木南山牙的博客 645

Hibernate中Session增删改查操作代码详解

主要介绍了Hibernate中Session增删改查操作代码详解,具有一定借鉴价值,需要的朋友可以参考下。

在 Ansys Mechanical 中使用“螺栓工具”插件自动生成螺栓

在有限元分析 (FEA) 中,高效创建螺栓连接对于确保机械装配的结构完整性和性能至关重要。螺栓是连接组件不可或缺的一部分,它们在负载下的精确建模会影响整个系统。快速高效的螺栓建模使工程师能够快速优化设计,满足紧迫的期限,并通过为其他关键设计任务释放资源来提高整体生产力。此外,螺栓建模的精度可以最大限度地降低模型创建过程中出错的风险,这对于获得可靠和准确的分析结果至关重要。因此,在 FEA 中快速且无错误地创建螺栓连接对于高效、可靠和成功的工程结果至关重要。

jkh920184196的博客 3102

hibernate的基本增删改查

hibernate的基本的增删改查 将之前的相同部分代码分装成一个类 HibernateUtil.java package util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { //声明一个私有的静态final类型的Configuration对象 private s

林深不见鹿 2829

数据库系统概论课后习题答案(第五版 王珊、萨师煊)

第1章 绪论 1 .试述数据、数据库、数据库系统、数据库管理系统的概念。 答: ( l )数据( Data ) :描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和处理的对象十分广泛,表

早知晓的博客 11万+

hql语句基础的增删改查

hql语句基础的增删改查

银色木马的博客 813

ESP32-CAM+STM32实战:5步搞定无线图像传输到TFT屏(附完整代码)

本文详细介绍了如何利用ESP32-CAM和STM32实现无线图像传输到TFT屏幕的完整方案。通过5个关键步骤,包括硬件连接、ESP32-CAM配置、STM32数据接收、TFT屏幕驱动及系统优化,开发者可以快速构建高效的图像传输系统。特别介绍了RGB565格式的处理技巧,并提供了完整的代码实现,适用于智能家居、工业监控等多种应用场景。

weixin_30316097的博客 484

ECMWF等大气数据批量下载(Python API)详细步骤

ECMWF等大气数据批量下载(Python API) 遥感方向做热红外温度反演,不可避免的要用到大气廓线数据,大气数据具有实时性,比如2018年9月1日的早上8点的影像,为了提高反演精度就需要用到时间上与其相差尽可能接近的大气数据,用于消除大气的影响,如果数据量较少我们可以查看影像的时间和空间范围进行下载,但是如果处理某个较大区域时可能涉及到大量的影像,如果一景一景对应查找去下载会很麻烦,因此针对大量数据的自动批量下载很有必要。本文根据 https://cds.climate.copernicus.eu/#

liuxiaojiangtobeno1的博客 1万+

HQL实现简单的增删改查

HQL(Hibernate Query Language)是完全面对对象的查询语句,查询功能强大,具备继承、多态和关联等特性。 Query是Hibernate的查询接口,用于从数据存储源查询对象及控制执行查询的过程,Query包装了一个HQL语句。 hibernate5中 org.hibernate.Query 被 org.hibernate.query.Query 替代。 创建dao层接口...

李天下 1442

华为2019秋招笔试Java实现(2)

华为2019秋招笔试Java实现(2) 笔试日期2019年8月14日 第二题(200分) 题目描述 某程序员小A,有一种表格数据需要存储在文件中。表格中的每一行,由若干个字段组成,每个字段可以是整数或字符串(字符串只包含数字、字母以及特殊字符!@#%^&*()",)。小A设计了一种存储格式,采用文本的方式对表格数据进行存储。文本文件中的每一行,代表了表格数据中的一行数据。具体格式描述如下: 1、采用逗号分隔不同的字段(逗号前后无空格); 2、数字直接采用10进制的文本存储; 3、字符串的存储规则如下

hewhys的博客 1549

一个简单的利用hibernate实现增删改查的例子

下面这个例子非常简单,只是用于实现一个对oracle数据库中student表的一个简单的增删改查,其中查询和删除都是根据主键id来查询。 目录结构 图1:目录结构 hibernate.cfg.xml中的代码如下: oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@localhost:1521:orcl yedward

山鹰的专栏 8841

R语言使用survminer包的ggcompetingrisks函数可视化竞争风险的累积事件曲线、使用可视化对象的mapping属性自定义修改、配置颜色分组及线条类型

R语言使用survminer包的ggcompetingrisks函数可视化竞争风险的累积事件曲线、使用可视化对象的mapping属性自定义修改、配置颜色分组及线条类型

data+scenario+science+insight 1380

ROS从入门到精通0-1:教程导读

ROS概念太多太复杂?ROS从入门到精通系列订阅必看

FRIGIDWINTER的博客 1万+

Hibernate 简单的增删改查 示例

创建数据库ssh下的一张表box:   create table `ssh`.`box`( `id` INT not null auto_increment, `width` FLOAT, `length` FLOAT, `height` FLOAT, `name` VARCHAR(20), primary

itzyjr的专栏 1069

Linux内核vmlinuz文件:了解和编程

vmlinuz文件是Linux操作系统中的内核镜像文件。它包含了Linux内核的压缩版本,用于引导和启动操作系统。vmlinuz文件通常是一个zImage格式的压缩内核镜像,其中包含了操作系统所需的核心功能和驱动程序。vmlinuz文件的名称可能会因Linux发行版和版本而有所不同,但它们的作用是相同的。在某些发行版中,vmlinuz文件可能被重命名为vmlinux或bzImage。

PixelDyno的博客 1351

Hibernate简单实现增删改查

Hibernate简单实现增删改查 2020.08.10 用了一下午时间入门了Hibernate给和我一样想学的小白分享一下 hibernate是一个对象关系映射框架 它对jdbc进行了封装只需要调用方法即可实现对数据库的操作。hibernate可以自动生成SQL语句,自动执行。 **直接上代码** 1. 创建新项目勾选web Application和Hibernate以及hibernate下面Create default hibernate configuration and main class点击N

wgy_BUG的博客 4852

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

hibernate之简单增删改查

hibernate之简单增删改查一、主体框架二、代码展示①News实体类②hibernate.cfg.xml配置文件③News.hbm.xml配置文件④AppTest测试类代码三、运行结果展示 一、主体框架 二、代码展示 ①News实体类 package com.allen.entity; import java.io.Serializable; public class News implements Serializable { private Integer id; privat

faramita_of_mine的博客 679

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

hibernate中简单的增删改查

项目的整体结构如下 1.配置文件 hibernate.cfg.xml <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configurati...

weixin_30278311的博客 103

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Hibernate实现简单的增删改查操作

1、创建表//根据实体类创建表字段2、创建java project项目//这个不多说3、添加对应jar包//这个也不多说4、创建数据库表实体类package com.entity; /** * 数据库实体 * Created by lvjun on 2018-03-26. */ public class UsersEntity { int id;//用户id String ...

lvjunit 1万+

Java-Hibernate简单增删改查

Hibernate 简单增删改查 转载自 https://www.shiyanlou.com/courses/document/971 一、实验环境说明1. 环境登录无需密码自动登录,系统用户名 shiyanlou,密码 shiyanlou2. 环境介绍本实验环境采用带桌面的 Ubuntu Linux 环境,实验中可能会用到桌面上的程序:> * XfceTerminal: Linux 命令行终

SoftStar的专栏 681

Hibernate实现简单的增删改查

现在Hibernate使用的是越来越少了,但是Hibernate任然是一个非常棒的框架 今天用Hibernate实现简单的增删改查 配置文件 Hibernate的配置文件主要有两个,一个是hibernate.cfg.xml .默认放在src下(也可以放在其他位置,但是要在加载配置文件时填写路径信息).另一个(种)是 mappername.hbm.xml .mappername是你实体类...

yan245294305的博客 631

Hibernate简单增删改查

一、准备工作 1.建立数据库think,建立数据表user,里面有name和pwd字段,均为varchar类型。 2.在eclipse中创建MyFirstHibernate工程,在bin目录下添加相关包。 3.在src目录下编写*.cfg.xml配置文件, hibernate.cfg.xml: <!DOCTYPE hibernate-configuration PUBLIC "-//H

w_t_y_y的博客 278
上一篇: hibernate——Session接口中定义的saveOrUpdate()方法浅析
下一篇: hibernate——两种查询方式
hackerain
博客等级 码龄16年 753粉丝 220原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值