第十九天 慵懒的投射在JDBC上的暖阳 —Hibernate的使用(一)

来源:互联网 发布:steam 汉化 知乎 编辑:程序博客网 时间:2024/04/28 16:12

        5月29日,多云。“谢却海棠飞尽絮,困人天气日初长”

     大多数架构,都是不同乏味平淡概念的组合碰撞产生的裂变性奇观。若以人情世故来看乏味概念的相逢,有的是让人叫绝的天作之合,有的是叫人动容的邂逅偶遇,有的是令人击节的相见恨晚。当Java类遇到了数据库表,产生了Hibernate,极大地缩短了处理SQL和JDBC上的开发时间。

       下面,给出hibernate 3.6.10和hibernate 4.3.5两个版本的入门实例,看看这个蛰伏在数据库背后的庐山真面目。

为什么用这两个版本,hibernate 3.6.10是目前hibernate 3.X的最后版本,hibernate 4.3.5目前最新版本。

        1、下载Hibernate

      hibernate 3.6.10的下载地址:http://sourceforge.net/projects/hibernate/files/hibernate3/

      hibernate 4.3.5的下载地址:http://sourceforge.net/projects/hibernate/files/hibernate4/4.3.5.Final/hibernate-release-4.3.5.Final.zip/download

      MySQL的jdbc驱动jar包。下载地址:http://dev.mysql.com/downloads/connector/j/5.0.html  

       2、建立Java Project( 使用hibernate 3.6.10

         使用Eclipse新建一个名为HibernateApp01的工程,把下载的hibernate-distribution-3.6.10.Final-dist.zip解压。Add to Build Path—将如下依赖的jar包加入工程依赖中,包括:

       hibernate-distribution-3.6.10.Final\hibernate3.jar      

         hibernate-distribution-3.6.10.Final\lib\jpa\hibernate-jpa-2.0-api-1.0.1.Final

       hibernate-distribution-3.6.10.Final\lib\required下的所有jar包

       mysql-connector-java-5.0.8\mysql-connector-java-5.0.8-bin.jar

      一股脑的加入这么多依赖包,是为了避免编译一下子出太多错误,影响情绪可怜

       3、创建MySQL数据库

       创建名为hib的数据库,并用如下SQL创建userinfo表;            

/*MySQL Data TransferSource Host: 127.0.0.1Source Database: hibTarget Host: 127.0.0.1Target Database: hibDate: 2014/5/30 22:39:02*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for userinfo-- ----------------------------CREATE TABLE `userinfo` (  `id` int(11) NOT NULL auto_increment,  `username` varchar(100) default '',  `password` varchar(100) default '',  PRIMARY KEY  (`id`)) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;-- ------------------------------ Records -- ----------------------------
        4、创建POJO类UserInfo

package edu.eurasia.hib;public class UserInfo {private int id;private String username;private String password;public int getId() {return id;}public void setId(int id) {this.id = id;}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;}}
     5、编写对象关系映射文件UserInfo.hbm.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping><!--类和表之间的关联-->    <class name="edu.eurasia.hib.UserInfo" table="userinfo">    <!--类对象的主键和表的主键的关联-->        <id name="id" type="integer">            <column name="id" />             <!--指明主键的自增长类型-->            <generator class="identity"/>        </id>        <!--以下为普通字段的关联-->        <property name="username" type="string">            <column name="username" length="100" />        </property>        <property name="password" type="string">            <column name="password" length="100" />        </property>            </class>    </hibernate-mapping>

              该文件存放的是对象关系映射的逻辑,包括表和字段的对应关系。当操作对象时,该文件通过Java反射机制产生的方法,会把对象的方法转换为关系的方法。

        6、添加hibernate.cfg.xml配置文件

<?xml version='1.0' encoding='gb2312'?><!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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><!--配置数据库网络连接的url--><property name="hibernate.connection.url">jdbc:mysql://localhost/hib</property><!--配置数据库网络连接的用户名,默认一般为root--><property name="hibernate.connection.username">root</property><!--配置数据库网络连接的密码--><property name="hibernate.connection.password">root</property><!--配置数据库网络连接池的大小--><property name="hibernate.connection.pool.size">20</property><!--后台是否显示sql,开发时为true,运行时为false--><property name="hibernate.show_sql">true</property><!-- 设置JDBC的隔离级别--><property name="hibernate.connection.isolation">2</property><property name="hibernate.format_sql">true</property><property name="jdbc.fetch_size">50</property><property name="jdbc.batch_size">25</property><property name="jdbc.use_scrollable_resultset">false</property><property name="connection.useUnicode">true</property><!--编码方式,最好是utf-8,用gb2312有的字符不全--><property name="connection.characterEncoding">UTF-8</property><!--数据库方言,每个数据库都有方言,hibernate已经为大多数数据库指明了方言--><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><mapping resource="edu/eurasia/hib/UserInfo.hbm.xml" /></session-factory></hibernate-configuration>

        该文件为核心文件,初学者尽量不要改变其名称。

        7、建立测试类HibTest.java

package edu.eurasia.hib;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;public class HibTest {public static void main(String[] args) {SessionFactory sessions = new Configuration().configure().buildSessionFactory();Session session = sessions.openSession();Transaction tx = null;try {// 开始事务tx = session.beginTransaction();// 给对象设定值UserInfo u = new UserInfo();u.setUsername("张大千");u.setPassword("123456");System.out.println("开始插入数据到数据库……");// 保存数据到数据库session.save(u);// 结束事务tx.commit();tx = null;System.out.println("恭喜你,第一个hibernate程序运行成功!");} catch (HibernateException e) {e.printStackTrace();if (tx != null) {tx.rollback();}} finally {session.close();}}}

         8、运行结果

       查看数据库userinfo表中已经增加一条记录。

       工程结构图如下:

      


        小提示:

       xml文件自动提示功能,如果UserInfo.hbm.xmlhibernate.cfg.xml不能自动提示时,按如下操作:

        (1)打开方式不正确,在xml文件上点右键-->openWith-->选择XML Editor就可以了。

       (2)将项目中用到的 hibernate3.jar 解压缩,找到解压缩后的 org 文件下的 hibernate 文件下的 hibernate-mapping-3.0.dtd 文件。
      (3)eclipse -> Window -> Preferences ->  XML -> XML Catalog,选择 XML Catalog Entries 的 Add... 按钮,在弹出的 Add XML Catalog Entry 对话框里,Location 里选择第二步里得到的 hibernate-mapping-3.0.dtd,Key Type 选择 URI,Key 里输入XML文件里得到的http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd。OK。hibernate-configuration-3.0.dtd同理。

          



0 0
原创粉丝点击