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