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

谁借莪1个温暖的怀抱¢ 2022-07-28 01:51 200阅读 0赞

  实体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启动时会自动扫描该目录下的配置文件),并配置如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <datasources>
  3. <local-tx-datasource>
  4. <jndi-name>MySqlDS</jndi-name>
  5. <connection-url>jdbc:mysql://localhost:3306/ejb3</connection-url>
  6. <driver-class>com.mysql.jdbc.Driver</driver-class>
  7. <user-name>root</user-name>
  8. <password>123456</password>
  9. <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
  10. <metadata>
  11. <type-mapping>mySQL</type-mapping>
  12. </metadata>
  13. </local-tx-datasource>
  14. </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

这里写图片描述

  配置如下内容:

  1. <persistence-unit name="ejb_entitybean">
  2. <jta-data-source>java:/MySqlDS</jta-data-source>
  3. <properties>
  4. <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
  5. <property name="hibernate.hbm2ddl.auto" value="update" />
  6. </properties>
  7. </persistence-unit>

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

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

  1. import java.io.Serializable;
  2. import javax.persistence.Entity;
  3. import javax.persistence.GeneratedValue;
  4. import javax.persistence.Id;
  5. @Entity
  6. public class User implements Serializable{
  7. @Id
  8. @GeneratedValue
  9. private int id;
  10. private String name;
  11. public int getId() {
  12. return id;
  13. }
  14. public void setId(int id) {
  15. this.id = id;
  16. }
  17. public String getName() {
  18. return name;
  19. }
  20. public void setName(String name) {
  21. this.name = name;
  22. }
  23. }

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

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

这里写图片描述

  
操作实体Bean

  创建一个无状态会话Bean

  1. import javax.ejb.Remote;
  2. import javax.ejb.Stateless;
  3. import javax.persistence.EntityManager;
  4. import javax.persistence.PersistenceContext;
  5. @Stateless
  6. @Remote
  7. public class UserManagerBean implements UserManager{
  8. @PersistenceContext
  9. private EntityManager entityManager;
  10. @Override
  11. public void addUser(String name){
  12. User user=new User();
  13. user.setName(name);
  14. entityManager.persist(user);
  15. }
  16. }

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

  客户端测试:

  1. public class JPAClient {
  2. public static void main(String[] args){
  3. InitialContext cxt;
  4. UserManager userManager;
  5. try {
  6. cxt = new InitialContext();
  7. userManager=(UserManager)cxt.lookup("UserManagerBean/remote");
  8. for(int i=0;i<5;i++){
  9. userManager.addUser("Danny"+i);
  10. }
  11. } catch (NamingException e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. }

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

这里写图片描述


【 转载请注明出处——胡玉洋《【EJB学习笔记】——实体Bean》】

发表评论

表情:
评论列表 (有 0 条评论,200人围观)

还没有评论,来说两句吧...

相关阅读

    相关 EJB笔记

    1、 如果ejb和他注入的ejb在同一个jar,可以这样使用 @EJB(name="HelloImpl") IHello hello; 如果不在同一个jar,需