JBoss Hibernate
配置与应用
本文以一个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目录下,接着修改它的内容,我修改的如下:
在进行开发之前,需要首先获得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 >
< 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> render_code(); </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 >
< 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> render_code(); </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;
<script> render_code(); </script>
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;
}
}
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;
}
}
然后将它编译成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 >
<! 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> render_code(); </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");
}
% >
< %
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> render_code(); </script>好了大功告成,我们来启动一下jboss,运行run.bat
打开http://localhost:8080/login.jsp看一下,是不是显示Login success 啊