EJB之JPA(save操作)


上一章我們介紹了EJB的數據源配置.這一章我們介紹一下基本的EJB save操作.

首先,建立一個EJB Bean.

package com.cnblogs.pojo;

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;

/**
 * 定義這是一個entityBean
 * @author asus
 *
 */
@Entity
@Table(name="person")//映射表名稱為person
public class Person implements Serializable{//實現可序列化接口.方便遠程調用
    /**
     * 這個ID是一定要定義的,hibernate也一樣要定義.
     * 如果我們只定義一個ID.不定義他的生成策略,就相當與沒有生成策略,要我們自己設定他的ID值.
     * 如果我們指定他的生成策略.就是@GeneratedValue.這樣,就相當與會自動生成ID.
     * 他會根據數據庫選擇生成策略.如果是MYSQL.就是以IDENTITY方式生成主鍵
     * 如果是ORACLE就是以Sequence方式生成主鍵.
     * 跟Hibernate的native是一個意思.
     * @GeneratedValue(strategy=GenerationType.TABLE)
     * 這種方式通過一個表來實現主鍵id的自增,這種方式不依賴於具體的數據庫,可以解決數據遷移的問題
     * 所以,這個主鍵的方式,我們不設置括@GeneratedValue的屬性.或者設置為TABLE.方便數據遷移. 
   * 關於table策略.下章會詳細講解.如果我們需要用String類型的ID.數據庫又自動生成.也就是hibernate的UUID也是可以的.不過需要引入JAR包.下一章同樣會給出方法.
*/ @Id @GeneratedValue private int id; /** * column字段主要有以下屬性: * name:字段名 * unique:是否唯一 * nullable:是否可以為空 * inserttable:是否可以插入 * updateable:是否可以更新 * columnDefinition:定義建表時創建此列的DDL * secondaryTable:從表名。如果此列不建在主表上(默認建在主表),該屬性定義該列所在從表的名字。 * 這里我們根據情況常用的是name,unique,nullable */ @Column(name="username",unique=false) private String name; @Column(name="password",nullable=false) private String passwd; 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; } public String getPasswd() { return passwd; } public void setPasswd(String passwd) { this.passwd = passwd; } }

寫一下service和serviceImpl

package com.cnblogs.service;

import com.cnblogs.pojo.Person;

public interface PersonService {
    public void addPserson(Person p);
}
package com.cnblogs.serviceImpl;

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

import com.cnblogs.pojo.Person;
import com.cnblogs.service.PersonService;


@Stateless(name="personService")
@Remote
public class PersonServiceImpl implements PersonService {
    /**
     * 在這里注入EntityManager相當與Hibernate的session
     * 這里的unitName就是persistence.xml的JTA數據源. 如果這個方法里想對多個數據庫操作.就再注入一個EntityManager
     */
    @PersistenceContext(unitName = "ejb_01PU")
    private EntityManager em;

    public void addPserson(Person p) {
       /**
         * 在JPA里.保存是persist.在HIBERNATE里.叫SAVE.只是名字換了.
         */
        em.persist(p);

    }

}

然后我們寫一個WEB應用.調用這個方法.首先添加EJB本地項目的依賴

然后寫一個TEST類

package com.cnblogs.test;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.cnblogs.pojo.Person;
import com.cnblogs.service.PersonService;

public class Test {
    public static void main(String[] args) throws NamingException {

        InitialContext context = new InitialContext();
        PersonService ps = (PersonService) context.lookup("personService/remote");
        Person p1 = new Person();
        p1.setName("張三");
        p1.setPasswd("zhangsan");
        ps.addPserson(p1);

    }
}

添加jndi.properties到WEB項目的根目錄.

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

然后把JBOSS的JAR添加到WEB項目.(JBOSSHOME/client下所有的JAR包)

然后啟動JBOSS.添加2個項目進去.

運行TEST類.

OK.結束.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM