初识Hibernate——添加数据

ORM:Object Relational Mapping 实体关系映射,Hibernate将关系型数据库转换为对象操作

利用Java Project项目演示试用Hibernate技术添加数据到数据库

1、引用相关jar包

  在项目下新建Mylib文件夹,加jar包粘贴就去,试用Build Path添加在项目中(若是Jave Web项目则放在WebRoot-->WEB-INF-->lib中直接使用)

2、创建Hibernate配置文件, hibernate.cfg.xml或是hibernate.properties 。添加在src下

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <!-- thread:一个线程中使用一个,获取session会话时使用 -->
        <property name="current_session_content_class">thread</property>
        <!-- 是否显示SQL语句,值为布尔型,默认false -->
        <property name="hibernate.show_sql">true</property>
        <!-- 是否格式化显示sql语句,让显示更美观,值为布尔型,默认false -->
        <property name="hibernate.format_sql">false </property>
        <!-- 自动建表
            update:每次执行时,无表则建表,无列则建列,只增不减 
            create:每次启动的时候,删除原表,再次创建
            create-drop:每次启动时创建新表,当显式关闭sessionFactory时,删除表
        -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!-- 连接数据库 -->
        <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/zxd_db</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.username">zxd</property>
        <property name="hibernate.connection.password">123456</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        
        <!-- 读取映射文件 -->
        <mapping resource="demo/orm/entity/Hero.hbm.xml" />
            
    </session-factory>
</hibernate-configuration>

hibernate.properties配置文件只能配置属性信息,不能配置映射等

hibernate.connection.username=zxd
hibernate.connection.password=123456

3、创建实体

package demo.orm.entity;

import java.util.Date;

public class Hero {
    private int heroId;
    private String heroName;
    private int heroAge;
    private Date birthday;
    
    
    public int getHeroId() {
        return heroId;
    }
    public void setHeroId(int heroId) {
        this.heroId = heroId;
    }
    public String getHeroName() {
        return heroName;
    }
    public void setHeroName(String heroName) {
        this.heroName = heroName;
    }
    public int getHeroAge() {
        return heroAge;
    }
    public void setHeroAge(int heroAge) {
        this.heroAge = heroAge;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    
}
View Code

4、创建实体映射关系 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <!-- name:实体, table:表名 -->
    <class name="demo.orm.entity.Hero" table="yingxiong">
        <!-- name:主键的名字,column:主键数据库表列,identity自增 -->
        <id name="heroId" column="ID">
            <!-- Hibernate使用generator类来生成主键 -->
            <generator class="identity" />
        </id>
        <!-- name:实体中的属性名,length:长度 ,column:表中的字段(实体属性和字段一致可省略),type:类型(可不写由hiberbate自动匹配) -->
        <property name="heroName" length="100" column="NAME" type="string" />
        <property name="heroAge" column="AGE" type="int" />
        <property name="birthday" column="BIR" type="timestamp" />
    </class>
</hibernate-mapping>

5、保存数据

package demo.orm.test;

import java.util.Date;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;

import demo.orm.entity.Hero;

public class SaveTest {

    public static void main(String[] args) {
        /*
         * 两种配置文件的加载方式,hibernate.properties只配置数据库的连接方式
         * 属性文件(hibernate.properties)调用代码:Configuration cfg = new Configuration(); 
         * Xml文件(hibernate.cfg.xml) 调用代码:Configuration cfg = new Configuration().configure();
         * */
        
        //加载Hibernate配置信息,默认读取src下的hibernate.cfg.xml
        Configuration cfg = new Configuration().configure();
        //也可以指定hibernate.cfg.xml 的路径加载
        //Configuration cfg1 = new Configuration().configure(Path);
        
        /*
         * 应用程序从SessionFactory(会话工厂)里获得Session(会话)实例。它在多个应用线程间进行共享。
         * 通常情况下,整个应用只有唯一的一个会话工厂,SessionFactory由Configuration对象创建,
         * 每个Hibernate配置文件,实际上是对SessionFactory的配置
         * */
        //试用配置信息构建sessionFactory
        SessionFactory factory = cfg.buildSessionFactory();
        
        /*
         * Session不是线程安全的,它代表与数据库之间的一次操作,它的概念介于Connection和Transaction之间。
         *  Session也称为持久化管理器,因为它是与持久化有关的操作接口。
         *     持久化对象的状态:瞬时对象(Transient Objects)、持久化对象(Persist Objects)、离线对象(Detached Objects)
         *  Session通过SessionFactory打开,在所有的工作完成后,需要关闭。
         *  它与Web层的HttpSession没有任何关系。
         * */
        //方式一:通过会话工厂构建session会话,进行增删改查,是Hibernate与数据库的会话(需要关闭)
        Session session = factory.openSession();
        //通过Id值查询(查询的时候不需要使用事物)
        session.get(Hero.class, 1);
        //通过hql查询
        Query query =session.createQuery("from Hero where hreoAge=30");
        List<Hero> list = query.list();
        for(Hero model:list){
            System.out.println(model.getHeroName());
        }
        
        
        //方式二:获取当前线程中最近试用的session,没有再open。节省资源
        Session session1 =factory.getCurrentSession();
        //CurrentSession必须使用事物(增删改查)
        session1.beginTransaction();
        session1.get(Hero.class, 1);
        session1.getTransaction().commit();
        
        //启动会话事物
        session.beginTransaction();
        /*******执行增删改查会话操作********/
        Hero model= new Hero();
        model.setHeroName("Don");
        model.setHeroAge(28);
        model.setBirthday(new Date());
        
        session.save(model);
        
        //提交事物
        session.getTransaction().commit();
        //判断会话是否开启
        if(session.isOpen()){
            session.close();
        }
        
    }

}

 注意:数据库使用MySql,连接工具使用navicat连接,需要在数据库中建立相关表,并查看相关数据信息

原文地址:https://www.cnblogs.com/zxd543/p/6688958.html