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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:   实体Bean跟普通的Java实体并无多大差异,在EJB中的实体Bean用@Entity注解定义。  实体Bean开发步骤如下:

  实体Bean跟普通的Java实体并无多大差异,在EJB中的实体Bean用@Entity注解定义。


  实体Bean开发步骤如下:


JBoss配置




配置JBoss数据源


  这里用的数据库为mysql

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


24.png


   **添加数据源配置文件**

  在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:


25.png


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


26.png


  配置如下内容:

<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表,详情为:


27.png


   **操作实体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表中:


28.png



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
机器学习/深度学习 监控 TensorFlow
数据分割
在机器学习和数据分析中,数据分割是指将可用数据集划分为训练集、验证集和测试集等子集的过程。这种分割的目的是为了评估和验证机器学习模型的性能,并对其进行调优和泛化能力的评估。下面我将解释为什么要进行数据分割,以及如何进行数据分割,并提供一个简单的示例。
544 0
Postman - 快速分享接口
Postman - 快速分享接口
1959 0
Postman - 快速分享接口
|
Docker 容器
Docker-配置连接多个镜像仓库
  之前介绍了如何使用docker连接私有镜像仓库,最近碰到一个问题,需要使用多个不同的镜像仓库,具体做法如下: 如果有按照我之前那一篇操作对【/usr/lib/systemd/system/docker.service】文件做了修改的话,需要先还原。
4620 0
|
11月前
|
机器学习/深度学习 人工智能 量子技术
【量子计算从入门到精通】--量子计算的介绍
【量子计算从入门到精通】--量子计算的介绍
257 1
|
11月前
|
敏捷开发 测试技术
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
文章详细介绍了软件开发过程中的不同开发模型(瀑布、螺旋、Scrum)和测试模型(V模型、W模型),以及增量和迭代的概念,最后阐述了敏捷思想及其在敏捷开发(如Scrum)中的应用。
1106 0
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
|
存储 人工智能 C语言
C语言程序设计核心详解 第六章 数组_一维数组_二维数组_字符数组详解
本章介绍了C语言中的数组概念及应用。数组是一种存储同一类型数据的线性结构,通过下标访问元素。一维数组定义需指定长度,如`int a[10]`,并遵循命名规则。数组元素初始化可使用 `{}`,多余初值补0,少则随机。二维数组扩展了维度,定义形式为`int a[3][4]`,按行优先顺序存储。字符数组用于存储字符串,初始化时需添加结束符`\0`。此外,介绍了字符串处理函数,如`strcat()`、`strcpy()`、`strcmp()` 和 `strlen()`,用于拼接、复制、比较和计算字符串长度。
416 4
|
11月前
|
SQL Java API
深入探索Java的持久化技术——JPA(Java Persistence API)
【10月更文挑战第10天】深入探索Java的持久化技术——JPA(Java Persistence API)
406 0
|
消息中间件 中间件 Kafka
测试中间件 - Kafka Tool 快速入门(一)
测试中间件 - Kafka Tool 快速入门(一)
568 94
测试中间件 - Kafka Tool 快速入门(一)
|
消息中间件 Java Kafka
基于事件驱动的微服务架构设计与实现
基于事件驱动的微服务架构设计与实现