原文: http://www.iteye.com/topic/68868
JBoss Hibernate 配置與應用
作者:蕭紅葉 2007年4月4日
本文以一個jboss_hibernate爲例介紹怎麼把hibernate部署成一個jboss的service,然後用hibernate 去操作數據庫。
配置開發環境
在進行開發之前,需要首先獲得JBoss、MySQL、相應數據庫的JDBC驅動類庫。JBoss可以從www.jboss.org中下載,MySQL 從www.mysql.org 下載
解壓jboss到一個文件夾,我們把mysql的jdbc驅動複製到jboss-4.2.0.CR1\server\default\lib下
然後我們配置一個mysql的數據源,從jboss-4.2.0.CR1\docs\examples\jca目錄下複製一份mysql-ds.xml到jboss-4.2.0.CR1\server\default\deploy目錄下,接着修改它的內容,我修改的如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <datasources>
- <local-tx-datasource>
- <jndi-name>MySqlDS</jndi-name> //jndi名字
- <use-java-context>false</use-java-context>
- <connection-url>jdbc:mysql://10.16.175.137:3306/test</connection-url> //URL地址
- <driver-class>com.mysql.jdbc.Driver</driver-class> //驅動
- <user-name>root</user-name> //用戶名
- <password>123456</password> //密碼
- <exception-sorter-class-name>
- org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
- </exception-sorter-class-name>
- <metadata>
- <type-mapping>mySQL</type-mapping>
- </metadata>
- </local-tx-datasource>
- </datasources>
<script></script>
這樣我們的mysql數據源就配置好了,接下來我們來做一個jboss_hibernate.har文件
進入到jboss-4.2.0.CR1\jboss-4.2.0.CR1\server\default\deploy 新建一個jboss_hibernate.har文件夾,該目錄下放的將是你的POJO 文件和對應的.hbm.xml文件以及jboss-service.xml文件。
在jboss_hibernate.har目錄新建一個文件夾META-INF,在該目錄下我們來寫一個jboss-service.xml文件,代碼如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <server>
- <mbean code="org.jboss.hibernate.jmx.Hibernate" name="jboss.har:service=Hibernate">
- <attribute name="DatasourceName">MySqlDS</attribute> //數據源名字
- <attribute name="Dialect">org.hibernate.dialect.MySQLDialect</attribute> //對應hibernate的Dialect
- <attribute name="SessionFactoryName">java:/hibernate/SessionFactory</attribute> //sessionFactory的jndi名字
- <attribute name="ShowSqlEnabled">true</attribute> //在控制檯輸出sql語句
- <attribute name="ScanForMappingsEnabled">true</attribute> //自動搜索mapping文件
- </mbean>
- </server>
<script></script>
如果有多個數據庫,你可以建多個數據源,然後在jboss-service.xml文件裏寫上多個mbean,我是這樣做的,呵呵,不知道有沒有更好的辦法
接着我們來寫我們的hibernate 文件
在jboss-4.2.0.CR1\jboss-4.2.0.CR1\server\default\deploy\jboss_hibernae.har\目錄下新建文件夾org.xredleaf,我們寫一個對應數據庫的User.java文件:
- package org.xredleaf;
- import java.io.Serializable;
- public class User implements Serializable
- {
- private String id;
- private String name;
- private int age;
- public User(){
- }
- public void setId(String id){
- this.id=id;
- }
- public String getId(){
- return id;
- }
- public void setName(String name){
- this.name=name;
- }
- public String getName(){
- return name;
- }
- public void setAge(int age){
- this.age=age;
- }
- public int getAge(){
- return age;
- }
- }
<script></script>
然後將它編譯成User.class文件
接着我們寫XML映射文件User.hbm.xml 文件:
- <?xml version='1.0' encoding='utf-8'?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <class name="org.xredleaf.User" table="user" >
- <id name="id" column="id" type="java.lang.String" >
- <generator class="uuid.hex"/>
- </id>
- <property name="name" column="name" type="java.lang.String" />
- <property name="age" column="age" type="java.lang.Integer" />
- </class>
- </hibernate-mapping>
<script></script>
好了,這樣我們的環境就搭好了!呵呵,喝口茶!
二、寫一個登錄頁面
進入到jboss-4.2.0.CR1\server\default\deploy\jboss-web.deployer\ROOT.war目錄下,新建一個login.jsp,文件如下:
- <%@page contentType="text/html;charset=GB2312" %>
- <%
- javax.naming.InitialContext ctx = new javax.naming.InitialContext();
- org.hibernate.SessionFactory factory = (org.hibernate.SessionFactory)ctx.lookup("java:/hibernate/SessionFactory"); //之前配置的sessionFactory的名字
- org.hibernate.Session se = factory.openSession();
- org.hibernate.Query query=se.createQuery("from org.xredleaf.User user where user.id='111' ");
- java.util.List results=query.list();
- java.util.ListIterator iterator=results.listIterator();
- if(iterator.hasNext()){
- org.xredleaf.User user=(org.xredleaf.User)iterator.next();
- session.setAttribute("user",user);
- out.print("Login success");
- }
- %>
<script></script>
好了大功告成,我們來啓動一下jboss,運行run.bat
打開http://localhost:8080/login.jsp看一下,是不是顯示Login success 啊