Hibernater学习笔记(一)

作者: Mr_欢先生 | 来源:发表于2017-12-05 18:34 被阅读173次

    1.hibernate概述

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。 —— 百度百科

    2.hibernater入门

    • 环境搭建


      文件结构

    第一步:导入包

    <!--hibernate-jar-->
        <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-core</artifactId>
          <version>5.2.11.Final</version>
        </dependency>
    <!--mysql-jar-->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.6</version>
        </dependency>
    <!--日志文件-->
        <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.16</version>
        </dependency>
    

    第二步:创建entity

    package com.study.entity;
    
    public class User {
        private int uid;
        private String username;
        private String password;
        private String address;
    
        public int getUid() {
            return uid;
        }
    
        public void setUid(int uid) {
            this.uid = uid;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    }
    

    第三步:配置实体类和数据表的一一对应关系(映射关系)

    1.创建xml配置文件: User.hbm.xml
    2.引入约束文件:

    <!DOCTYPE hibernate-mapping PUBLIC
           "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
           "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    

    3.配置类和表对应

    • class标签
      • name属性:实体类全路径
      • table属性:数据库表名称
    • id标签
      • name属性:实体类里面的id属性名称
      • column:生成的表字段
    <?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>
        <class name="com.study.entity.User" table="h_user">
            <id name="uid" column="uid">
                <generator class="native"></generator>
            </id>
            <property name="username" column="username"></property>
            <property name="password" column="password"></property>
            <property name="address" column="address"></property>
        </class>
    </hibernate-mapping>
    

    第四步:创建hibernate核心配置文件

    • 创建文件:hibernate.cfg.xml
    • 引入dtd约束
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    
    • 配置数据库信息
          <!-- - 配置数据库信息-->
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate?characterEncoding=utf8</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">root</property>
    
    • 配置hibernate信息
            <!-- - 配置hibernate信息(可选)-->
            <!--输出底层sql-->
            <property name="hibernate.show_sql">true</property>
            <!--输出底层sql语句格式-->
            <property name="hibernate.format_sql">true</property>
            <!--hibernate 帮创建表,需要配置。update:如果有表进行更新,没有的话进行创建-->
            <property name="hibernate.hbm2ddl.auto">update</property>
            <!--配置数据库方言 在mysql里面实现分页,关键字limit 只能使用mysql里面 ,在oracle数据库,实现分页rownum-->
          <property name="hibernate.dialect">org.hibernate.dialect.MySQL55Dialect</property>
    
    • 将映射文件加载到核心文件中
            <!-- - 将映射文件加载到核心文件中(必须)-->
            <mapping resource="mapping/User.hbm.xml"></mapping>
    
    • 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.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate?characterEncoding=utf8</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">root</property>
            <!-- - 配置hibernate信息(可选)-->
            <!--输出底层sql-->
            <property name="hibernate.show_sql">true</property>
            <!--输出底层sql语句格式-->
            <property name="hibernate.format_sql">true</property>
            <!--hibernate 帮创建表,需要配置。update:如果有表进行更新,没有的话进行创建-->
            <property name="hibernate.hbm2ddl.auto">update</property>
            <!--配置数据库方言 在mysql里面实现分页,关键字limit 只能使用mysql里面 ,在oracle数据库,实现分页rownum-->
            <property name="hibernate.dialect">org.hibernate.dialect.MySQL55Dialect</property>
            <!-- - 将映射文件加载到核心文件中(必须)-->
            <mapping resource="mapping/User.hbm.xml"></mapping>
        </session-factory>
    </hibernate-configuration>
    

    第五步:实现添加操作

    • 加载hibernate核心配置文件
    • 创建SessionFactory对象
    • 使用SessionFactory创建session对象
    • 开启事务
    • 写具体逻辑crud代码操作‘
    • 提交事务
    • 关闭资源
    package com.study.text;
    
    
    import com.study.entity.User;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.junit.Test;
    
    /**
     *
     * @author 马欢欢
     * @date 2017/12/5
     */
    public class HibernateTest {
    
        @Test
        public void testAdd(){
            // 加载hibernate核心配置文件
            Configuration configuration = new Configuration();
            configuration.configure("/hibernate.cfg.xml");
            //    创建SessionFactory对象
            SessionFactory sessionFactory = configuration.buildSessionFactory();
            //    使用SessionFactory创建session对象
            Session session = sessionFactory.openSession();
            //    开启事务
            Transaction tx = session.beginTransaction();
            //    写具体逻辑crud代码操作
            User user = new User();
            user.setUsername("小明");
            user.setPassword("456789");
            user.setAddress("西安");
            session.save(user);
            //    提交事务
            tx.commit();
            //    关闭资源
            session.close();
            sessionFactory.close();
        }
    }
    
    注意:我在使用上面文件创建表的时候遇到一个问题,就是在创建的时候会报错
    问题

    这个问题我在网上查了,发现是因为:create 语句后面的TYPE=MyISAM TYPE=MyISAM 和 ENGINE=MyISAM 都是设置数据库存储引擎的语句 ,(老版本的MySQL使用TYPE而不是ENGINE(例如,TYPE = MYISAM)。 MySQL 5.1为向下兼容而支持这个语法,但TYPE现在被轻视,而ENGINE是首先的用法。
    因此需要将配置文件中的mysql方言改为5.5的:

      <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    

    改为

    <property name="hibernate.dialect">org.hibernate.dialect.MySQL55Dialect</property>
    
    成功创建


    当前文集 :Hibernate框架学习

    相关文章

      网友评论

      本文标题:Hibernater学习笔记(一)

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