`

7.单表实体Bean

阅读更多

(1):建表SQL语句(MySQL):

create table person
(
id int primary key auto_increment,
name varchar(20) not null
);

     注:表的数据源在6.配置JBoss数据源 中详细介绍了。此处直接拿来用

(2):配置xml文件:

         EJB的实体Bean要求在jar包的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">

	<persistence-unit name="EJB" transaction-type="JTA">
		<jta-data-source>java:EJBDS</jta-data-source>
		<properties>
			<property name="hibernate.hbm2ddl.auto" value="update"/>
			<!-- 显示最终执行的SQL语句 -->
			<property name="hibernate.show_sql" value="true"/>
			<!-- 格式化显示SQL -->
			<property name="hiberante.format_sql" value="true"/>
		</properties>
	</persistence-unit>
</persistence>
<!--
	persistence-unit节点可以有一个或多个,每个persistence-unit节点定义了持久化内容名
	称、使用的数据源及持久化产品专有属性。name 属性定义持久化名称。jta-data-source 节点指
	定实体Bean使用的数据源JNDI 名称,如果应用发布在jboss下数据源名称必须带有java:/前缀,数
	据源名称大小写敏感。properties节点用作指定持久化产品的各项属性,各个应用服务器使用的持久化
	产品都不一样如Jboss使用Hibernate,weblogic10使用
	Kodo,glassfish/sun application server/Oralce使用Toplink。 
	因为jboss 采用Hibernate,Hibernate 有一项属性hibernate.hbm2ddl.auto,该属
	性指定实体Bean发布时是否同步数据库结构,如果hibernate.hbm2ddl.auto的值设为
	create-drop,在实体Bean发布及卸载时将自动创建及删除相应数据库表(注意:Jboss 服务器启动
	或关闭时也会引发实体Bean 的发布及卸载)。TopLink产品的toplink.ddl-generation属性
	也起到同样的作用。
-->
 

(3):编写实体Bean

package com.taoist.ejb.bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="person")
public class Person implements Serializable {
	private static final long serialVersionUID = 2708725489696416285L;

	@Id //标注为主键
	@Column(name="id")
	@GeneratedValue(strategy=GenerationType.AUTO)
	// GenerationType.IDENTITY数据库自增加方式(适用于MySQL和MS SQL)
	// GenerationType.SEQUENCE数据库序列的方式(适用Oracle)
	// GenerationType.TABLE数据库表的方式(根据表中某一个字段进行累加)
	// GenerationType.AUTO则自动匹配(默认)
	private Integer id;
	
	@Column(name="name", length=20, nullable=false)
	private String name;
	
	
	public Person() {
		super();
	}
	
	public Person(String name) {
		this.name = name;
	}

	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}
}

 (4):编写数据操作类:

       写的时候没注意,写成了service,感觉应该类似SSH中的数据访问层的DAO.

package com.taoist.ejb.service;

import java.util.List;

import com.taoist.ejb.bean.Person;

public interface PersonService {
	public void save(Person person);
	public void update(Person person);
	public void delete(int personId);
	public Person getById(int personId);
	public List<Person> getAll();
}

 

package com.taoist.ejb.service.impl;

import java.util.List;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import com.taoist.ejb.bean.Person;
import com.taoist.ejb.service.PersonService;
@Stateless
@Remote(PersonService.class)
public class PersonServiceBean implements PersonService {
	@PersistenceContext(unitName="EJB")
	private EntityManager em;
	
	@Override
	public void delete(int personId) {
		em.remove(em.getReference(Person.class, personId));// 处于托管状态
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Person> getAll() {
		return (List) em.createQuery("select t from Person t").getResultList();
	}

	@Override
	public Person getById(int personId) {
		return em.find(Person.class, personId);
	}

	// EntityBean的四种状态:
	// 新建状态()
	// 托管状态(直接调用set方法就可以修改)
	// 游离状态()
	// 单体状态()
	@Override
	public void save(Person person) {
		em.persist(person);
	}

	@Override
	public void update(Person person) {
		em.merge(person);//前提Person实体Bean处于游离状态,
	}
	
}

(5):测试类:

package test.ejb.service;

import java.util.List;

import javax.naming.InitialContext;

import com.taoist.ejb.bean.Person;
import com.taoist.ejb.service.PersonService;


public class PersonServiceTest {
	private static PersonService ps;
	
	public static void main(String[] args) throws Exception {
		try {
			InitialContext ic = new InitialContext();
			ps = (PersonService) ic.lookup("PersonServiceBean/remote");
		} catch (Exception e) {
			System.out.println("init error!");
		}
		// 添加
		ps.save(new Person("taoist"));
		
		// 查找更新
		/*Person person = ps.getById(1);
		person.setName("xxx");
		ps.update(person);*/
		
		// 删除
		//ps.delete(1);
		
		List<Person> list = ps.getAll();
		for (int i=0; i<list.size(); i++) {
			System.out.println(list.get(i).getName() + list.get(i).getId());
		}
	}

}

 

java.naming.factory.initial = org.jnp.interfaces.NamingContextFactory
java.naming.provider.url = localhost:1099
 

 

(6):ant文件内容

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

<!--
	name:项目名称
	basedir:用于计算所有其他路径的基路径。该属性可以被basedir property覆盖。
		当覆盖时,该属性被忽略。如果属性和basedir property都没有设定,就使用
		buildfile文件的父目录。
	default:当没有指定target时使用的缺省target
-->
<project name="ejb" basedir="." default="deploy">
	<!--
		name:属性的名字
		value:属性的值
	-->
	<property name="build.dir" value="${basedir}\bin"/>
	<property environment="env"/>
	<!-- ${env.JBOSS_HOME}指向的是系统的环境变量:JBOSS_HOME
		 如果没有设置,可以直接使用绝对路径。如:D:\jboss-5.0.0.GA 
	 -->
	<property name="src.dir" value="${basedir}\ejbModule"/>
	<property name="jboss.home" value="${env.JBOSS_HOME}"/>
	<property name="jboss.server.config" value="default"/>
	
	<path id="build.classpath" description="类环境">
		<fileset dir="${jboss.home}\client">
			<include name="*.jar"/>
		</fileset>
	</path>
	
	<target name="prepare" description="初始化">
		<delete dir="${build.dir}"/>
		<mkdir dir="${build.dir}"/>
	</target>
	
	<target name="compile" depends="prepare" description="编译">
		<javac destdir="${build.dir}" srcdir="${src.dir}" includes="com/**"
                          encoding="utf-8">
			<classpath refid="build.classpath"/>
		</javac>
	</target>
	
	<target name="jar" depends="compile" description="打包">
		<jar jarfile="${basedir}\${ant.project.name}.jar">
			<fileset dir="${build.dir}">
				<include name="**/*.class"/>
			</fileset>
			<metainf dir="${src.dir}\META-INF"/>
		</jar>
	</target>
	
	<target name="deploy" depends="jar" description="发布">
		<copy file="${basedir}\${ant.project.name}.jar"
		tofile="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar"/>
	</target>	
	
	<target name="undeploy" description="卸裁">
	<delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar"/>
	</target>
	
	<target name="clean" depends="undeploy" description="清理">
		<delete file="${basedir}\${ant.project.name}.jar"/>
		<delete dir="${build.dir}"/>
	</target>
</project>
 

注:数据源文件的内容:

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

<datasources>
  <local-tx-datasource>
    <jndi-name>EJBDS</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/ejb</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>
   
   	<max-pool-size>200</max-pool-size>
   	<min-pool-size>10</min-pool-size>
   
    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Ejb开发实体bean

    7. **JNDI查找**:在Web应用中,我们需要通过JNDI查找来获取实体Bean的引用。在EJB部署描述符中,Bean会被注册到JNDI上下文中,Web应用通过这个上下文找到并实例化Bean。 8. **事务管理**:由于涉及数据库操作,EJB...

    ejb实体bean实例

    实体Bean(Entity Bean)是EJB的一种类型,它代表业务逻辑中的持久化对象,通常映射到数据库中的表。本篇文章将深入探讨EJB实体Bean的概念、其在Eclipse集成开发环境中的使用,以及与MySQL数据库的集成。 ### 一、...

    Bean开发实例之三实体Bean开发实例

    为了创建一个对应于该数据表的实体Bean,首先需要定义Bean类、接口文件等组件。 - **Bean类定义**:对于CMP类型的实体Bean,Bean类是一个实现了`EntityBean`接口的抽象类。其中包含了一些默认的方法(如`...

    EJB3.0源代码,包含会话Bean,实体Bean,还有消息Bean

    本资源包包含了会话Bean、实体Bean和消息Bean的源代码,这三种类型的Bean是EJB 3.0的核心组成部分。 1. **会话Bean (Session Beans)** - **无状态会话Bean (Stateless Session Beans)**: 提供无持久性状态的业务...

    JAVA Bean 课程.rar_Java bean

    - **会话Bean**、**实体Bean**和**消息驱动Bean**:EJB定义了三种类型的Bean,分别处理不同的业务需求,如短暂交互、持久化数据和异步通信。 6. **Java Bean 的局限性** - **过于简单**:Java Bean的设计相对基础...

    实体Bean继承讲解

    实体Bean继承是Java企业级应用开发中的一个重要概念,特别是在使用Java持久化技术(JPA)进行数据存储时。实体Bean代表数据库中的一个表,而实体Bean之间的继承关系则需要在数据库层面进行适当的映射,以便正确地...

    10_开发单表映射的实体bean

    在IT行业中,开发单表映射的实体Bean是Java EE应用程序开发中的常见任务,尤其是在使用ORM(对象关系映射)框架如Hibernate或MyBatis时。这个过程涉及到将数据库中的单个表结构转换为Java类,以便在业务逻辑中方便地...

    ejb3 第10讲 --开发单表映射的实体bean

    本教程聚焦于EJB 3,特别是第10讲,主要讲解如何开发单表映射的实体Bean。在本篇详细解答中,我们将深入探讨EJB 3中的实体Bean及其与数据库单表映射的关系。 首先,实体Bean是EJB的一种类型,代表业务逻辑中的持久...

    Jboss下开发ejb应用之一实体bean的应用

    本篇文章将深入探讨在JBoss应用服务器上开发EJB应用,特别是实体Bean的使用。 标题:“Jboss下开发ejb应用之一实体bean的应用” 首先,理解EJB实体Bean的含义至关重要。实体Bean代表持久化的业务对象,它们与...

    EJB3.0的一个单表映射实体bean

    EJB3.0的一个单表映射实体bean,实现对数据的增、删、改、查

    ejb实例包括session bean和实体bean

    2. **Container-managed Persistence (CMP)**:容器负责对象与数据库之间的持久化工作,开发者无需直接处理数据库操作,只需定义实体Bean的字段和属性。 3. **Entity Beans 3.0(EJB 3.0引入)**:简化了Entity Bean...

    逆向生成工具,有数据库表生成java bean实体类

    本工具专门针对这种情况,能够根据数据库中的表结构自动生成对应的Java Bean实体类,极大地提高了开发效率。 在使用这个逆向生成工具时,首先需要配置一个XML文件。这个XML文件包含了工具所需的参数,如数据库连接...

    各种转换,xml,实体bean,动态bean,map等

    标题和描述中提到的"各种转换,xml,实体bean,动态bean,map等"涉及了Java编程语言中的一些核心概念,这些概念在企业级应用开发中非常常见。下面我们将详细探讨这些知识点。 1. **XML(Extensible Markup Language)*...

    读取文件数据并解析成bean实体类

    7. **配置Class类**:在实际操作中,将文件数据映射到Bean时,通常需要指定目标Bean的Class对象,以便知道如何构建实例和设置属性。这可以通过构造函数参数、静态方法参数或者配置文件来实现。 总的来说,从文件...

    EJB实体Bean学习

    实体Bean是业务逻辑和数据存储之间的桥梁,它们可以映射到数据库表,其中“自动增长列”通常指的是主键,比如MySQL的`AUTO_INCREMENT`字段。在EJB中,实体Bean可以被声明为`@Entity`,并使用JPA(Java Persistence ...

    EJB 3.0学习之实体Bean

    `@Table`注解用来指定实体Bean所对应的数据库表,并且可以添加`UniqueConstraint`注释来设置表的唯一性约束。`@OneToMany`注解用于表示实体Bean之间的多对一或一对多关系,如学生和课程成绩的关系。这种关系在EJB ...

Global site tag (gtag.js) - Google Analytics