hibernate学习笔记4---HQL、通用方法的抽取实现
- package cn.itcast.hibernate;
- import java.io.Serializable;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.Transaction;
- import org.hibernate.cfg.Configuration;
- /*
- * 想让初始化创建只执行一次
- * 方式1:单例模式
- * 方式2: 静态语句块等
- *
- * 由于只想让初始化执行一次,不想让其他类继承所以此类用final修饰,不想被其他类初始化所以默认构造用private修饰,由于在静态语句块中所以加static
- *
- *
- */
- public final class HIbernateUtil {
- private static SessionFactory sessionfactory;
- private HIbernateUtil(){
- }
- /**
- * 细节1:Configuration:是一个配置类
- * Configuration的对象会找hibernate.cfg.xml,完成hibernate的初始化
- *
- * 细节2:hibernate的配置文件有两种hibernate.cfg.xml和hibernate.properties
- * 两种存在一种即可,当然如果都存在的话,hibernate.cfg.xml中的配置信息会覆盖hibernate.properties的配置信息
- *
- * 细节3:初始化工作只尽量只初始化一次,耗时
- */
- static {
- Configuration cfg = new Configuration();
- cfg.configure();
- //cfg.configure("filename"); 可以通过filename来指定配置文件的位置和配置文件名(如果不在默认classpath的位置下)
- //所用的src下的文件都会经行编译,最后字节码文件在classpath下,bin是classpath下的一部分
- sessionfactory = cfg.buildSessionFactory();
- }
- /*
- * 创建出对象,通过getter方法方便外接使用
- *
- */
- public static SessionFactory getSessionfactory() {
- return sessionfactory;
- }
- /**
- * 此session包为org.hibernate.Session;
- * @return
- * 定义方法返回session,session你可以理解为jdbc的数据库连接
- */
- public static Session getSession(){
- return sessionfactory.openSession();
- }
- /**
- * 通用保存方法
- * @param entity
- */
- public static void add(Object entity){
- Session s = null;
- Transaction tx = null;
- try {
- s=HIbernateUtil.getSession();
- tx = s.beginTransaction();
- s.save(entity);
- tx.commit();
- } finally {
- if(s!=null){
- s.close();
- }
- }
- }
- /**
- * 通用更新方法
- * @param entity
- */
- public static void update(Object entity){
- Session s = null;
- Transaction tx = null;
- try {
- s=HIbernateUtil.getSession();
- tx = s.beginTransaction();
- s.update(entity);
- tx.commit();
- } finally {
- if(s!=null){
- s.close();
- }
- }
- }
- /**
- * 通用删除方法
- * @param entity
- */
- public static void delete(Object entity){
- Session s = null;
- Transaction tx = null;
- try {
- s=HIbernateUtil.getSession();
- tx = s.beginTransaction();
- s.delete(entity);
- tx.commit();
- } finally {
- if(s!=null){
- s.close();
- }
- }
- }
- /**
- * 通用根据ID查询方法
- * @param entity
- */
- public static Object get(Class clazz,Serializable id){
- Session s = null;
- try {
- s=HIbernateUtil.getSession();
- Object obj = s.get(clazz, id);
- return obj;
- } finally {
- if(s!=null){
- s.close();
- }
- }
- }
- }
二、HQL(Hibernate Query Language)
- package cn.itcast.hibernate;
- import java.util.Date;
- import java.util.List;
- import org.hibernate.Query;
- import org.hibernate.Session;
- import cn.itcast.hibernate.domain.User;
- public class QueryTest {
- /**
- * 使用HQL根据name查询方法
- * @param entity
- */
- public static void Query(String name){
- Session s = null;
- try {
- s=HIbernateUtil.getSession();
- //HQL:
- //这里的from后面跟的不是表名,而是对象名(类名)
- String hql = "from User as user where user.name=?"; //from Object 支持多态度
- Query query = s.createQuery(hql);
- query.setString(0, name);
- List<User> list=query.list(); //executQuery();
- for(User user:list){
- System.out.print(user.getName());
- }
- //如果确定数据最多只有一条,可以使用一下的方法简化代码
- User u= (User)query.uniqueResult();
- System.out.print("只有一条数据"+u.getName());
- } finally {
- if(s!=null){
- s.close();
- }
- }
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- User user = new User();
- user.setName("name");
- user.setBirthday(new Date());
- HIbernateUtil.add(user);
- Query(user.getName());
- }
- }
String hql = "from Users as users where users.name = ?";切记用对象不要用表名
注意这句 users是Users的别名,
User是类名,不能直接使用User.name(不能通过类来访问,就好像你不能通过类名去访问实例变量一样。
通常会用别名的方式解决,比如
from Users as users where users.name = ?(别名就好像是test类的一个对象,通过对象就可以访问实例变量)
当然,仅对一个类进行操作,也可以不借助于别名:
from Users where name = 'sdf'
还可以用query.uniqueResult();用来返回单一的查询结果,务必确保查询结果唯一。
hibernate学习笔记4---HQL、通用方法的抽取实现的更多相关文章
- Hibernate学习笔记(十) — HQL查询
一.HQL的一对多查询 班级(1)->(多)学生 /** * 实现Classes与Student的内连接 * * SELECT c.*,s.* * from classes c INNER JO ...
- Hibernate学习笔记-Hibernate HQL查询
Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...
- Hibernate学习笔记(二)
2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...
- Hibernate学习笔记(一)
2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...
- J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate())
J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate()) 当我们使用Hibernate进行数据的CRUD操作时,利用模版进行操作不失为一种方法. ...
- Hibernate 学习笔记一
Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...
- 【python学习笔记】9.魔法方法、属性和迭代器
[python学习笔记]9.魔法方法.属性和迭代器 魔法方法:xx, 收尾各有两个下划线的方法 __init__(self): 构造方法,创建对象时候自动执行,可以为其增加参数, 父类构造方法不会被自 ...
- Java8学习笔记(八)--方法引入的补充
在Java8学习笔记(三)--方法引入中,简要总结了方法引入时的使用规则,但不够完善.这里补充下几种情况: 从形参到实例方法的实参 示例 public class Example { static L ...
- [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- AutoResetEvent 运用
static AutoResetEvent are = new AutoResetEvent(true);//初始化为开 static void Main(string[] args) { //如果这 ...
- [解决方案] 当 IDENTITY_INSERT 设置为 OFF 时
当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'tbUser' 中的标识列插入显式值. 解决:这个情况是你的表里面,有一列数据类型是IDENTITY的,也就是数据库自动递增列对于自 ...
- 在linux中使用phpize安装php扩展模块
介绍:linux系统中,php安装成功后,在bin目录下会生成一个名叫phpize的可执行脚本,这个脚本的用途是动态安装php扩展模块.使用phpize脚本安装php扩展模块的好处:在安装php时没有 ...
- 获取iframe中的元素
父窗口中获取iframe中的元素 var ifr = document.getElementById('suggustion').contentWindow.document.body; 在ifram ...
- vs2010创建并使用DLL
一.为什么需要dll 代码复用是提高软件开发 效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架, 如ATL ...
- 还原TexturePacker plist 文件以及图片的方法 (切开各小图片)
原地址:http://blog.csdn.net/linuxchen/article/details/16865645 Python 脚本:(来自网络) unpack_plist.py 命令行: py ...
- Too many levels of symbolic links 问题
Too many levels of symbolic links 问题 Posted on 2011-11-30 20:33 张贺 阅读(5826) 评论(0) 编辑 收藏 今天弄了个ZendStu ...
- ASP.NET Web.Config配置数据库连接的一种方法
所谓的webConfig配置数据库连接就是在里面某个特定名称的节点中写下ADP.NET中的ConnectString,就这么简单 1.首先在Web.Config文件里写下数据库连接字符串. <c ...
- DB2学习
1.为了使用ORG_ID,由于OCRM_F_MM_MKT_PLAN a 没有ORG_ID,但是OCRM_F_MM_EXECUTE_INST_DESC d 表里面有,可以使a表连接b表,创建临时表t. ...
- Java 动态代理机制分析及扩展
Java 动态代理机制分析及扩展,第 1 部分 王 忠平, 软件工程师, IBM 何 平, 软件工程师, IBM 简介: 本文通过分析 Java 动态代理的机制和特点,解读动态代理类的源代码,并且模拟 ...