关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » JAVA »Java Hibernate 之 CRUD 操作

    Java Hibernate 之 CRUD 操作

    2015-04-16 00:00:00 出处:偶my耶的博客
    分享

    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);
        }
    }

    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方法效果一样,但是是懒加载,即在不使用他之前他不会返回对象;
    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    Edge浏览器百度被劫持/篡改怎么办,地址后边跟着尾巴#tn=68018901_7_oem_dg

    Google Chrome 在 iPhone 上新增了 Safari 数据导入选项

    Windows 11专业版 KMS工具激活产品密钥的方法

    DEDECMS安全策略官方出品

    Microsoft Text Input Application 可以关闭吗?

    新版本QQ如何关闭自带的浏览器?

    C++编程语言中continue的用法和功能,附举例示范代码

    c++ map 的数据结构、基本操作以及其在实际应用中的使用。

    C语言如何避免内存泄漏、缓冲区溢出、空指针解引用等常见的安全问题

    C语言中的break语句详解

    IT头条

    马斯克2026最新采访总结:2040年,全球机器人数量将突破100亿台

    23:52

    专家解读|规范人工智能前沿业态健康发展的新探索:解读《人工智能拟人化互动服务管理暂行办法》

    00:54

    用至强 6高存力搞定MoE卸载!

    17:53

    美国将允许英伟达向中国“经批准的客户”出售H200 GPU

    02:08

    苹果与微信就15%手续费达成一致?腾讯未置可否

    22:00

    技术热点

    PHP 和 Node.js 的10项对比挑战

    Javascript闭包深入解析及实现方法

    windows 7、windows 8.1手动增加右键菜单功能技巧

    MYSQL出错代码大汇总

    windows 7假死机怎么办 windows 7系统假死机的原因以及解决方法

    Ubuntu(Linux)下配置IP地址的方法

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。