实体bean
它属于java持久化规范(JPA)里的技术,实体bean通过元数据在javaBean和数据库之间建立起映射关系,然后java程序员就可以随心所欲的使用面向对象的编程思想来操纵数据库。JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,目前实现的JPA规范的主流产品有Hibernate、TopLink和openJPA,在jboss中采用了Hibernate作为其持久化实现产品
添加JPA的配置文件persistence.xml
根据JPA规范的要求:在实体bean应用中,我们需要在应用的类路径下的META-INF目录加入持久化配置文件persistence.xml
<?xml version="1.0"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
</persistence>
新建java Project项目: EntityBean,将jboss\client目录下的jar包导入进工程
在src目录下,建立新目录:META-INF目录
在META-INF中,建立persistence.xml文件
-----------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<!-- 首先定义持久化单元(一堆实体类的集合) -->
<!-- JTA代表全局事务(默认),RESOURCE_LOCAL代表本地事务 -->
<persistence-unit name="ejbtest" transaction-type="JTA">
<!-- 指定要使用的数据源的JNDI名称 -->
<jta-data-source>java:OracleDS</jta-data-source>
</persistence-unit>
</persistence>
-----------------------------------------------------------------
找到配置好的数据源文件jboss\server\default\deploy\*-ds.xml
找到<jndi-name>定义的JNDI名称,复制它,拷贝到<jta-data-source>中
由于数据源发布到jboss中,jboss会给它默认命名空间为java:
所以完整写上java:OracleDS
如果不写java: 则jboss会默认去全局中寻找该JNDI名称,显然是找不到的
持久化单元配置完成
在持久化文件(persistence.xml)中可以配置多个持久化单元
之后开发实体bean,查看数据库表person,有两个字段:id和name
其中id是主键,采用序列自增;name为varchar2(20) not null
建立与person表映射的javaBean,Person类(com.jboss.bean包)
采用注解方式映射的开发效率要比XML配置文件效率要高
如果javaBean中没有指定@Id 则运行是会报错
当应用移植数据库时,@GeneratedValue(strategy=GenerationType.AUTO),默认也是auto
设置name属性为length=20,nullable=false
远程访问EJB时,需要实现序列化接口
比较两个Person对象是否相等,需要用主键id判断,重写equals、hashCode()方法
Person类会有一个警告,没有生成版本ID号
点击感叹号,选择第二项:Add Generated serial version ID
当这个实体bean开发完后,需要对它进行添加增删改查操作
要完成对实体bean的增删改查,要用到EntityManager管理这个实体bean对象
EntityManager能应用在 消息bean和会话bean
新建包:com.jboss.service 新建接口PersonService
在接口中定义,增删改查 方法 (5个方法)
新建包:com.jboss.service.impl 新建实现类PersonServiceBean
在该类中实现PersonService方法
首先把这个bean变成一个无状态会话bean
然后把接口定义为远程接口
通过@PersistenceContext注解,注入实体管理器EntityManager对象
@PersistenceContext注解,unitName属性,用于指定持久化单元(persistence.xml中定义的)
当persistence.xml中,配置的持久化单元只有一个时,这里可以省略不写unitName属性
--------------------
Person getPerson(Integer person_id)方法实现:
通过em.find(实体类.class , @Id的字段)
会根据给定的 @Id的字段 获取实体类对象
em.find(Person.class,person_id)
当数据库没有找到person_id对应的对象时,则返回null
List<Person> getPersons()方法实现:
em.createQuery("使用EJBQL语句查询(对象查询)").getResultList();
对象和对象的属性区分大小写
getResultList() 返回一个List
此时会有一个警告,由于定义的是返回泛型,而getResultList()返回的是List
在EJBQL语句中,已知道是查询的Person对象,此时可以用@SuppressWarnings("unchecked")
消除警告
void save(Person person)方法实现:
em.persist(person); 进行保存,对象应该处于新建状态的实体
在实体bean中有4种状态:
1.新建状态
2.托管状态
3.游离状态
4.删除状态
调用 em.persist(person); 时会往数据库添加一条新的记录
是把这个对象里的属性值,保存到对应的数据表的对应字段,而不是保存整个对象
void update(Person person)方法实现:
调用em.merge(person);
调用前有一个前提:当person处于游离状态时,才可用
如果这个实体bean(person) 处于托管状态,并且和一个事务关联了以后,不需要调用这个方法
直接调用托管状态的set方法即可修改,而无须调用merge()
void delete(Integer person_id)方法实现:
em.remove(); 这个实体bean对象处于托管状态下才能删
采用em.find(Person.class,person_id) 方法得到一个person实体bean
再把person实体bean传入em.remove()是可以的
这里采用em.remove(em.getReference(Person.class,person_id))
getReference(Person.class,person_id)返回的是一个代理对象 (延迟加载)
也就是调用完这个方法后,不会立即发送数据装载动作,访问它的属性时,才会进行数据装载
此时不需要状态数据,只是删除这个对象,所以得到一个托管的实体bean对象就OK了
所以采用getReference(Person.class,person_id)方法,比find(Person.class,person_id)方法性能要
好(不需要数据装载)
如果getReference()去数据库中没有查到记录,则抛出异常
find()则是返回null
现在完成了业务方法之后,对这个应用进行打包并发布
Person类会有一个警告,没有生成版本ID号
点击感叹号,选择第二项:Add Generated serial version ID
此时,会话bean已编写好、实体bean也完成了
分享到:
相关推荐
【标题】:“VS以及PDF交通罚单登记表” 在标题中提到的“VS以及PDF交通罚单登记表”指的是利用Visual Studio(VS)这个开发环境,结合C#编程语言,来设计一个系统,该系统能够处理交通罚单的登记工作,并且支持将...
交警登录后可查看自己开的罚单、开罚单、对未缴费的罚单进行修改和删除; 驾驶员登录后可查看自己名下车辆的罚单,也可以查看自己驾驶证的罚单,对未缴费的罚单进行缴费; 系统可以使用Java集合存储数据,也可以...
1. **员工管理**:赏罚单是员工管理的一部分,通过规范的赏罚机制来激励员工提高工作效率和质量,同时也维护公司的规章制度。 2. **赏罚制度**:公司需设定明确的赏罚标准,包括但不限于工作绩效、工作态度、团队...
需要设计合理的数据表结构,如罚单表(包含违章类型、罚款金额、处理状态等字段)、车辆表(包含车牌号、车型等信息)和驾驶员表(包含驾驶证号、姓名等信息)。 4. **JDBC(Java Database Connectivity)** - ...
1. **数据结构**:车辆罚单信息可能包括车牌号、驾驶员姓名、违章日期、违章类型、罚款金额等。这些数据可以通过结构体(struct)来封装,创建一个代表车辆罚单的自定义数据类型。 2. **文件操作**:管理系统需要...
- 事件表:定义了不同触发事件(如警察开罚单、驾驶员支付罚款、申诉等)及其处理流程。 - 实体关系图:显示了驾驶员、罚款单、法官和警察之间的关系,以及他们各自属性的关联。 - DFD(数据流图)片段:展示了...
支付行业严监管常态化,其中一个重要表现是关于第三方支付机构的罚单。 据移动支付网了解,连续三年人民银行每年针对第三方支付机构开出的罚单...过去两年人民银行每年针对第三方支付机构开出的罚单总金额均超过1亿元。
需求分析 ...采用基本算法查找交通处罚单信息文件,比较驾照号,如果驾照号匹配,再看处罚单时间是否出于查询时间段内,如果是,则计数器加1,并输出该处罚单号。文件查找结束后,输出计数器的值。
1. 输入交通罚单信息:允许用户录入新的罚单详情。 2. 删除交通罚单信息:根据指定条件删除特定的罚单记录。 3. 浏览交通罚单信息:显示所有或特定的罚单记录。 4. 查询交通罚单:按车辆、驾驶员或开单交警进行查询...
在本项目中,"C语言课程设计-交通罚单管理系统"是一个典型的软件开发实例,它展示了如何使用C语言来构建一个实用的应用程序。这个系统旨在模拟处理交通违章罚款的流程,帮助用户管理和追踪交通罚单的相关信息。让...
《给乌鸦的罚单》是一本由作家王一梅与画家钦吟之合作的绘本,讲述了乌鸦信守承诺,坚持诚信的故事。故事中,乌鸦因不讲卫生而收到了一张罚单,而一个年轻的警察阿龙因此陷入了尴尬,最终乌鸦兑现了自己的承诺,展现...
员工奖励惩罚单.xls
表设计:包括学生表、图书表、借阅表、归还表、罚单表、管理员表等。 五、表设计 表设计包括学生表、图书表、借阅表、归还表、罚单表、管理员表等。 学生表:包括学生编号、学生姓名、学生性别、学生年龄、学生...
交通罚单管理系统.C
- **一对一或多对零到多**(1..1____0..1):这种联系表示一个实体可能与另一个实体建立一对一的关系,或者与多个实体建立联系,甚至不与任何实体建立联系。例如,一本图书可以被一个读者借阅,也可以被多个读者借阅...
文档"参考资料-FR-YY0320营业员奖罚单.doc"很可能是详细的营业员奖罚制度或者实际的奖罚记录表。 首先,营业员奖罚单是用来记录和管理营业员工作表现的工具,它涵盖了员工的销售业绩、服务质量、客户反馈等多个方面...
洛杉矶停车罚单数据集 数据说明: 该数据根据NAD1983州平面加利福尼亚州VFIPS0405英尺投影,以美国英尺坐标表示的纬度/经度(XY)的停车引用。 这是由洛杉矶市主办的数据集。该组织在这里有一个开放的数据平台,他们...
支付宝是阿里巴巴旗下的一款第三方支付平台,它提供了众多便捷的生活服务,包括交通罚单的在线缴纳。对于忙碌的车主来说,通过支付宝处理交通罚单无疑是一个高效且省时的选择。下面,我们将详细介绍如何使用支付宝...
1. **奖罚标准**:文档提供了明确的奖罚类型,包括警告(口头、书面、严重、最后警告)和停职处理,以及不同层次的奖励(口头嘉奖、通报奖励、部门及人力资源部奖励)。这些分类确保了对员工行为的全面评价,无论是...