hibernate基础之设置

从今天起,我将陆续写关于hibernate的一些基础知识。一是为了将自己学到的知识做一个记录,二是希望顺便能帮助一些人吧。

开发环境

        hibernate-4.2.0.Final

        mysql版本:6.0


        hibernate 是一个 ORM 的框架,它的主要功能也是将我们的 javaBean 保存到数据库中。所以,我们至少需要有一个 java 类。然后需要一个配置文件,它的作用是让hibernate知道我们的 javaBean 和 数据库的 table 有什么关系,比如有一个 Student 类,想把它保存到数据库中的 StudentInfo 表中;想把 Student 类的 name属性保存到 StudentInfo 表中的 stuName 字段中等等,这些都需要一个配置文件来配置(当然,我使用的是 annotation 方式,直接就把配置写在 java 类中,就不需要这个配置文件)。最后,我们还需要一个全局的配置文件,配置全局的信息,比如使用的数据库、数据库的用户名和密码等等。

        新建一个 java project,在 src 下创建名为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>
        <!--我使用的是 mysql 数据库-->
        <!-- jdbc 驱动类-->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!--数据库连接的url
            hibernatedemo 为数据库名称
        -->
        <property name="connection.url">jdbc:mysql://localhost:3306/hibernatedemo?useUnicode=true&amp;characterEncoding=UTF-8</property>
        <!--数据库用户名-->
        <property name="connection.username">root</property>
        <!--数据库密码-->      
        <property name="connection.password">123</property>
        <!--数据库连接池,这个是hibernate的,但是真正开发中是不会使用它的
            都会使用第三方的连接池c3p0等。我把这个连接池给注释了
        -->
        <!--
        <property name="connection.pool_size">1</property>
         -->
        <!-- SQL 方言,每个数据库都是有差异的,使用的 SQL 也会不太一样,hibernate 根据方言生成不同的 SQL -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- 这是 hibernate 获取 session 的一种方法,等后面用到的时候我再说,先注释
        <property name="current_session_context_class">thread</property>
         -->
        <!-- hibernate的一个缓存,设置成不使用缓存  -->
        <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
        <!-- 显示 hibernate 的 sql,设置成显示 -->
        <property name="show_sql">true</property>
        <!-- 
            hibernate自动执行 DDL
            create:hibernate 每次都会帮生成 java 类所对应的 table
            update:hibernate 每次看 java 类所对应的表有没有更新,如有更新就会更新 table
        -->
        <property name="hbm2ddl.auto">create</property>
    </session-factory>
</hibernate-configuration>

java 类

package demo.model;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name="studentinfo")
public class Student implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * ID
     */
    private Integer id;
    
    /**
     * 学号
     */
    private String studentNo;
    
    /**
     * 姓名
     */
    private String name;
    
    /**
     * 生日
     */
    private Date brithday;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getStudentNo() {
        return studentNo;
    }
    public void setStudentNo(String studentNo) {
        this.studentNo = studentNo;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Temporal(TemporalType.DATE)
    public Date getBrithday() {
        return brithday;
    }
    public void setBrithday(Date brithday) {
        this.brithday = brithday;
    }
}

        将 Student 类将入到 全局配置文件中。在 <property name="hbm2ddl.auto">create</property> 下面加上

        <!-- 实体类映射 -->
        <mapping class="demo.model.Student"/>

类所对应的配置文件

        因为我使用的是 annotation (注解) 的方式,所以也就不需要这个配置文件了。

Hibernate 辅助类

package demo.utils;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

    private static SessionFactory sessionFactory = null;
    
    private HibernateUtil() {}
    
    @SuppressWarnings("deprecation")
    public static SessionFactory getSessionFactory() {
        if(sessionFactory==null) {
            sessionFactory = new Configuration().configure().buildSessionFactory();
        }
        return sessionFactory;
    }
}

StudentTest 测试类

package demo.test;

import java.util.Date;
import org.hibernate.Session;
import demo.model.Student;
import demo.utils.HibernateUtil;

public class StudentTest {

    public static void main(String[] args) {
        testSave();
    }
    
    public static void testSave() {
        Student student = new Student();
        student.setName("小强");
        student.setStudentNo("001");
        student.setBrithday(new Date());
        Session session = HibernateUtil.getSessionFactory().openSession();    //打开 session
        try {
            session.beginTransaction();    //开启 事务
            session.save(student);    //保存实体
            session.getTransaction().commit();    //提交事务
        } catch (Exception e) {
            session.getTransaction().rollback();    //事务回滚
            System.out.println(e);
        } finally {
            session.close();    //关闭 session
        }
    }
}

Hibernate相关jar

        1、将下载的 hibernate 压缩包解压,然后将 lib \ required 文件夹下的 jar 加入到项目中

        2、将 project \ etc 文件夹下的 log4j.properties 文件加入到 src 下

        3、将 mysql-jdbc 驱动包加入到项目中。下载

运行测试类

        运行 StudentTest 的 main 方法。

        控制抬信息:

        ........

        Hibernate: drop table if exists studentinfo
        Hibernate: create table studentinfo (id integer not null auto_increment, brithday date, name varchar(255), studentNo varchar(255), primary key (id))
                2013-6-2 14:50:08 org.hibernate.tool.hbm2ddl.SchemaExport execute
        INFO: HHH000230: Schema export complete
        Hibernate: insert into studentinfo (brithday, name, studentNo) values (?, ?, ?)

        Hibernate 帮我们生成了创建表 studentinfo 的 sql,并插入了数据。

        查看数据库: SELECT * FROM studentinfo

       

        OK,hibernate 的第一个小例子运行成功。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值