zoukankan      html  css  js  c++  java
  • hibernate的crud操作

    1:hibernate操作的帮助类

    public class hibernateUtil {
    
    	public static SessionFactory factory;
    	static{
    		Configuration cfg = new Configuration();
    		cfg.configure();
    	    factory = cfg.buildSessionFactory();
    	}
    }
    

     2:hibernate的持久化类

    //pojo持久化类
    //对象的序列化的作用:让对象在网络上传输,以二进制的形式传输
    public class Person implements Serializable{
        private String id;
        private String name;
        public Person()
        {
           //提供一个默认的构造函数,Session.get利用反射时候根据这个
        }
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }  
    }

    3:hibernate的持久化类和mysql表的映射关系

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
    <hibernate-mapping>
    <!-- 类与表的映射,类对表名,名词一样可以不写
         name:类的全名
         table:表名,和类名一样可以不写
     -->
    <class name="com.hibernate.domain.Person" table="Person">
       <!-- 
         id为标示属性,和数据库的id对应
         name为属性的名词,column为列的名词,一样也可以不写
         generator为主键产生器,手动,自动,要告诉hibernate容器用什么方式产生主键
        -->
       <id name="id" column="id" length="20" >
           <!-- <generator class="increment"></generator> -->
          <!--  <generator class="identity"></generator> -->
          <!--   <generator class="assigned"></generator> -->
              <generator class="uuid"></generator>
       </id>
       
       <!-- 
                描述一般属性,length可以不写,但是默认是最大值
           type属性有2种写法java类型如java.lang.String和hibernate类型string(小写)
                 但java类型效率更高,因为hibernate也要转为java类型在和sql进行对应varchar
        -->
        <property name="name" column="name" length="20" type="string"></property>
    </class>
    </hibernate-mapping>

    4:hibernate的配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
    <hibernate-configuration>
    <!-- hibernate的配置文件,数据库连接和mapping -->
    
      <!-- 
            一个session-factory只能连接一个数据库
        -->
    <session-factory>
        <!-- 
            数据库的用户名
        -->
        <property name="connection.username">root</property>
        <!-- 
            密码
        -->
        <property name="connection.password">123</property>
        <!-- 
            url
        -->
        <property name="connection.url">
            jdbc:mysql://localhost:3306/hibernate
        </property>
        <!-- 
            作用:根据持久化类和映射文件生成表
            validate
            create-drop
            create
            update
        -->
        <property name="hbm2ddl.auto">update</property>
        <!-- 
            显示hibernate内部生成的sql语句
        -->
        <property name="show_sql">true</property>
        <mapping resource="com/hibernate/domain/hibernate.hbm.xml" />
      </session-factory>
    </hibernate-configuration>

    5:完成hibernate的crud操作

    package com.hibernate.test;
    
    import java.util.List;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.Test;
    
    import com.hibernate.Util.hibernateUtil;
    import com.hibernate.domain.Person;
    
    //数据库的增删改查总结
    /*
     * 1:查询不用事务,增删改用事务
     * 2:添加不用查找id,查询删除更新都要根据id找到这个对象进行操作
     * 3:crud操作都通过核心session操作
     */
    public class PersonTest extends hibernateUtil {
    
        /*
         * 判断一个类是不是持久化类 1:加载配置文件 2:在配置文件中加载映射文件 3:解析映射文件的class name是否存在,存在就是持久化类
         */
        // session.save()
        @Test
        public void savePerson() {
            // 通过继承hibernateUtil自动生成sessionFactory
            // 下面的公共代码可以继承hibernateUtil来实现
            /*
             * Configuration cfg = new Configuration(); cfg.configure();
             * //启动和加载hibernate的配置文件hibernate.cfg.xml SessionFactory factory =
             * cfg.buildSessionFactory();
             */
    
            /*
             * hibernate把配置文件中的数据库连接信息,映射文件和持久化类的信息封装到sessionFactory中
             * sessionFactory单列模式,该类本身是线程安全的 sessionFactory是重量级了类,肯定啊封装了怎么多东西
             */
            Session session = factory.openSession();
            // openSession打开数据库连接--->查询
            // ---->增删改-->要开启事务--cud--提交事务-->关闭连接
            Transaction tran = session.beginTransaction();
    
            Person p = new Person();
            p.setName("xxxxx");
            session.save(p);
            // save相当于自动拼sql insert into Person(id,name) value(?,?)
            // 客户端的操作必须是持久化对象p
            tran.commit();
            session.close();
        }
    
        // session.createQuery
        @Test
        public void QueryPerson() {
            // 查询所有
            Session session = factory.openSession();
            // hibernate的查询语句是HQL语句from 类名
            List<Person> persons = session.createQuery("from Person").list();
            for (Person p : persons) {
                System.out.println(p.getName());
            }
            session.close();
        }
    
        // session.get
        @Test
        public void queryPersonById() {
            Session session = factory.openSession();
            // 利用session.get()产生Person对象,调用的是默认的构造函数,所有一定要用构造函数
            Person p = (Person) session.get(Person.class, 1);
            System.out.println(p.getName());
            session.close();
        }
    
        //hibernate内部根据标识符,看标识符在数据库中相应的表中,有就删除
        //session.delete()
        @Test
        public void deletePerson() {
            Session session = factory.openSession();
            Transaction tran = session.beginTransaction();
           /*
            * 1:找出要删除的id
            * 2:删除该id对应的记录
            */
            Person person=(Person) session.get(Person.class, 3);
            session.delete(person);
            tran.commit();
            session.close();
        }
        
        @Test
        public void updatePerson() {
            Session session = factory.openSession();
            Transaction tran = session.beginTransaction();
           /*
            * 1:找出要更新的id
            * 2:进行修改
            * 3;进行update操作
            */
            Person person=(Person) session.get(Person.class, 4);
            person.setName("林小小");
            session.update(person);
            tran.commit();
            session.close();
        }
    }
  • 相关阅读:
    textarea输入限制
    MyBatis 下使用SQLite
    天气预报
    导出Excel、csv
    WDK 常用的几个函数
    Windows 内核 hello world
    内核模式下的文件操作
    Windows 内核编程初涉
    Windows 内地管理
    Windows 内核 同步处理
  • 原文地址:https://www.cnblogs.com/linhong/p/4495306.html
Copyright © 2011-2022 走看看