EJB--实体Bean

现在咱们说一下EJB中最后一个Bean,实体Bean,那么他是干什么用呢?和数据库打交道,既然说到了和数据库打交道,那就不得不说还有一个东东:POJO,什么事POJO:POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。而且在EJB3.0有了以后,持久化已经自称规范,java persistence interface Api。
那么概念就简单的介绍到这里,下边我们说一下javaBean在EJB中的运用。先实现一个小小的例子,先感官的认识一下,然后再理性的介绍一下。

实例搭建

创建远程EJB项目

1.在D:\jboss-4.2.0.GA\server\default\lib 中加入 mysql-connector-java-5.1.5-bin.jar
2.在D:\jboss-4.2.0.GA\server\default\deploy 下加入文件mysql-ds.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- $Id: mysql-ds.xml 41017 2006-02-07 14:26:14Z acoliver $ -->
<!--  Datasource config for MySQL using 3.0.9 available from:
http://www.mysql.com/downloads/api-jdbc-stable.html
-->

<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>root</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>

3.新建ejb项目,并在persist.xml中加入

    <persistence-unit name="jpa_01" transaction-type="JTA">
        <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>

4.新建实体Person

    package com.tgb.jpa;

    import javax.persistence.Entity;
    import javax.persistence.Id;

    @Entity
    public class Person {

        @Id
        private int id;

        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;
        }
        private String name;
    }

5.新建javaBean


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

    @Stateless
    @Remote
    public class PersonManagerBean implements PersonManager {

        @PersistenceContext(unitName="jpa_01")
        private EntityManager em;

        public void addPerson(String name) {
            Person p = new Person();
            p.setId(1314);
            p.setName("shuaige");
            em.persist(p);

        }

    }

这样一个EJB的项目就创建好了,然后大家去自己的mysql中穿件一个名称为ejb3的数据库.

创建客户端

public static void main(String[] args) throws Exception{

        InitialContext content = new InitialContext();
        UserManager userManager = (UserManager)content.lookup("UserManager/remote");
        for (int i = 0; i < 5; i++) {

            User user = new User();
            user.setUsername("帅哥" + i);
            user.setPassword("1314");
            userManager.addUser1(user);
            System.out.println("User 添加成功");
        }
    }

jndi.properties文件中代码如下:

#\u5DE5\u5382\u5BF9\u8C61\u7684\u5305
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
#\u8BBE\u7F6E\u547D\u540D\u670D\u52A1\u5668\u7684\u8FDE\u63A5URL
java.naming.provider.url=localhost
#JNDI\u8FDE\u63A5\u5DE5\u5382
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory

搭建好以后,启动我们的EJB项目,然后执行客户端代码就可以,我们就会看到如下结果:
这里写图片描述

详解JPA

在上边的代码大家注意到这么两句代码:

@PersistenceContext(unitName="jpa_01")
private EntityManager em;

EntityManager从字面意思可以看出就是一个实体管理工具,那么@PersistenceContext是干什么呢,持久化上下文,并且定义对于哪一个持久话对象(这里是jpa_01), PersistenceContext,称为持久化上下文,它一般包含有当前事务范围内的,被管理的实体对象(Entity)的数据。每个EntityManager,都会跟一个PersistenceContext相关联。PersistenceContext中存储的是实体对象的数据,而关系数据库中存储的是记录,EntityManager正是维护这种OR映射的中间者,它可以把数据从数据库中加载到PersistenceContext中,也可以把数据从PersistenceContext中持久化到数据库,EntityManager通过Persist、merge、remove、refresh、flush等操作来操纵PersistenceContext与数据库数据之间的同步!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值