zoukankan      html  css  js  c++  java
  • hibernate之CRUD操作

    CRUD是指在做计算处理时的增加(Create)、读取(Retrieve)(重新得到数据)、更新(Update)和删除(Delete)几个单词的首字母简写.

    下面列举实例来讲解这几个操作:

    实体类:

    package com.oumyye.model;
    
    public class Student {
    
        private long id;
        private String name;
        private Class c;
        
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        
        
        public Class getC() {
            return c;
        }
        public void setC(Class c) {
            this.c = c;
        }
        @Override
        public String toString() {
            return "Student [id=" + id + ", name=" + name + "]";
        }
        
        
    }
    package com.oumyye.model;
    
    import java.util.HashSet;
    import java.util.Set;
    
    public class Class {
    
        private long id;
        private String name;
        private Set<Student> students=new HashSet<Student>();
        
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Set<Student> getStudents() {
            return students;
        }
        public void setStudents(Set<Student> students) {
            this.students = students;
        }
        
        
    }

    映射文件:

    Student.hbm.xml

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                       "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="com.oumyye.model">
     <class name="Student" table="t_student">
      <id column="stuId" name="id">
       <generator class="native"/>
      </id>
      <property column="stuName" generated="never" lazy="false" name="name"/>
      <many-to-one cascade="save-update" class="com.oumyye.model.Class"
       column="classId" name="c"/>
     </class>
    </hibernate-mapping>
    Class.hbm.xml
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                       "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="com.oumyye.model">
     <class name="Class" table="t_class">
      <id column="classId" name="id">
       <generator class="native"/>
      </id>
      <property column="className" generated="never" lazy="false" name="name"/>
      <set cascade="delete" inverse="true" name="students" sort="unsorted">
       <key column="classId"/>
       <one-to-many class="com.oumyye.model.Student"/>
      </set>
     </class>
    </hibernate-mapping>

    工具类:可以有myeclipse生成

    package com.oumyye.util;
    
    import org.hibernate.HibernateException;
    import org.hibernate.Session;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.cfg.AnnotationConfiguration;
    
    /**
     * 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 AnnotationConfiguration();    private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
        private static String configFile = CONFIG_FILE_LOCATION;
    
        static {
            try {
                configuration.configure(configFile);
                sessionFactory = configuration.buildSessionFactory();
            } 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(configFile);
                sessionFactory = configuration.buildSessionFactory();
            } 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 session factory
         *
         *    session factory will be rebuilded in the next call
         */
        public static void setConfigFile(String configFile) {
            HibernateSessionFactory.configFile = configFile;
            sessionFactory = null;
        }
        /**
         *  return hibernate configuration
         *
         */
        public static Configuration getConfiguration() {
            return configuration;
        }
    
    }

    配置文件hibernate.cfg.xml

    <?xml version='1.0' encoding='utf-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
    
    <session-factory>
    
        <!--数据库连接设置 -->
        <property name="connection.driver_class">
            com.mysql.jdbc.Driver
        </property>
        <property name="connection.url">
            jdbc:mysql://localhost:3306/mytest
        </property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
    
    
        <!-- 方言 -->
        <property name="dialect">
            org.hibernate.dialect.MySQL5Dialect
        </property>
    
        <!-- 控制台显示SQL -->
        <property name="show_sql">true</property>
    
        <!-- 自动更新表结构 -->
        <property name="hbm2ddl.auto">update</property>
        <mapping resource="com/oumyye/model/Class.hbm.xml" />
        <mapping resource="com/oumyye/model/Student.hbm.xml" />
    
    
    
    </session-factory>
    
    </hibernate-configuration>

    测试类

    package com.oumyye.service;
    
    import java.util.Iterator;
    import java.util.Set;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import com.oumyye.model.Class;
    import com.oumyye.model.Student;
    import com.oumyye.util.HibernateSessionFactory;
    
    
    public class StudentTest {
    
        private SessionFactory sessionFactory=HibernateSessionFactory.getSessionFactory();
        private Session session;
        
        @Before
        public void setUp() throws Exception {
            session=sessionFactory.openSession(); // 生成一个session
            session.beginTransaction(); // 开启事务
        }
    
        @After
        public void tearDown() throws Exception {
             session.getTransaction().commit(); // 提交事务
             session.close(); // 关闭session
        }
    
        @Test
        public void testSaveClassAndStudent() {
            Class c=new Class();
            c.setName("08计本");
           
            Student s1=new Student();
            s1.setName("张三");
            s1.setC(c);
            
            Student s2=new Student();
            s2.setName("李四");
            s2.setC(c);
           
            session.save(s1);
            session.save(s2);
            
        }
        
        @Test
        public void testLoadClass(){
            // Class c=(Class)session.load(Class.class, Long.valueOf(2));
            Class c=(Class)session.load(Class.class, Long.valueOf(1));
            System.out.println(c.getStudents());
        }
        
        @Test
        public void testGetClass(){
            // Class c=(Class)session.get(Class.class, Long.valueOf(2));
            Class c=(Class)session.get(Class.class, Long.valueOf(1));
            System.out.println(c.getStudents());
        }
        
        @Test
        public void testUpdateClass(){
            Session session1=sessionFactory.openSession();
            session1.beginTransaction();
            Class c=(Class)session1.get(Class.class, Long.valueOf(1));
            session1.getTransaction().commit(); // 提交事务
            session1.close();
            
            Session session2=sessionFactory.openSession();
            session2.beginTransaction();
            c.setName("08计算机本科2");
            session2.update(c);
            session2.getTransaction().commit(); // 提交事务
            session2.close();
        }
        <!--更新-->
        @Test
        public void testSaveOrUpdateClass(){
            Session session1=sessionFactory.openSession();
            session1.beginTransaction();
            Class c=(Class)session1.get(Class.class, Long.valueOf(1));
            session1.getTransaction().commit(); // 提交事务
            session1.close();
            
            Session session2=sessionFactory.openSession();
            session2.beginTransaction();
            c.setName("08计算机本科3");
            
            Class c2=new Class();
            c2.setName("09计算机本科3");
            session2.saveOrUpdate(c);
            session2.saveOrUpdate(c2);
            session2.getTransaction().commit(); // 提交事务
            session2.close();
        }
        
        @Test
        public void testMergeClass(){
            Session session1=sessionFactory.openSession();
            session1.beginTransaction();
            Class c=(Class)session1.get(Class.class, Long.valueOf(1));
            session1.getTransaction().commit(); // 提交事务
            session1.close();
            
            Session session2=sessionFactory.openSession();
            session2.beginTransaction();
            
            Class c2=(Class)session2.get(Class.class, Long.valueOf(1));
            c.setName("08计算机本科4");
        
            session2.merge(c);
    
            session2.getTransaction().commit(); // 提交事务
            session2.close();
        }
        <!--删除-->
        @Test
        public void testDeleteStudent(){
            Student student=(Student)session.load(Student.class, Long.valueOf(1));
            session.delete(student);
        }
    }
    package com.oumyye.service;
    
    import java.util.Iterator;
    import java.util.Set;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import com.oumyye.model.Class;
    import com.oumyye.model.Student;
    import com.oumyye.util.HibernateSessionFactory;
    
    
    public class StudentTest {
    
        private SessionFactory sessionFactory=HibernateSessionFactory.getSessionFactory();
        private Session session;
        
        @Before
        public void setUp() throws Exception {
            session=sessionFactory.openSession(); // 生成一个session
            session.beginTransaction(); // 开启事务
        }
    
        @After
        public void tearDown() throws Exception {
             session.getTransaction().commit(); // 提交事务
             session.close(); // 关闭session
        }
    
        @Test
        public void testSaveClassAndStudent() {
            Class c=new Class();
            c.setName("08计本");
           
            Student s1=new Student();
            s1.setName("张三");
            s1.setC(c);
            
            Student s2=new Student();
            s2.setName("李四");
            s2.setC(c);
           
            session.save(s1);
            session.save(s2);
            
        }
        
        @Test
        public void testLoadClass(){
            // Class c=(Class)session.load(Class.class, Long.valueOf(2));
            Class c=(Class)session.load(Class.class, Long.valueOf(1));
            System.out.println(c.getStudents());
        }
        
        @Test
        public void testGetClass(){
            // Class c=(Class)session.get(Class.class, Long.valueOf(2));
            Class c=(Class)session.get(Class.class, Long.valueOf(1));
            System.out.println(c.getStudents());
        }
        
        @Test
        public void testUpdateClass(){
            Session session1=sessionFactory.openSession();
            session1.beginTransaction();
            Class c=(Class)session1.get(Class.class, Long.valueOf(1));
            session1.getTransaction().commit(); // 提交事务
            session1.close();
            
            Session session2=sessionFactory.openSession();
            session2.beginTransaction();
            c.setName("08计算机本科2");
            session2.update(c);
            session2.getTransaction().commit(); // 提交事务
            session2.close();
        }
        <!--更新-->
        @Test
        public void testSaveOrUpdateClass(){
            Session session1=sessionFactory.openSession();
            session1.beginTransaction();
            Class c=(Class)session1.get(Class.class, Long.valueOf(1));
            session1.getTransaction().commit(); // 提交事务
            session1.close();
            
            Session session2=sessionFactory.openSession();
            session2.beginTransaction();
            c.setName("08计算机本科3");
            
            Class c2=new Class();
            c2.setName("09计算机本科3");
            session2.saveOrUpdate(c);
            session2.saveOrUpdate(c2);
            session2.getTransaction().commit(); // 提交事务
            session2.close();
        }
        
        @Test
        public void testMergeClass(){
            Session session1=sessionFactory.openSession();
            session1.beginTransaction();
            Class c=(Class)session1.get(Class.class, Long.valueOf(1));
            session1.getTransaction().commit(); // 提交事务
            session1.close();
            
            Session session2=sessionFactory.openSession();
            session2.beginTransaction();
            
            Class c2=(Class)session2.get(Class.class, Long.valueOf(1));
            c.setName("08计算机本科4");
        
            session2.merge(c);
    
            session2.getTransaction().commit(); // 提交事务
            session2.close();
        }
        <!--删除-->
        @Test
        public void testDeleteStudent(){
            Student student=(Student)session.load(Student.class, Long.valueOf(1));
            session.delete(student);
        }
    }

    Session的入门常用方法

    • Query query = session.createQuery(hql):利用hql查询语句查询;
    • Criteria critera = session.createCriteria(Class clazz);
    • (3)Transaction tx = session.beginTransaction();     //开始事务;tx.commit()提交事务;
    • session.close();//关闭Session,此后被session管理的持久化对象变为脱管状态;
    • session.save(Object obj);    //添加
    • session.update(Object obj);     //更新
    • session.delete(Object obj);    //删除
    • Object obj = session.get(Class clazz,Serialiazble id);    //根据主键查找记录并返回;
    • Object obj = session.load(Class clazz,Serializable id);    //和get方法效果一样,但是是懒加载,即在不使用他之前他不会返回对象;
  • 相关阅读:
    DOM 高级编程笔记
    什么是目标管理?什么叫smart原则?
    HTML文档中小meta的大作用
    《javascript权威指南》基础笔记 重要
    应聘时最漂亮的回答 转
    JS在IE和Firefox之间的区别
    apply与call的用法及区别
    谈谈Ajax跨域
    《高性能网站建设指南》、《高性能网站建设进阶指南》笔记
    HTTP协议状态码详解(HTTP Status Code)
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4529851.html
Copyright © 2011-2022 走看看