学习hibernate2——基本搭建

作者: JUNE言JUNE语 | 来源:发表于2016-06-27 11:51 被阅读133次

    学习一个框架我觉得首先还是从项目学起,所以我从接触hibernate开始就尝试自己搭建一个hibernate项目。
    本期项目的云盘地址:链接:http://pan.baidu.com/s/1jI750Vk 密码:9vgi

    项目的结构

    这里面主要 有两个配置文件和一个实体类

    hibernate.cfg.xml

    hibernate.cfg.xml是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>
        <session-factory>
            <property name="connection.driver_class">
                com.mysql.jdbc.Driver
            </property>
            <property name="connection.url">
                jdbc:mysql://localhost:3306/h4
            </property>
            <property name="connection.username">root</property>
            <property name="connection.password"></property>
            <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
            <property name="show_sql">true</property>
            <mapping resource="com/h4/entity/Users.hbm.xml"/>      
        </session-factory>
    </hibernate-configuration>
    

    从这个配置文件可以看到,大致就是配置了相关的数据库连接的一些属性,包括登录数据库的用户名密码已经jdbc的jar包等等的属性
    解释一下几个属性:
    show_sql:是在控制台上显示sql语句,方便追踪
    dialect:方言 ,代表你现在用的是什么数据库
    mapping:对应映射的xml文件

    该文件一般情况下放在根目录下,采用hibernate.cfg.xml这个标准命名。具体原因可以看一下代码。

    //初始化hibernate的配置文件
    Configuration configuration = new Configuration().configure();
    
    可以看到configure有多个重载的方法 进入configure无参方法

    从上面这个图可以看到,调用无参的configure方法,就是默认调用configure(String url)的方法,并传入"/hibernate.cfg.xml"这个参数进去

    创建一个Users的实体类,跟数据库中的表一一对应。这就是ORM中的O,也就是Object。
    在实体类中记住最重要是要创建一个无参构造方法。因为hibernate在生成实体类的时候是采用反射机制,所以必须有一个无参的构造函数。

    Users.hbm.xml

    <?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>
        <class name="com.h4.entity.Users" table="users">
            <id name="id" type="java.lang.Integer">
                <column name="Id"></column>
                <generator class="native"></generator>
            </id>
            <property name="username" type="java.lang.String">
                <column name="UserName" length="50"></column>
            </property>
            <property name="password" type="java.lang.String">
                <column name="PassWord" length="50"></column>
            </property>
            <property name="age" type="java.lang.Integer">
                <column name="Age"></column>
            </property>
        </class>
    </hibernate-mapping>
    

    该配置文件中的id对应的是表的主键PK,而其他的property则对应表的其他属性。

    测试

    写一个测试类,有一个测试方法可以把users持久化。

    public static void addUsers(){
        //这是4.x之前创建SessionFactory的方法,4.x之后采取另外一种方法
        //SessionFactory sf = new Configuration().configure().buildSessionFactory();
        
        SessionFactory sf = null;
        Configuration configuration = new Configuration().configure();
        
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
                .applySettings(configuration.getProperties())
                .buildServiceRegistry();
        
        sf = configuration.buildSessionFactory(serviceRegistry);
        
        Session s = null;   
        Transaction t = null;
        
        try{   
            //准备数据   
            Users um = new Users();   
            
            um.setUsername("h3");   
            um.setPassword("1234");
            um.setAge(1);   
            s = sf.openSession();   
            t = s.beginTransaction();   
            s.save(um);
           
            //Users users = (Users) s.get(Users.class, 1);
            //System.out.println(users.toString());
            t.commit();   
       }catch(Exception err){   
            t.rollback();   
            err.printStackTrace();   
      }finally{   
            s.close();   
      }
    }
    
    public static void main(String[] args) {
            
            Test.addUsers();
            
    }
    

    运行的结果如下

    可以看到打印出来SQL语句,结果没有报错

    查看数据库表

    增加了一条记录

    本节课就到这里啦
    另外说明,本节课的源代码是跟下一节的源代码合在一起了,文件名为hibernate_2.zip

    相关文章

      网友评论

        本文标题:学习hibernate2——基本搭建

        本文链接:https://www.haomeiwen.com/subject/csrzdttx.html