• hibernate 基本步骤 <一>


    工程结构:

    所有实验步骤:

    建立java工程

    1.导入包

    2.建立一个对应与数据库的类Student。里面的属性和数据库中的字段对应。

    3.在上面Student类所在的目录下建立映射文件。配置对象-关系映射文件:Student.hbm.xml //名称不确定,随意!最好放在bean中

    <?xml version="1.0" encoding="UTF-8"?>
    <!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.huasoft.domain">

        <!-- 不指定table默认以类为依据,创建student表 (第一个字母小写)-->
        <class name="Student">
            <id name="id" >
                <generator class="native"></generator>   <!-- 自动增长 -->
            </id>
            
            <property name="name" length="20" column="myname"></property>   <!--类的属性和数据库字段对应关系,默认不写column就以属性为数据库字段列-->
            <property name="sex"></property>
            <property name="age"></property>
        </class>
    </hibernate-mapping>


    4.在src下加入Hibernate配置文件(指定数据库连接密码和用户):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="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
            <!--指定数据库驱动  -->
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <!-- 指定连接url -->
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hbm_first</property>
            <!-- 指定数据用户名 -->
            <property name="hibernate.connection.username">root</property>
            <!-- 指定数据库密码 -->
            <property name="hibernate.connection.password">ai2212935</property>
            <!-- 中断输出sql语句 -->
            <property name="hibernate.show_sql">true</property>

            <!-- 加载指定映射文件 -->
            <mapping resource="com/huasoft/domain/Student.hbm.xml"/>
            
        </session-factory>
        </hibernate-configuration>


    5.引入mysql的驱动包,hibernate只能生成表,不能生成数据库,打开sql自己创建数据库。

    6.建立一个类Client.java,用来生成表(读取配置文件,连接,)。
    import org.hibernate.cfg.Configuration;
    import org.hibernate.tool.hbm2ddl.SchemaExport;

    //生成表
    public class Client {
        public static void main(String[] args){
            try {
                Configuration cfg=new Configuration().configure();
                //根据配置信息生成表的工具类
                SchemaExport export=new SchemaExport(cfg);
                //工具类产生表:第一个参数,创建表显示在控制台,第二个参数:允许将脚本配置导入数据库。
                export.create(true, true);
            } catch (Exception e) {

            }        
        }
    }


    7.创建一个带有主函数类Test,用来对数据库进行操作,获取增删该查

    i
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistryBuilder;

    import com.huasoft.domain.Student;


    //对生成的数据库进行底层操作
    public class Test {
        public static void main(String[] args) {


            try {
                Configuration cfg=new Configuration().configure();//读取配置文件
                
                
                /**
                 *  hibernate 4.0之后版本获取方式,使用带有参数的buildSessionFactory()获取sessionFactory对象
                 */
                ServiceRegistryBuilder srb = new ServiceRegistryBuilder();
                SessionFactory factory=cfg.buildSessionFactory(srb.applySettings(cfg.getProperties()).buildServiceRegistry());
                
                /**老版本获取sessionFactory对象,buildSessionFactory()
                SessionFactory factory=cfg.buildSessionFactory();
                */
                Session session=factory.openSession();
                
                
                Transaction tx=session.getTransaction();
                tx.begin();
                
                Student student=new Student();
                student.setAge(20);
                student.setName("艾广然 ");
                student.setSex("男");
                session.save(student);
                tx.commit();
                
                session.close();
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }



    7.单元测试(允许建立多个方法,每一个方法作为程序的运行接口,不再局限于main,做测试用):
    引入架包junit.jar

    为了区分,建立一个source src,建立一个com.huasoft.test包,包中的HbmTest类extends TestCase类 。
    方法名必须以test开头,可以实现多个方法的测试。

    由于我们不需要每次执行其中的方法都去建立一个SessionFactory,所以我们把
                Configuration cfg=new Configuration().configure();//读取配置文件
                SessionFactory factory=cfg.buildSessionFactory();//创建factory对象。
    这两句话创建的factory在hbmUtil中单例模式建立,在HbmTest类中就不需要每次都创建对象了。


    hbmUtil单例模式:
    package com.huasoft.util;

    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistryBuilder;

    public class hbmUtil {
        private static final SessionFactory sesionFactory = buildSessionFactory();

        private static SessionFactory buildSessionFactory() {
            try {

                /*
                 *  4.0之后新版本获取方式。sessionFactory对象
                 */
                Configuration cfg = new Configuration().configure();
                ServiceRegistryBuilder srb = new ServiceRegistryBuilder();
                return cfg.buildSessionFactory(srb.applySettings(cfg.getProperties()).buildServiceRegistry());

                /*
                 * 老版本获取方式  sessionFactory对象
                 * Configuration().configure().buildSessionFactory();
                 */
            } catch (Throwable ex) {
                System.out.println("Initial SessionFactory creation failed." + ex);
                throw new ExceptionInInitializerError(ex);
            }
        }

        public static SessionFactory getSessionFactory() {
            return sesionFactory;
        }
    }



    HbmTest类中(对底层的操作):

    import java.util.Iterator;
    import java.util.List;

    import org.hibernate.Hibernate;
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;

    import com.huasoft.domain.Student;
    import com.huasoft.util.hbmUtil;

    import junit.framework.TestCase;


    public class HbmTest extends TestCase {

        
        //插入保存
        public void testSave(){
            SessionFactory factory=null;
            Session session=null;
            Transaction tx=null;

            try {
                factory=hbmUtil.getSessionFactory();
                session=factory.openSession();
                
            
                tx=session.getTransaction();

    //开启事物
                tx.begin();
                
                Student student=new Student();
                student.setAge(21);
                student.setName("艾广然 ");
                student.setSex("男");
                session.save(student);

    //提交事物
                tx.commit();
                
                
            } catch (Exception e) {

                try {
                    tx.rollback();
                } catch (Exception e2) {
                    e2.printStackTrace();
                }

                e.printStackTrace();
            }finally{
                session.close();
            }
        }
        
        
        
        //查询某一个,使用get或者load方法
        public void testLoad(){

            try {
                SessionFactory factory=hbmUtil.getSessionFactory();
                Session session=factory.openSession();
                
                
                //要加载的类型, 序列化(基本类型都实现了序列化,id)  
                Student student=(Student) session.load(Student.class, 1);
                System.out.println(student.getName()+"  "+student.getAge());

                
                session.close();
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        
        
        //查询多个
        public void testQuery(){

            try {
                SessionFactory factory=hbmUtil.getSessionFactory();
                Session session=factory.openSession();
                
                
                //操作的是对象 ,from 类名
                Query query=session.createQuery("from Student");
                List list=query.list();
                
                for (Iterator<Student> iterator = list.iterator(); iterator.hasNext();) {
                    Student student = iterator.next();
                    System.out.println(student.getName()+"  "+student.getAge());                
                }

                
                session.close();
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        //更新

        public void testUpdate(){

            try {
                SessionFactory factory=hbmUtil.getSessionFactory();
                Session session=factory.openSession();
                Transaction tx=session.getTransaction();
                tx.begin();
                
                Student student=(Student) session.get(Student.class, 1);
                student.setName("小狗1");
                session.update(student);
                

                tx.commit();
                session.close();
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

  • 相关阅读:
    达到XML简单的动态配置
    初步swift语言学习笔记9(OC与Swift杂)
    【COCOS2DX-对28游戏开发】 Cocos2d-x-3c 道路设计 CocosBase CocosNet CocosWidget
    无法识别的属性“targetFramework”。请注意属性名称区分大小写。
    IIS6.0服务器搭建网站无法访问解决方法
    IIS7授权错误:“无法验证对路径的访问”的解决方法
    如何在IIS6,7中部署ASP.NET网站
    IIS的安装与配置
    VS2010如何生成release文件
    发布网站
  • 原文地址:https://www.cnblogs.com/RanNing/p/3082716.html
Copyright © 2020-2023  润新知