??xml version="1.0" encoding="utf-8" standalone="yes"?>波多野结衣久草一区,精品女同一区二区三区在线观看,亚洲精品久久久久中文字幕欢迎你 http://www.aygfsteel.com/msmary/category/26453.html书山有\勤ؓ径,学v无苦作?/description>zh-cnWed, 10 Oct 2007 13:00:44 GMTWed, 10 Oct 2007 13:00:44 GMT60Hibernate包作用详?/title><link>http://www.aygfsteel.com/msmary/articles/151868.html</link><dc:creator>谭明</dc:creator><author>谭明</author><pubDate>Wed, 10 Oct 2007 12:55:00 GMT</pubDate><guid>http://www.aygfsteel.com/msmary/articles/151868.html</guid><wfw:comment>http://www.aygfsteel.com/msmary/comments/151868.html</wfw:comment><comments>http://www.aygfsteel.com/msmary/articles/151868.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/msmary/comments/commentRss/151868.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/msmary/services/trackbacks/151868.html</trackback:ping><description><![CDATA[<p><span style="font-family: 宋体">Hibernate一共包括了23个jar包,令hD~ؕ。本文将详细讲解Hibernate每个jar包的作用Q便于你在应用中Ҏ自己的需要进行取舍?/span></p> <p><span style="font-family: 宋体">  下蝲HibernateQ例?.0.3E_版本Q解压羃Q可以看C个hibernate2.jar和lib目录下有22个jar包:</span></p> <p><span style="font-family: 宋体">  hibernate2.jar:</span></p> <p><span style="font-family: 宋体">  Hibernate的库Q没有什么可说的Q必M用的jar?/span></p> <p><span style="font-family: 宋体">  cglib-asm.jar:</span></p> <p><span style="font-family: 宋体">  CGLIB库,Hibernate用它来实现PO字节码的动态生成,非常核心的库Q必M用的jar?/span></p> <p><span style="font-family: 宋体">  dom4j.jar:</span></p> <p><span style="font-family: 宋体">  dom4j是一个Java的XML APIQ类gjdomQ用来读写XML文g的。dom4j是一个非帔R怼U的Java XML APIQ具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的YӞ可以在SourceForge上找到它。在IBM developerWorks上面可以扑ֈ一文章,对主的Java XML APIq行的性能、功能和易用性的评测Qdom4j无论在那个方面都是非常出色的。我早在近两年之前开始用dom4jQ直到现在。如今你可以看到来多的Java软g都在使用dom4j来读写XMLQ特别值得一提的是连Sun的JAXM也在用dom4j。这是必M用的jar包,Hibernate用它来读写配|文件?/span></p> <p><span style="font-family: 宋体">  odmg.jar:</span></p> <p><span style="font-family: 宋体">  ODMG是一个ORM的规范,Hibernate实现了ODMG规范Q这是一个核心的库,必须使用的jar包?/span></p> <p><span style="font-family: 宋体">  commons-collections.jarQ?/span></p> <p><span style="font-family: 宋体">  Apache Commons包中的一个,包含了一些Apache开发的集合c,功能比java.util.*强大。必M用的jar包?/span></p> <p><span style="font-family: 宋体">  commons-beanutils.jarQ?/span></p> <p><span style="font-family: 宋体">  Apache Commons包中的一个,包含了一些Bean工具cȝ。必M用的jar包?/span></p> <p><span style="font-family: 宋体">  commons-lang.jar:</span></p> <p><span style="font-family: 宋体">  Apache Commons包中的一个,包含了一些数据类型工LQ是java.lang.*的扩展。必M用的jar包?/span></p> <p><span style="font-family: 宋体">  commons-logging.jar:</span></p> <p><span style="font-family: 宋体">  Apache Commons包中的一个,包含了日志功能,必须使用的jar包。这个包本n包含了一个Simple LoggerQ但是功能很弱。在q行的时候它会先在CLASSPATH找log4jQ如果有Q就使用log4jQ如果没有,找JDK1.4带的java.util.loggingQ如果也找不到就用Simple Logger。commons-logging.jar的出现是一个历史的的遗留的遗憾Q当初Apache极力游说Sun把log4j加入JDK1.4Q然而JDK1.4目组已经接近发布JDK1.4产品的时间了Q因此拒l了Apache的要求,使用自己的java.util.loggingQ这个包的功能比log4j差的很远Q性能也一般?/span></p> <p><span style="font-family: 宋体">  后来Apache开发出来了commons-logging.jar用来兼容两个logger。因此用commons-logging.jar写的logE序Q底层的Logger是可以切换的Q你可以选择log4jQjava.util.logging或者它自带的Simple Logger。不q我仍然强烈使用log4jQ因为log4j性能很高Qlog输出信息旉几乎{于System.outQ而处理一条logq_只需?us。你可以在Hibernate的src目录下找到Hibernate已经Z准备好了的log4j的配|文Ӟ你只需要到Apache |站M载log4j可以了。commons-logging.jar也是必须的jar包?/span></p> <p><span style="font-family: 宋体">  使用Hibernate必须的jar包就是以上的q几个,剩下的都是可选的?/span></p> <p><span style="font-family: 宋体">  ant.jar:</span></p> <p><span style="font-family: 宋体">  Ant~译工具的jar包,用来~译Hibernate源代码的。如果你不准备修改和~译Hibernate源代码,那么没有什么用Q可选的jar?/span></p> <p><span style="font-family: 宋体">  optional.jarQ?/span></p> <p><span style="font-family: 宋体">  Ant的一个辅助包?/span></p> <p><span style="font-family: 宋体">  c3p0.jarQ?/span></p> <p><span style="font-family: 宋体">  C3PO是一个数据库q接池,Hibernate可以配置Z用C3POq接池。如果你准备用这个连接池Q就需要这个jar包?/span></p> <p><span style="font-family: 宋体">  proxool.jarQ?/span></p> <p><span style="font-family: 宋体">  也是一个连接池Q同上?/span></p> <p><span style="font-family: 宋体">  commons-pool.jar, commons-dbcp.jar:</span></p> <p><span style="font-family: 宋体">  DBCP数据库连接池QApache的Jakartal织开发的QTomcat4的连接池也是DBCP?/span></p> <p><span style="font-family: 宋体">  实际上Hibernate自己也实C一个非帔R常简单的数据库连接池Q加上上?个,你实际上可以在Hibernate上选择4U不同的数据库连接池Q选择哪一个看个h的偏好,不过DBCP可能更通用一些。另外强调一点,如果在EJB中用HibernateQ一定要用App Server的连接池Q不要用以上4U连接池Q否则容器管理事务不起作用?/span></p> <p><span style="font-family: 宋体">  connector.jar:</span></p> <p><span style="font-family: 宋体">  JCA 规范Q如果你在App Server上把Hibernate配置为Connector的话Q就需要这个jar。不q实际上一般App Server肯定会带上这个包Q所以实际上是多余的包?/span></p> <p><span style="font-family: 宋体">  jaas.jar:</span></p> <p><span style="font-family: 宋体">  JAAS是用来进行权限验证的Q已l包含在JDK1.4里面了。所以实际上是多余的包?/span></p> <p><span style="font-family: 宋体">  jcs.jarQ?/span></p> <p><span style="font-family: 宋体">  如果你准备在Hibernate中用JCS的话Q那么必d括它Q否则就不用?/span></p> <p><span style="font-family: 宋体">  jdbc2_0-stdext.jar:</span></p> <p><span style="font-family: 宋体">  JDBC2.0的扩展包Q一般来说数据库q接池会用上它。不qApp Server都会带上Q所以也是多余的?/span></p> <p><span style="font-family: 宋体">  jta.jarQ?/span></p> <p><span style="font-family: 宋体">  JTA规范Q当Hibernate使用JTA的时候需要,不过App Server都会带上Q所以也是多余的?/span></p> <p><span style="font-family: 宋体">  junit.jar:</span></p> <p><span style="font-family: 宋体">  Junit包,当你q行Hibernate自带的测试代码的时候需要,否则׃用?/span></p> <p><span style="font-family: 宋体">  xalan.jar, xerces.jar, xml-apis.jar:</span></p> <p><span style="font-family: 宋体">  Xerces是XML解析器,Xalan是格式化器,xml-apis实际上是JAXP。一般App Server都会带上QJDK1.4也包含了解析器,不过不是XercesQ是CrimsonQ效率比较差Q不qHibernate用XML只不q是d配置文gQ性能没什么紧要的Q所以也是多余的?</span></p> <img src ="http://www.aygfsteel.com/msmary/aggbug/151868.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/msmary/" target="_blank">谭明</a> 2007-10-10 20:55 <a href="http://www.aygfsteel.com/msmary/articles/151868.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate的第一个一对多实例http://www.aygfsteel.com/msmary/articles/151867.html谭明谭明Wed, 10 Oct 2007 12:53:00 GMThttp://www.aygfsteel.com/msmary/articles/151867.htmlhttp://www.aygfsteel.com/msmary/comments/151867.htmlhttp://www.aygfsteel.com/msmary/articles/151867.html#Feedback0http://www.aygfsteel.com/msmary/comments/commentRss/151867.htmlhttp://www.aygfsteel.com/msmary/services/trackbacks/151867.html一?/span>数据库的建立Q用MySQLQ?/span>

create database if not exists `sampledb`;

use `sampledb`;

/*table structure for table `sampledb`.`personinfo` */

drop table if exists `sampledb`.`room`;

create table room (

 room_id int not null auto_increment,

 address varchar(32) not null default '',

 primary key (room_id)

) type=innodb;

create database if not exists `sampledb`;

use `sampledb`;

/*table structure for table `sampledb`.`personinfo` */

drop table if exists `sampledb`.`user`;

create table user (

 user_id int not null auto_increment,

 name varchar(16) not null default '',

 room_id int not null,

 index (room_id),

 foreign key (room_id) references room(room_id),

 primary key (user_id)

) type=innodb;

二、User.java

package com.tanm.test;

publicclass User {

    privatelongid;

    private String name;

    private Room room;

    publiclong getId() {

       returnid;

    }

    publicvoid setId(long id) {

       this.id = id;

    }

    public String getName() {

       returnname;

    }

    publicvoid setName(String name) {

       this.name = name;

    }

    public Room getRoom() {

       returnroom;

    }

    publicvoid setRoom(Room room) {

       this.room = room;

    }

}

三?span style="font-size: 10pt">User.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="com.tanm.test.User" table="user">

    <id name="id" column="user_id" type="long">

      <generator class="increment"/>

    </id>

    <property name="name" column="name" type="string" not-null="true" />

    <many-to-one name="room" column="room_id" class="com.tanm.test.Room" />

 </class>

</hibernate-mapping>

四、Room.java

package com.tanm.test;

import java.util.HashSet;

import java.util.Set;

publicclass Room {

    privatelongid;

    private String address;

    private Set users = new HashSet();

    public String getAddress() {

       returnaddress;

    }

    publicvoid setAddress(String address) {

       this.address = address;

    }

    publiclong getId() {

       returnid;

    }

    publicvoid setId(long id) {

       this.id = id;

    }

    public Set getUsers() {

       returnusers;

    }

    publicvoid setUsers(Set users) {

       this.users = users;

    }

}

五、Room.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="com.tanm.test.Room" table="room">

    <id name="id" column="room_id" unsaved-value="0">

      <generator class="increment"/>

    </id>

    <property name="address" column="address" type="string" not-null="true" />

    <set name="users" table="user" inverse="true" cascade="all">

       <key column="room_id"/>

       <one-to-many class="com.tanm.test.User"/>

    </set>

 </class>

</hibernate-mapping>

六、Test.java

package com.tanm.test;

import org.hibernate.*;

import org.hibernate.cfg.*;

publicclass Test {

    publicstaticvoid main(String[] args) throws HibernateException {

       SessionFactory sessionFactory = new Configuration().configure()

              .buildSessionFactory();

       Room room = new Room();

       room.setAddress("China_xi'an");

       User user1 = new User();

       user1.setName("111");

       User user2 = new User();

       user2.setName("222");

       user1.setRoom(room);

       user2.setRoom(room);

       room.getUsers().add(user1);

       room.getUsers().add(user2);

       Session session = sessionFactory.openSession();

       Transaction tx = session.beginTransaction();

       session.save(room);

       tx.commit();

       session.close();

       sessionFactory.close();

    }

}

成功q行后的l果Q?/span>

Hibernate: insert into room (address, room_id) values (?, ?)

Hibernate: insert into user (name, room_id, user_id) values (?, ?, ?)

Hibernate: insert into user (name, room_id, user_id) values (?, ?, ?)

谭明 2007-10-10 20:53 发表评论
]]>
一个完整的hibernate例子http://www.aygfsteel.com/msmary/articles/151866.html谭明谭明Wed, 10 Oct 2007 12:52:00 GMThttp://www.aygfsteel.com/msmary/articles/151866.htmlhttp://www.aygfsteel.com/msmary/comments/151866.htmlhttp://www.aygfsteel.com/msmary/articles/151866.html#Feedback0http://www.aygfsteel.com/msmary/comments/commentRss/151866.htmlhttp://www.aygfsteel.com/msmary/services/trackbacks/151866.html1 。徏立数据库

Database:mysql
drop database if exists SAMPLEDB;
create database hello;
use hello;

create table CUSTOMERS (
  ID int not null primary key,
  NAME varchar(15) not null,
  PASSWORD varchar(8) not null
);

2
。在eclipse 中新建工E?/span>hbtest

3
。在src中新?/span>package hbm

4
。新?/span>pojoc?/span>Customer

package hbm;

public class Customer {
    private int id;
    private String name;
    private String password;
    /**
     * @return Returns the id.
     */
    public int getId() {
        return id;
    }
    /**
     * @param id
     *            The id to set.
     */
    public void setId(int id) {
        this.id = id;
    }
    /**
     * @return Returns the name.
     */
    public String getName() {
        return name;
    }
    /**
     * @param name
     *            The name to set.
     */
    public void setName(String name) {
        this.name = name;
    }
    /**
     * @return Returns the password.
     */
    public String getPassword() {
        return password;
    }
    /**
     * @param password
     *            The password to set.
     */
    public void setPassword(String password) {
        this.password = password;
    }
    //constructor
    public Customer() {
    }

}


5
。?/span>myeclipse插g建立hibernate.cfg.xml   位于src目录?/span>
<?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">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

<session-factory> 

<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">
jdbc:mysql://127.0.0.1:3306/hello</property>
    <property name="myeclipse.connection.profile">
hbmysql</property>

<property name="connection.username">root</property>
    <property name="connection.password">
123</property>
    <mapping resource="hbm/Customer.hbm.xml" />

</session-factory>

</hibernate-configuration>


6
。在hbm package内新?/span>Customer.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">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-mapping>
<class name="hbm.Customer" table="CUSTOMERS">
<id name="id" column="ID" type="int">
<generator class="increment"/>
</id>
<property name="name" column="NAME" type="string" not-null="true"/>
<property name="password" column="PASSWORD" type="string" not-null="true"/>
</class>

</hibernate-mapping>


7
。?/span>hibernate操作数据?/span>
package hbm;

import org.hibernate.*;
import org.hibernate.cfg.*;
import java.util.Iterator;
import java.util.List;

public class Hbmain {

    public static SessionFactory sessionFactory;//
数据存储?/span>
    static {
        try {
            Configuration config = new Configuration().configure();
            sessionFactory = config.buildSessionFactory();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /*
     *
一?/span>customer对象存入database
     * @Customer customer Object
     */
    public void saveCustomer(Customer ct) {
        Session session = sessionFactory.openSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            session.save(ct);
            tx.commit();
        } catch (Exception e) {
            tx.rollback();
            e.printStackTrace();
        } finally {
            session.close();
        }
    }

    /*
     *
查找所有的customer object
     */
    public void findAll() {
        Session session = sessionFactory.openSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            List customers = session.createQuery(
                    "from Customer as c order by c.name asc").list();
            Iterator it = customers.iterator();
            System.out.println("append:"+customers.size());
            while(it.hasNext())
            {
                Customer c = (Customer)it.next();
                System.out.println("ID:" + c.getId());
                System.out.println("Name:" + c.getName());
                System.out.println("Pass:" + c.getPassword());
            }
            tx.commit();
        } catch (Exception e) {
            tx.rollback();
        } finally {
            session.close();
        }

    }

    /*
     *
修改customer Name
     * @name
     */
    public void loadUpdate(int customer_id, String name) {
        Session session = sessionFactory.openSession();
        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            Customer c = (Customer) session.load(Customer.class, customer_id);
            c.setName(name);
            tx.commit();

        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            e.printStackTrace();

        } finally {
            session.close();
        }

    }
  
    /*
     *
试以上的方?/span>
     * save() find() update()
     */
   
    public void test()
    {
        Customer ct = new Customer();
        //ct.setId(5);
        ct.setName("buaa");
        ct.setPassword("5768");
        this.saveCustomer(ct);
        this.findAll();
        this.loadUpdate(ct.getId(),"phop");
    }
   
   
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Hbmain hb = new Hbmain();
        hb.test();
        sessionFactory.close();

    }

}

初学hibernate遇到的几个问题的解决

参考书是孙卫琴?lt;_NHibernate>

hibernate 3 + mysql 5.0

书上的例子第2?初始?hibernate Configuration实例

代码如下Q?/span>

Configuration config = new Configuration();

config.addClass("Customer.class");

SessionFactory sessionfactory = config.buildSessionFactory();

配置文g?hibernate.properties

q行出错 Q提CZؓ

org.hibernate.HibernateException: database product name cannot be null

昄是配|文件的问题

我用的配|文件是 hibernate.cfg.xml

修改Z下代?成功q行

Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();

原因:使用了xm作ؓ配置文gQ而没有选择properties文g,应该使用new Configuration().config();

书上例子W六章一对多映射

customer.hbm.xml ?/span>

原代码ؓ

<hibernate-mapping>
    <class name="demo1.Customer" table="CUSTOMERS">
        <id name="id" type="long" column="ID">
            <generator class="increment" />
        </id>
        <property name="name" type="string">
            <column name="NAME" length="15" />
        </property>
    </class>
</hibernate-mapping>

此时执行其Business.java?/span>

Customer customer = (Customer) session.load(Customer.class,
                    new Long(customer_id));

出现如下错误

1 Exception in thread "main" java.lang.NullPointerException
2  at org.hibernate.tuple.AbstractTuplizer.createProxy(AbstractTuplizer.java:249)
3  at org.hibernate.persister.entity.BasicEntityPersister.createProxy(BasicEntityPersister.java:2831)
4  at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:218)
5  at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:163)
6  at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:79)
7  at org.hibernate.impl.SessionImpl.load(SessionImpl.java:603)
8  at org.hibernate.impl.SessionImpl.load(SessionImpl.java:596)

修改?/span>

<hibernate-mapping default-lazy="false">
<class name="demo1.Customer" table="CUSTOMERS">
        <id name="id" type="long" column="ID">
            <generator class="increment" />
        </id>
        <property name="name" type="string">
            <column name="NAME" length="15" />
        </property>
    </class>
</hibernate-mapping>

问题解决

原因在于Q?Hibernate 3.0 与Hibernate2.1的源代码是不兼容?br /> 在Hibernate2.1中,lazy属性的默认gؓ“false”Q而在Hibernate3.0中,lazy属性的默认gؓ“true”?/span>



谭明 2007-10-10 20:52 发表评论
]]>
վ֩ģ壺 ʢ| | | | Ǹ| | ƽ| | Ͻ| | | | | | | ɽ| | | ɽ| | ˮ| | | | κ| Ӵ| | | ϳ| ľ| | | Ӣ| ɽ| | ̨| ̨| ƽ| Զ| | ̨|