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

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

    别人在看

    电脑屏幕不小心竖起来了?别慌,快捷键搞定

    Destoon 模板存放规则及语法参考

    Destoon系统常量与变量

    Destoon系统目录文件结构说明

    Destoon 系统安装指南

    Destoon会员公司主页模板风格添加方法

    Destoon 二次开发入门

    Microsoft 将于 2026 年 10 月终止对 Windows 11 SE 的支持

    Windows 11 存储感知如何设置?了解Windows 11 存储感知开启的好处

    Windows 11 24H2 更新灾难:系统升级了,SSD固态盘不见了...

    IT头条

    Synology 更新 ActiveProtect Manager 1.1 以增强企业网络弹性和合规性

    00:43

    新的 Rubrik Agent Cloud 加速了可信的企业 AI 代理部署

    00:34

    宇树科技 G1人形机器人,拉动一辆重达1.4吨的汽车

    00:21

    Cloudera 调查发现,96% 的企业已将 AI 集成到核心业务流程中,这表明 AI 已从竞争优势转变为强制性实践

    02:05

    投资者反对马斯克 1 万亿美元薪酬方案,要求重组特斯拉董事会

    01:18

    技术热点

    大型网站的 HTTPS 实践(三):基于协议和配置的优化

    ubuntu下右键菜单添加新建word、excel文档等快捷方式

    Sublime Text 简明教程

    用户定义SQL Server函数的描述

    怎么在windows 7开始菜单中添加下载选项?

    SQL Server 2016将有哪些功能改进?

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

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