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方法效果一样,但是是懒加载,即在不使用他之前他不会返回对象;
  • 相关阅读:
    Proj THUDBFuzz Paper Reading: The Art, Science, and Engineering of Fuzzing: A Survey
    Proj THUDBFuzz Paper Reading: A systematic review of fuzzing based on machine learning techniques
    9.3 付费代理的使用
    11.1 Charles 的使用
    第十一章 APP 的爬取
    10.2 Cookies 池的搭建
    10.1 模拟登录并爬取 GitHub
    11.5 Appium 爬取微信朋友圈
    11.4 Appium 的基本使用
    11.3 mitmdump 爬取 “得到” App 电子书信息
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4529851.html
Copyright © 2011-2022 走看看