您的位置:首页 > 其它

【EJB学习笔记】——实体Bean

2016-03-29 22:13 288 查看
  实体Bean跟普通的Java实体并无多大差异,在EJB中的实体Bean用@Entity注解定义。

  实体Bean开发步骤如下:

JBoss配置

配置JBoss数据源

  这里用的数据库为mysql

  拷贝数据库驱动(mysql驱动)到JBoss的server\default\lib目录下



  

添加数据源配置文件

  在JBoss的docs\examples\jca目录下有各种数据库的配置文件,这里把mysql-ds.xml拷贝到server\default\deploy目录下(JBoss启动时会自动扫描该目录下的配置文件),并配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/ejb3</connection-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>


  上述配置很容易理解,
<jndi-name>
JNDI名称 ,
<connection-url>
数据库名称,
<user-name>
用户名,
<password>
密码……

  如果JBoss需要再添加数据库,则在
<datasources></datasources>
中再添加一个
<local-tx-datasource></local-tx-datasource>
配置即可。

创建含有实体Bean的EJB项目

建立支持JPA的EJB项目

  EJB中的实体Bean是用JPA实现的,所以在new—EJB Project时,一定要在Configuration下点击Modify,在Project Facet下面选中JPA:



  后面的默认即可,创建完成后,会在META-INF文件夹下生成一个persistence.xml配置文件,类似于Hibernate中的hibernate.cfg.xml



  配置如下内容:

<persistence-unit name="ejb_entitybean">
<jta-data-source>java:/MySqlDS</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>


  上面的MySqlDS就是mysql-ds.xml中配置的jndi-name。

  编写实体类User.java,注解映射规则:

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class User implements Serializable{
@Id
@GeneratedValue
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}


  @Entity表名该类时一个实体Bean,@ID标记的是生成表后的主键。在Hibernate中,如果某些字段不做说明则默认不会映射到数据库,EJB的JPA刚好相反,一个实体的某些字段不需要定义,默认会映射到数据库中,如果某个字段标明了@Transient注解,则不会映射到数据库中。@GeneratedValue表示自增长ID生成策略,相当于Hibernate中的native主键生成策略。

  部署该EJB项目后,可以在数据库中发现生成了user表,详情为:



  

操作实体Bean

  创建一个无状态会话Bean

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
@Remote
public class UserManagerBean implements UserManager{
@PersistenceContext
private EntityManager entityManager;

@Override
public void addUser(String name){
User user=new User();
user.setName(name);
entityManager.persist(user);
}
}


  在会话Bean中,需要用@PersistenceContext来注入javax.persistence.EntityManager,EntityManager

  客户端测试:

public class JPAClient {
public static void  main(String[] args){
InitialContext cxt;
UserManager userManager;
try {
cxt = new InitialContext();
userManager=(UserManager)cxt.lookup("UserManagerBean/remote");
for(int i=0;i<5;i++){
userManager.addUser("Danny"+i);
}
} catch (NamingException e) {
e.printStackTrace();
}
}
}


  执行结果,数据被成功插入到user表中:



【 转载请注明出处——胡玉洋《【EJB学习笔记】——实体Bean》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息