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


  实体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》

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值