6实体 Bean(Entity Bean)
实体 Bean发布前的准备工作
1. 把数据库驱动 Jar 包放置在[Jboss 安装目录]/server/all/lib 目录下,重启 Jboss服务器
2. 配置数据源(mysql-ds.xml)并放置在[jboss 安装目录]/server/all/deploy 目录,
3. 配置 persistence.xml文件,在文件中指定使用的源据源及各项参数。把实体类和 persistence.xml文件打成 Jar,persistence.xml 放在 jar 文件的 META-INF目录
完。
不确定内容参考以下:
○ MySql 数据源
下面定义一个名为DefaultMySqlDS的 Mysql 数据源,连接数据库为foshanshop,数据库登录用户名为 root,密码
为 123456,数据库驱动类为 org.gjt.mm.mysql.Driver。大家只需修改数据库名及登录用户名密码就可以直接使用。
mysql-ds.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <datasources>
- <local-tx-datasource>
- <jndi-name>DefaultMySqlDS</jndi-name>
- <connection-url>jdbc:mysql://localhost:3306/foshanshop?useUnicode=true&characterEncoding=GBK
- </connection-url>
- <driver-class>org.gjt.mm.mysql.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>
○persistence.xml文件
一个实体 Bean由实体类和persistence.xml文件组成。persistence.xml文件在 Jar 文件的 META-INF目录。
persistence.xml文件指定实体 Bean使用的数据源及 EntityManager 对象的默认行为。persistence.xml 文件的配置说
明如下:
- <persistence>
- <persistence-unit name="foshanshop">
- <jta-data-source>java:/DefaultMySqlDS</jta-data-source>
- <properties>
- <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
- </properties>
- </persistence-unit>
- </persistence>
○实体 Bean(Entity Bean)
- package com.foshanshop.ejb3.bean;
- import java.io.Serializable;
- import java.util.Date;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.Table;
- import javax.persistence.Temporal;
- import javax.persistence.TemporalType;
- import javax.persistence.GenerationType;
- @SuppressWarnings("serial")
- @Entity
- @Table(name = "Person")
- public class Person implements Serializable{
- private Integer personid;
- private String name;
- private boolean sex;
- private Short age;
- private Date birthday;
- @Id
- @GeneratedValue(strategy=GenerationType.AUTO)
- public Integer getPersonid() {
- return personid;
- }
- public void setPersonid(Integer personid) {
- this.personid = personid;
- }
- @Column(nullable=false,length=32)
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @Column(nullable=false)
- public boolean getSex() {
- return sex;
- }
- public void setSex(boolean sex) {
- this.sex = sex;
- }
- @Column(nullable=false)
- public Short getAge() {
- return age;
- }
- public void setAge(Short age) {
- this.age = age;
- }
- @Temporal(value=TemporalType.DATE)
- public Date getBirthday() {
- return birthday;
- }
- public void setBirthday(Date birthday) {
- this.birthday = birthday;
- }
- }
○Session Bean(Session Bean 的业务接口 和 Session Bean的实现)
PersonDAO.java
- //author:lihuoming
- package com.foshanshop.ejb3;
- import java.util.Date;
- import java.util.List;
- import com.foshanshop.ejb3.bean.Person;
- public interface PersonDAO {
- public boolean insertPerson(String name, boolean sex,short age, Date birthday);
- public String getPersonNameByID(int personid);
- public boolean updatePerson(Person person);
- public Person getPersonByID(int personid);
- public List getPersonList(int max,int whichpage);
- }
PersonDAOBean.java
- //author:lihuoming
- package com.foshanshop.ejb3.impl;
- import java.util.Date;
- import java.util.List;
- import javax.ejb.Remote;
- import javax.ejb.Stateless;
- import javax.persistence.EntityManager;
- import javax.persistence.PersistenceContext;
- import javax.persistence.Query;
- import com.foshanshop.ejb3.PersonDAO;
- import com.foshanshop.ejb3.bean.Person;
- @Stateless
- @Remote ({PersonDAO.class})
- public class PersonDAOBean implements PersonDAO {
- @PersistenceContext
- protected EntityManager em;
- public String getPersonNameByID(int personid) {
- Person person = em.find(Person.class, Integer.valueOf(personid));
- return person.getName();
- }
- public boolean insertPerson(String name, boolean sex,short age, Date birthday) {
- try {
- Person person = new Person();
- person.setName(name);
- person.setSex(sex);
- person.setAge(Short.valueOf(age));
- person.setBirthday(birthday);
- em.persist(person);
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- return true;
- }
- public Person getPersonByID(int personid) {
- return em.find(Person.class, Integer.valueOf(personid));
- }
- public boolean updatePerson(Person person) {
- try {
- em.merge(person);
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- return true;
- }
- public List getPersonList(int max,int whichpage) {
- try {
- int index = (whichpage-1) * max;
- Query query = em.createQuery("from Person p order by personid asc");
- List list = query.setMaxResults(max).
- setFirstResult(index).
- getResultList();
- em.clear();//分离内存中受EntityManager管理的实体bean,让VM进行垃圾回收
- return list;
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- }
○下面是 JSP 客户端代码:
EntityBeanTest.jsp
- <%@ page contentType="text/html; charset=GBK"%>
- <%@ page import="com.foshanshop.ejb3.PersonDAO,
- com.foshanshop.ejb3.bean.Person,
- javax.naming.*,
- java.util.Properties,
- java.util.Date,
- java.util.List,
- java.util.Iterator,
- java.text.SimpleDateFormat"%>
- <%
- Properties props = new Properties();
- props.setProperty("java.naming.factory.initial",
- "org.jnp.interfaces.NamingContextFactory");
- props.setProperty("java.naming.provider.url", "localhost:1099");
- props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
- InitialContext ctx = new InitialContext(props);
- try {
- PersonDAO persondao = (PersonDAO) ctx.lookup("PersonDAOBean/remote");
- SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
- persondao.insertPerson("黎活明", true, (short)26,formatter.parse("1980-9-30"));//添加一个人
- out.println(persondao.getPersonNameByID(1)); //取personid为1的人姓名
- Person person = persondao.getPersonByID(1); //取personid为1的person,此时的person已经脱离容器的管理
- person.setName("张小艳"); //把姓名改为张小艳
- persondao.updatePerson(person); //更新person
- out.println("<br> personid为1的person姓名已由黎活明改为 张小艳");
- out.println("<br>============ 分页显示,每页记录数为2 =========<BR>");
- String index = request.getParameter("index");
- if (index==null || "".equals(index.trim())) index = "1";
- int max = 2; //每页记录数为2
- int whichpage = Integer.parseInt(index); //第几页
- List list = persondao.getPersonList(max, whichpage);
- if (list!=null){
- Iterator it = list.iterator();
- while (it.hasNext()) {
- Person p = (Person)it.next();
- out.println("人员编号:"+ p.getPersonid() + " 姓名:"+ p.getName() + "<Br>");
- }
- }
- } catch (Exception e) {
- out.println(e.getMessage());
- }
- %>
上面代码往数据库添加一个人,然后取 personid为 1 的人员姓名。