分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

Hibernate的注解和检索

发布时间:2023-09-06 01:21责任编辑:彭小芳关键词:Hibernate

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

注解:新闻表和评论表

comment.java

package com.cn.pojo;import java.io.Serializable;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.Table;@Entity@Table(name="t_comment")public class Comment implements Serializable{ ???@Id ???@GeneratedValue(strategy=GenerationType.IDENTITY) ???private Integer id; ???private String commentContent; ???@ManyToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY,targetEntity=News.class) ???@JoinColumn(name="news_id",nullable=false) ???private News news; ???public Integer getId() { ???????return id; ???} ???public void setId(Integer id) { ???????this.id = id; ???} ???public String getCommentContent() { ???????return commentContent; ???} ???public void setCommentContent(String commentContent) { ???????this.commentContent = commentContent; ???} ???public News getNews() { ???????return news; ???} ???public void setNews(News news) { ???????this.news = news; ???} ???public Comment() { ???????super(); ???} ???public Comment(String commentContent) { ???????super(); ???????this.commentContent = commentContent; ???} ???????}

News.java

package com.cn.pojo;import java.io.Serializable;import java.util.HashSet;import java.util.Set;import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.OneToMany;import javax.persistence.Table;@Entity@Table(name="t_news")public class News implements Serializable{ ???@Id ???@GeneratedValue(strategy=GenerationType.IDENTITY) ???private Integer id; ???private String title; ???private String content; ???@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,targetEntity=Comment.class,mappedBy="news") ???private Set<Comment> comments=new HashSet<Comment>(); ???public Integer getId() { ???????return id; ???} ???public void setId(Integer id) { ???????this.id = id; ???} ???public String getTitle() { ???????return title; ???} ???public void setTitle(String title) { ???????this.title = title; ???} ???public String getContent() { ???????return content; ???} ???public void setContent(String content) { ???????this.content = content; ???} ???public News() { ???????super(); ???} ???public News(String title, String content) { ???????super(); ???????this.title = title; ???????this.content = content; ???} ???public Set<Comment> getComments() { ???????return comments; ???} ???public void setComments(Set<Comment> comments) { ???????this.comments = comments; ???} ???????}

HibernateSessionFactory.java

package com.cn.utilts;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.boot.MetadataSources;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;/** * Configures and provides access to Hibernate sessions, tied to the * current thread of execution. ?Follows the Thread Local Session * pattern, see {@link http://hibernate.org/42.html }. */public class HibernateSessionFactory { ???/** ?????* Location of hibernate.cfg.xml file. ????* Location should be on the classpath as Hibernate uses ??????* #resourceAsStream style lookup for its configuration file. ?????* The default classpath location of the hibernate config file is ?????* in the default package. Use #setConfigFile() to update ?????* the location of the configuration file for the current session. ???????*/ ???private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); ???private static org.hibernate.SessionFactory sessionFactory; ???????private static Configuration configuration = new Configuration(); ???private static ServiceRegistry serviceRegistry; ????static { ???????try { ???????????configuration.configure(); ???????????serviceRegistry = new StandardServiceRegistryBuilder().configure().build(); ???????????try { ???????????????sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory(); ???????????} catch (Exception e) { ???????????????StandardServiceRegistryBuilder.destroy(serviceRegistry); ???????????????e.printStackTrace(); ???????????} ???????} catch (Exception e) { ???????????System.err.println("%%%% Error Creating SessionFactory %%%%"); ???????????e.printStackTrace(); ???????} ???} ???private HibernateSessionFactory() { ???} ???????/** ????* Returns the ThreadLocal Session instance. ?Lazy initialize ????* the <code>SessionFactory</code> if needed. ????* ????* ?@return Session ????* ?@throws HibernateException ????*/ ???public static Session getSession() throws HibernateException { ???????Session session = (Session) threadLocal.get(); ???????if (session == null || !session.isOpen()) { ???????????if (sessionFactory == null) { ???????????????rebuildSessionFactory(); ???????????} ???????????session = (sessionFactory != null) ? sessionFactory.openSession() ???????????????????: null; ???????????threadLocal.set(session); ???????} ???????return session; ???} ???/** ????* ?Rebuild hibernate session factory ????* ????*/ ???public static void rebuildSessionFactory() { ???????try { ???????????configuration.configure(); ???????????serviceRegistry = new StandardServiceRegistryBuilder().configure().build(); ???????????try { ???????????????sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory(); ???????????} catch (Exception e) { ???????????????StandardServiceRegistryBuilder.destroy(serviceRegistry); ???????????????e.printStackTrace(); ???????????} ???????} catch (Exception e) { ???????????System.err.println("%%%% Error Creating SessionFactory %%%%"); ???????????e.printStackTrace(); ???????} ???} ???/** ????* ?Close the single hibernate session instance. ????* ????* ?@throws HibernateException ????*/ ???public static void closeSession() throws HibernateException { ???????Session session = (Session) threadLocal.get(); ???????threadLocal.set(null); ???????if (session != null) { ???????????session.close(); ???????} ???} ???/** ????* ?return session factory ????* ????*/ ???public static org.hibernate.SessionFactory getSessionFactory() { ???????return sessionFactory; ???} ???/** ????* ?return hibernate configuration ????* ????*/ ???public static Configuration getConfiguration() { ???????return configuration; ???}}

测试类Test.java

package com.cn.test;import javax.persistence.Entity;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.AnnotationConfiguration;import org.hibernate.cfg.Configuration;import com.cn.pojo.Comment;import com.cn.pojo.News;@Entitypublic class Test { ???@org.junit.Test ???public void test1(){ ???????Configuration configuration = new AnnotationConfiguration().configure(); ???????SessionFactory sessionFactory = configuration.buildSessionFactory(); ???????Session session = sessionFactory.openSession(); ???????Transaction tx = session.beginTransaction(); ???????try { ???????????News news = new News("鍐滆锤鏍囬","鍐滆锤鍐呭"); ???????????Comment comment1 = new Comment("璇勮1銆傘?傘??"); ???????????Comment comment2 = new Comment("璇勮2銆傘?傘??"); ???????????comment1.setNews(news); ???????????comment2.setNews(news); ???????????session.save(comment1); ???????????session.save(comment2); ???????????tx.commit(); ???????} catch (Exception e) { ???????????tx.rollback(); ???????????e.printStackTrace(); ???????}finally{ ???????????session.close(); ???????????} ???}}

检索:HQL

@org.junit.Test ???public void test1(){ ???????Configuration configuration = new AnnotationConfiguration().configure(); ???????SessionFactory sessionFactory = configuration.buildSessionFactory(); ???????//获取session对象 ???????Session session = sessionFactory.openSession(); ???????????????Transaction transaction = session.beginTransaction(); ???????????????try { ???????????//编写hql语句 ???????????String hql = "from Customer c where c.name=? and c.password=?"; ???????????//获取query对象 ???????????Query query = session.createQuery(hql).setString(0, "xxx").setString(1, "123456"); ???????????//动态绑定参数 ???????????/*query.setString(0, "xxx"); ???????????query.setString(1, "123456");*/ ???????????//操作query ???????????List<Customer> customers = query.list(); ???????????????????????for(Customer customer:customers){ ???????????????System.out.println("name="+customer.getName()); ???????????} ???????????????????????transaction.commit(); ???????} catch (Exception e) { ???????????e.printStackTrace(); ???????????transaction.rollback(); ???????} finally{ ???????????session.close(); ???????} ???????????}

QBC

 ???@org.junit.Test ???public void test7(){ ???????Configuration configuration = new AnnotationConfiguration().configure(); ???????SessionFactory sessionFactory = configuration.buildSessionFactory(); ???????//获取session对象 ???????Session session = sessionFactory.openSession(); ???????????????Transaction transaction = session.beginTransaction(); ???????????????try { ???????????//select * from tb_customer ???????????Criteria criteria = session.createCriteria(Customer.class).add(Restrictions.like("name", "%杰")).add(Restrictions.eq("password", "123456")); ???????????????????????//创建条件 ???????????//name like "%杰" ???????????//password = "123456" ???????????//Criterion c1 = Restrictions.like("name", "%杰"); ???????????//Criterion c2 = Restrictions.eq("password", "123456"); ???????????????????????//将条件添加到sql语句里 ???????????//criteria.add(c1); ???????????//criteria.add(c2); ???????????????????????List<Customer> customers = criteria.list(); ???????????for(Customer customer:customers){ ???????????????System.out.println("name="+customer.getName()); ???????????} ???????????????????????transaction.commit(); ???????} catch (Exception e) { ???????????e.printStackTrace(); ???????????transaction.rollback(); ???????} finally{ ???????????session.close(); ???????} ???????????}

Hibernate的注解和检索

原文地址:http://www.cnblogs.com/Vito-Yan/p/7758203.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved