hibernate应用程序的Helloworld

这里使用Idea工具开发,Idea教程:点击打开链接  ,Idea破解:点击打开链接



1.导包(maven)

maven的包从:点击打开链接获取


   <!--hibernate-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>4.1.12.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.2.4.Final</version>
        </dependency>
        <!--<dependency>-->
        <!--<groupId>org.hibernate</groupId>-->
        <!--<artifactId>hibernate-core</artifactId>-->
        <!--<version>5.2.12.Final</version>-->
        <!--无ServiceRegistryBuilder方法-->
        <!--</dependency>-->
        <dependency>
            <groupId>org.hibernate.common</groupId>
            <artifactId>hibernate-commons-annotations</artifactId>
            <version>4.0.2.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
            <version>1.0.1.Final</version>
        </dependency>
        <!--语法分析器-->
        <dependency>
            <groupId>antlr</groupId>
            <artifactId>antlr</artifactId>
            <version>2.7.7</version>
        </dependency>
        <!--连接池c3p0-->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>mchange-commons-java</artifactId>
            <version>0.2.11</version>
        </dependency>

        <!--dom4j读写xml文件-->
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <!--Javassist动态字节码生成框架-->
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.20.0-GA</version>
        </dependency>
        <!--日志输出-->
        <dependency>
            <groupId>org.jboss.logging</groupId>
            <artifactId>jboss-logging</artifactId>
            <version>3.3.0.Final</version>
        </dependency>
        <!--事务控制-->
        <dependency>
            <groupId>org.jboss.spec.javax.transaction</groupId>
            <artifactId>jboss-transaction-api_1.2_spec</artifactId>
            <version>1.0.0.Final</version>
        </dependency>
        <!--数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <!--测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

2.数据库表NEWS

这里我使用mysql数据库

DROP TABLE
IF EXISTS `news`;

CREATE TABLE `news` (
	`ID` INT (11) NOT NULL AUTO_INCREMENT,
	`TITLE` VARCHAR (255) DEFAULT NULL,
	`DATE` date DEFAULT NULL,
	`AUTHOR` VARCHAR (255) DEFAULT NULL,
	`CONTENT` text,
	`PICTURE` LONGBLOB,
	PRIMARY KEY (`ID`),
	KEY `news_index` (`TITLE`, `AUTHOR`)
) ENGINE = INNODB AUTO_INCREMENT = 2 DEFAULT CHARSET = utf8;

3.JavaBean类

实体类(对应数据库中的某个表)如:News

package com.hibernate.entity;

import java.sql.Blob;
import java.util.Date;

/**
 * JavaBean类
 *
 * @author sujinran
 */
public class News {

    private Integer id; //编号
    private String title;//标题
    private String author;//作者
    private String desc;//描述

    //使用 title + "," + content 可以来描述当前的 News 记录.
    //即 title + "," + content 可以作为 News 的 desc 属性值

    private String content;//内容

    private Blob picture;//Blob二进制文件,图片

    public Blob getPicture() {
        return picture;
    }

    public void setPicture(Blob picture) {
        this.picture = picture;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }


    private Date date;

    public Integer getId() { //property
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public News(String title, String author, Date date) {
        super();
        this.title = title;
        this.author = author;
        this.date = date;
    }

    public News() {
    }

    @Override
    public String toString() {
        return "News [id=" + id + ", title=" + title + ", author=" + author
                + ", date=" + date + "]";
    }
}

4.映射文件

mapper/News.hbm.xml

Hibernate 配置文件的两个配置项

• hbm2ddl.auto:该属性可帮助程序员实现正向工程, 即由java 代码生成数据库脚本, 进而生成具体的表结构. 。取值create | update | create-drop | validate

– create : 会根据 .hbm.xml 文件来生成数据表, 但是每次运行都会删除上一次的表 ,重新生成表, 哪怕二次没有任何改变

– create-drop : 会根据 .hbm.xml 文件生成表,但是SessionFactory一关闭, 表就自动删除

– update : 最常用的属性值,也会根据 .hbm.xml 文件生成表, 但若 .hbm.xml 文件和数据库中对应的数据表的表结构不同,Hiberante 将更新数据表结构,但不会删除已有的行和列

– validate : 会和数据库中的表进行比较, 若 .hbm.xml 文件中的列在数据表中不存在,则抛出异常

• format_sql:是否将 SQL 转化为格式良好的 SQL . 取值true | false


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--对应的javabean包-->
<hibernate-mapping package="com.hibernate.entity">
    <!--News实体类,NEWS数据库表-->
    <class name="News" table="NEWS" dynamic-insert="true">
        <!--编号-->
        <id name="id" type="java.lang.Integer">
            <column name="ID"/>
            <!-- 指定主键的生成方式, native: 使用数据库本地方式 -->
            <generator class="native"/>
        </id>
        <!--标题-->
        <property name="title" not-null="true" unique="true"
                  index="news_index" length="50"
                  type="java.lang.String" column="TITLE">
        </property>
        <!--作者-->
        <property name="author" type="java.lang.String"
                  index="news_index">
            <column name="AUTHOR"/>
        </property>
        <!--日期-->
        <property name="date" type="date">
            <column name="DATE"/>
        </property>

        <property name="desc"
                  formula="(SELECT concat(title, ',', author) FROM NEWS n WHERE n.id = id)"></property>
        <!--内容-->
        <property name="content">
            <column name="CONTENT" sql-type="text"></column>
        </property>
        <!--图片-->
        <property name="picture" column="PICTURE" type="blob"></property>

    </class>

</hibernate-mapping>

5.Hibernate 配置

Configuration 类负责管理Hibernate 的配置信息。包括如下内容:

– Hibernate 运行的底层信息:数据库的URL、用户名、密码、 JDBC驱动类,数据库Dialect,数据库连接池等(对应 hibernate.cfg.xml 文件)。

–持久化类与数据表的映射关系( *.hbm.xml 文件)

•创建 Configuration 的两种方式

–属性文件( hibernate.properties) :

• Configuration cfg = new Configuration();

– Xml文件( hibernate.cfg.xml)

• Configuration cfg = new Configuration().configure();

持久化类与 Session 关联起来后就具有了持久化的能力。

• Session 类的方法:

–取得持久化对象的方法: get() load()

–持久化对象都得保存,更新和删除:save(),update(),saveOrUpdate(),delete()

–开启事务: beginTransaction().

–管理 Session 的方法: isOpen(),flush(), clear(), evict(),close()等

代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行,即使是只读操作。

Transaction tx =session.beginTransaction();

•常用方法:

– commit():提交相关联的session实例

– rollback():撤销事务操作

– wasCommitted():检查事务是否提交


hibernate.cfg.xml

<?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.username">root</property>
        <property name="connection.password">123456</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://127.0.0.1:3306/hibernate</property>

        <!-- 配置 hibernate 的基本信息 -->
        <!-- hibernate 所使用的数据库方言不能生成数据库中表 -->
        <!--<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>-->
        <!-- hibernate 所使用的数据库方言,能自动生成数据库表 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>


        <!-- 执行操作时是否在控制台打印 SQL -->
        <property name="show_sql">true</property>

        <!-- 是否对 SQL 进行格式化 -->
        <property name="format_sql">true</property>

        <!-- 指定自动生成数据表的策略 -->
        <property name="hbm2ddl.auto">update</property>

        <!-- 指定关联的 .hbm.xml 文件 -->
        <mapping resource="mapper/News.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

6.测试

package com.hibernate;

import java.sql.Date;

import com.hibernate.entity.News;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.Test;

public class HibernateTest {

    @Test
    public void test() {

        System.out.println("test...");

        //1. 创建一个 SessionFactory 对象
        SessionFactory sessionFactory = null;

        //1). 创建 Configuration 对象: 对应 hibernate 的基本配置信息和 对象关系映射信息
        Configuration configuration = new Configuration().configure();

        //2). 创建一个 ServiceRegistry 对象: hibernate 4.x 新添加的对象
        //hibernate 的任何配置和服务都需要在该对象中注册后才能有效.
        ServiceRegistry serviceRegistry =
                new ServiceRegistryBuilder().applySettings(configuration.getProperties())
                        .buildServiceRegistry();

        //3).
        sessionFactory = configuration.buildSessionFactory(serviceRegistry);

        //2. 创建一个 Session 对象
        Session session = sessionFactory.openSession();

        //3. 开启事务
        Transaction transaction = session.beginTransaction();

        //4. 执行插入保存操作
        News news = new News("Hibernate", "苏大大", new Date(new java.util.Date().getTime()));
        session.save(news);

        //5. 提交事务
        transaction.commit();

        //6. 关闭 Session
        session.close();

        //7. 关闭 SessionFactory 对象
        sessionFactory.close();
    }

}

注:本内容学习了尚硅谷的视频做的笔记




猜你喜欢

转载自blog.csdn.net/qq_35136982/article/details/80699265
今日推荐