EJB之JPA(save操做)

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

首先,創建一個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和serviceImplsession

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本地項目的依賴less

而後寫一個TEST類ide

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項目的根目錄.this

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包)url

而後啓動JBOSS.添加2個項目進去.spa

運行TEST類.hibernate

OK.結束.code

相關文章
相關標籤/搜索