当前位置: 代码迷 >> Java相关 >> java框架篇-hibernate之CRUD操作
  详细解决方案

java框架篇-hibernate之CRUD操作

热度:86   发布时间:2016-04-22 20:22:13.0
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);    }}

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方法效果一样,但是是懒加载,即在不使用他之前他不会返回对象;
1楼在河之博
大神能否告诉我,为啥你的评论区下面没有广告吗
Re: 偶my耶
@在河之博,用css可以设置隐藏
  相关解决方案