MyEclipse8.5配置Hibernate

      Hibernate和JDBC比较一下,同样都是数据库中间件(DM,Database Middleware),JDBC利用SQL语言操作的是数据,而Hibernate则是利用自己的查询语言Hibernate Query Language(HQL虽然底层还是要转换成sql语言)操作的是持久化对象。Hibernate是ORM(Object/Relation Mapping,对象关系映射)机制的最典型技术代表。

好了,下面列出在MyEclipse8.5中配置最基本的Hibernate的过程:

1,工具栏File->new->Java Project->工程命名,我这里是HibernateTest,其他都默认就好了->Finish

2,紧接着把数据库驱动加入classpath,方法前面已经提到了(改正,这一步不用了!)

3, 在左侧Package Explorer里面,工程名上鼠标右键->MyEclipse->Add Hibernate Capabilities->弹出的对话框设置都用默认就好了,点击next->再next->到了设置连接的数据库参数的页面(如下图)

这时由于前面MyEclipse已经和数据库连接进行过设置,在DB Driver的下拉列表中就有com.microsoft.sqlserver.jdbc.SQLServerDriver了,点击后除了密码都已经填好了,输入密码后,下一个页面时选择把自动生成的HibernateSessionFactory.java文件放在哪个包里,这里新建一个com包就好了,点击Finish就设置好了。

然后就会发现已经自动生成了hibernate.cfg.xml,同时com包里也已经有HibernateSessionFactory.java了。接下来需要人工完成的工作就是编写持久化类和相应的对象关系映射文件(*.hbm.xml文件)。这里还是应用的上两篇日志用的数据库,里面只有一张表test_account,有三个属性列account varchar(50), password varchar(50), balance float。其中主键是account。特别要注意的是持久化类和它相应的对象关系映射文件一定要放在一个包里面。包结构如下图:


表test_account对应的持久化类Test_Account.java,和对应的Test_Account.hbm.xml文件放在persistent包里,test包里面的Maintest.java是一个包含main函数的测试文件,里面调用hibernate的session进行相关的逻辑处理。

好了,列出代码,首先是持久化类Test_Account.java(里面一定要有一个无参的构造函数):

public class Test_Account {

private String account;
private String password;
private double balance;

public Test_Account() {}//无参构造函数

public String getAccount() {
   return account;
}
public void setAccount(String account) {
   this.account = account;
}
public String getPassword() {
   return password;
}
public void setPassword(String password) {
   this.password = password;
}
public double getBalance() {
   return balance;
}
public void setBalance(double balance) {
   this.balance = balance;
}

}
然后是Test_Account.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="persistent.Test_Account"
           table="test_account"
           schema="dbo" lazy="false" > 
        <id name="account" column="account" type="java.lang.String">
          <generator class="assigned"></generator> <!--由于是自定义主键,用assigned就可以了-->
        </id>   <!--id设置主键对应-->
        <property name="password" type="java.lang.String" 
                  column="password" not-null="true" length="50" /> 
        <property name="balance" type="java.lang.Double"
                  column="balance" not-null="true"/> 
    </class>
</hibernate-mapping>


接着是Maintest.java文件代码(首先从sessionfactory里得到一个session,然后利用session的方法进行数据库的基本插入,删除,修改,查询,执行HQL),同时还要提一下,SessionFactory对象是线程安全的,但是每生成一个对象都会占用大量资源,它可以源源不断参数session实例,session对象不是线程安全的,所以最好只创建一个session进行数据库操作,同时记得要关闭。

public class Maintest {

public static void main(String[] args) {
   new Maintest().execut();
   System.out.println("success");
}
    private void execut()
    {
    Session session=(Session) HibernateSessionFactory.getSession();
    Test_Account insertaccout=new Test_Account();
    insertaccout.setAccount("88888");
    insertaccout.setPassword("1234656");
    insertaccout.setBalance(222.31);
    session.beginTransaction();
    
    Test_Account ta2=(Test_Account)session.load(Test_Account.class, "110110");
    session.delete(ta2);//删除记录
     
    session.save(insertaccout);//插入记录
    
    Test_Account med=(Test_Account)session.load(Test_Account.class, "911911");
    med.setPassword("tiananmen");
    session.update(med);//更新记录
    
    ArrayList<Object> result=(ArrayList)session.createQuery("from Test_Account").list();//查询所有记录
    for(int i=0;i<result.size();i++)
    {
       Test_Account temp=(Test_Account)result.get(i);
       System.out.println(""+temp.getAccount()+"   "+temp.getPassword()+"    "+temp.getBalance());
    }
    
    System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
    String hql="from Test_Account tempp where tempp.account in ('51241','22368')";//where条件用法和sql差不多
    ArrayList result2=(ArrayList)session.createQuery(hql).list();
    for(int i=0;i<result2.size();i++)
    {
       Test_Account temp=(Test_Account)result2.get(i);
       System.out.println(""+temp.getAccount()+"   "+temp.getPassword()+"    "+temp.getBalance());
    }
    
    System.out.println("#################################################################");
    hql="select new map(tempp,tempp.account,tempp.balance) from Test_Account tempp";//select new list也行
    ArrayList result3=(ArrayList)session.createQuery(hql).list();
    for(int i=0;i<result3.size();i++)
    {
       HashMap row=(HashMap)result3.get(i);
       Test_Account tt=(Test_Account)row.get("0");
       System.out.println(tt.getAccount()+"&&&&");//键 是0,1,2……字符串
       System.out.println(row.get("1"));
       System.out.println(row.get("2"));
    }
    System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
    hql="select new list(tempp.account,tempp.balance) from Test_Account tempp where tempp.account in ('51241','22368')";
    ArrayList result4=(ArrayList)session.createQuery(hql).list();
    for(int i=0;i<result4.size();i++)
    {
       List row=(List)result4.get(i);
       System.out.println(row.get(0));
       System.out.println(row.get(1));
    }
    
    session.getTransaction().commit();
    session.close();
    }
}

好了,最后是最重要的hibernate.cfg.xml文件(现在只是在里面加了一句<mapping resource="persistent/Test_Account.hbm.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="dialect">org.hibernate.dialect.SQLServerDialect</property>
        <property name="connection.url">jdbc:sqlserver://localhost:1433;DatabaseName=TestDB</property>

                                                          <!--这里把localhost换成寝室另一台电脑的ip,测试也是成功的-->
        <property name="connection.username">sa</property>
        <property name="connection.password">1234</property>
        <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
        <property name="myeclipse.connection.profile">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
    <mapping resource="persistent/Test_Account.hbm.xml"/> <!-- 声明映射资源 -->
    </session-factory>

</hibernate-configuration>

这里提到的配置过程都是Hibernate的最基本配置,很多复杂的设置和应用都有待学习……

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值