您现在的位置: > 首页 > 程序开发 > Java教程
>> 最新教程
>> 热门教程
>> 最新游戏资讯
>> 热门游戏资讯
日系框架之seasar2(S2JPA之Hibernate3)
作者:本站                来自:安迪教程网                 加入时间:08-09-19                进入论坛讨论

  官方主页:http://s2hibernate.seasar.org/ja/

  本例使用MySQL作为数据库,数据库名暂定为s2hb3jpa。

  使用的jar包如下。

antlr-2.7.6.jar
aopalliance-1.0.jar
commons-collections-3.1.jar
commons-lang-2.3.jar
commons-logging-1.1.jar
dom4j-1.6.1.jar
ehcache-1.2.3.jar
ejb3-persistence.jar
geronimo-annotation_1.0_spec-1.0.jar
geronimo-ejb_3.0_spec-1.0.jar
geronimo-interceptor_3.0_spec-1.0.jar
geronimo-j2ee_1.4_spec-1.0.jar
hibernate3.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate-entitymanager.jar
hibernate-search.jar
hibernate-validator.jar
hsqldb-1.8.0.1.jar
javassist-3.4.GA.jar
jboss-archive-browsing-5.0.0alpha-200607201-119.jar
jta-1.1.jar
junit-3.8.2.jar
log4j-1.2.13.jar
lucene-core-2.3.0.jar
mysql-connector-java-5.1.6-bin.jar
ognl-2.6.9-patch-20070908.jar
poi-3.0-FINAL.jar
s2-extension-2.4.29.jar
s2-framework-2.4.29.jar
s2hibernate-jpa-1.0.1.jar
s2-tiger-2.4.29.jar
servlet-api.jar
slf4j-api-1.4.2.jar
slf4j-log4j12.jar

  代码如下:

  app.dicon

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
  "http://www.seasar.org/dtd/components21.dtd">
<components>
  <include path="jdbc.dicon"/>
  <include path="examples/dicon/DepartmentDao.dicon"/>
</components>
convention.dicon

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
  "http://www.seasar.org/dtd/components24.dtd">
<components>
  <component class="org.seasar.framework.convention.impl.NamingConventionImpl" />
</components>
env_ut.txt

ctimport.sql

  只要放在classpath下,seasar2会自动执行DML(注意:似乎文件名只能是import.sql)。

INSERT INTO DEPT (DEPTNO,DNAME,LOC,VERSIONNO,ACTIVE) VALUES(10,'ACCOUNTING','NEW YORK',0,1)
INSERT INTO DEPT (DEPTNO,DNAME,LOC,VERSIONNO,ACTIVE) VALUES(20,'RESEARCH','DALLAS',0,1)
INSERT INTO DEPT (DEPTNO,DNAME,LOC,VERSIONNO,ACTIVE) VALUES(30,'SALES','CHICAGO',0,1)
INSERT INTO DEPT (DEPTNO,DNAME,LOC,VERSIONNO,ACTIVE) VALUES(40,'OPERATIONS','BOSTON',0,1)
INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,CITY,ZIP,TSTAMP) VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20,'LAS VEGAS','110','2000-01-01 00:00:00.0')
INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,CITY,ZIP,TSTAMP) VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30,'MIAMI','120','2000-01-01 00:00:00.0')
INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,CITY,ZIP,TSTAMP) VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30,'WASHINGTON','130','2000-01-01 00:00:00.0')
INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,CITY,ZIP,TSTAMP) VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20,'IOWA CITY','140','2000-01-01 00:00:00.0')
INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,CITY,ZIP,TSTAMP) VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30,'LOS ANGELES','150','2000-01-01 00:00:00.0')
INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,CITY,ZIP,TSTAMP) VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30,'LOS ANGELES','160','2000-01-01 00:00:00.0')
INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,CITY,ZIP,TSTAMP) VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10,'WASHINGTON','170','2000-01-01 00:00:00.0')
INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,CITY,ZIP,TSTAMP) VALUES(7788,'SCOTT','ANALYST',7566,'1982-12-09',3000.0,NULL,20,'NEW YORK','180','2005-01-18 13:09:32.213')
INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,CITY,ZIP,TSTAMP) VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10,'SEATTLE','190','2000-01-01 00:00:00.0')
INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,CITY,ZIP,TSTAMP) VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30,'NEW YORK','210','2000-01-01 00:00:00.0')
INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,CITY,ZIP,TSTAMP) VALUES(7876,'ADAMS','CLERK',7788,'1983-01-12',1100,NULL,20,'SANTA FE','220','2000-01-01 00:00:00.0')
INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,CITY,ZIP,TSTAMP) VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30,'NEW YORK','230','2000-01-01 00:00:00.0')
INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,CITY,ZIP,TSTAMP) VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20,'SANTA FE','240','2000-01-01 00:00:00.0')
INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO,CITY,ZIP,TSTAMP) VALUES(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10,'IOWA CITY','250','2000-01-01 00:00:00.0')
jdbc.dicon

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
  "http://www.seasar.org/dtd/components24.dtd">
<components namespace="jdbc">
  <include path="jta.dicon"/>
  <include path="jdbc-extension.dicon"/>
  <component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
  <component class="org.seasar.extension.jdbc.impl.ConfigurableStatementFactory">
    <arg>
      <component class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
    </arg>
    <property name="fetchSize">100</property>
  </component>
  <component name="xaDataSource"
    class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
    <property name="driverClassName">
      "com.mysql.jdbc.Driver"
    </property>
    <property name="URL">
      "jdbc:mysql://localhost:3306/s2hb3jpa"
    </property>
    <property name="user">"root"</property>
    <property name="password">"root"</property>
  </component>
  <component name="connectionPool"
    class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
    <property name="timeout">600</property>
    <property name="maxPoolSize">10</property>
    <property name="allowLocalTx">true</property>
    <destroyMethod name="close"/>
  </component>
  <component name="dataSource" class="org.seasar.extension.dbcp.impl.DataSourceImpl"/>
</components>
jpa.dicon

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
  "http://www.seasar.org/dtd/components24.dtd">
<components>
  <include path="s2hibernate-jpa.dicon"/>
  <component name="persistenceUnitProvider" class="org.seasar.framework.jpa.impl.ContainerPersistenceUnitProvider">
    <property name="unitName">"s2hb3jpaUnit"</property>
  </component>
  <component name="entityManagerFactory" class="javax.persistence.EntityManagerFactory">
    persistenceUnitProvider.entityManagerFactory
  </component>
  <component name="entityManager" class="org.seasar.framework.jpa.impl.TxScopedEntityManagerProxy"/>
</components>
log4j.propertieslog4j.category.org.seasar=DEBUG, C
log4j.additivity.org.seasar=false
log4j.category.examples=DEBUG, C
log4j.additivity.examples=false
log4j.appender.C=org.apache.log4j.ConsoleAppender
log4j.appender.C.Target=System.out
log4j.appender.C.ImmediateFlush=true
log4j.appender.C.layout=org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern=%-5p %d [%t] %m%n
log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
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="s2hb3jpaUnit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/dataSource</jta-data-source>
    <class>examples.entity.Department</class>
    <class>examples.entity.Employee</class>
    <properties>
      <property name="hibernate.dialect" value=http://tech.ddvip.com/2008-09/"org.hibernate.dialect.MySQL5Dialect"/>
      <property name="hibernate.jndi.class" value=http://tech.ddvip.com/2008-09/"org.seasar.extension.j2ee.JndiContextFactory"/>
      <property name="hibernate.transaction.manager_lookup_class" value=http://tech.ddvip.com/2008-09/"org.seasar.hibernate.jpa.transaction.SingletonTransactionManagerProxyLookup"/>
      <property name="hibernate.show_sql" value=http://tech.ddvip.com/2008-09/"true"/>
      <property name="hibernate.format_sql" value=http://tech.ddvip.com/2008-09/"true"/>
      <property name="hibernate.use_sql_comments" value=http://tech.ddvip.com/2008-09/"false"/>
      <property name="hibernate.archive.autodetection" value=http://tech.ddvip.com/2008-09/""/> 
      <property name="hibernate.hbm2ddl.auto" value=http://tech.ddvip.com/2008-09/"create"/>
    </properties>
  </persistence-unit>
</persistence>
DepartmentDao.dicon

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
  "http://www.seasar.org/dtd/components24.dtd">
<components>
  <include path="javaee5.dicon"/>
  <include path="jpa.dicon"/>
  <component name="dao" class="examples.dao.DepartmentDaoImpl"/>
</components>
DepartmentDao.java

package examples.dao;
import examples.entity.Department;
public interface DepartmentDao {
  Department getDepartment(int id);
}
DepartmentDaoImpl.java

package examples.dao;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import examples.entity.Department;
@Stateless
public class DepartmentDaoImpl implements DepartmentDao {
  @PersistenceContext(unitName = "s2hb3jpaUnit")
  EntityManager em;
  public DepartmentDaoImpl() {
  }
  public Department getDepartment(int id) {
    return em.find(Department.class, id);
  }
}
Address.java

package examples.entity;
import java.io.Serializable;
import javax.persistence.Embeddable;
@Embeddable
public class Address implements Serializable {
  private static final long serialVersionUID = 1L;
  private String city;
  private String zip;
  public String getCity() {
    return city;
  }
  public void setCity(String city) {
    this.city = city;
  }
  public String getZip() {
    return zip;
  }
  public void setZip(String zip) {
    this.zip = zip;
  }
}
Department.java

package examples.entity;
import java.io.Serializable;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Version;
@Entity(name = "Dept")
public class Department implements Serializable {
  private static final long serialVersionUID = -1031433105487668130L;
  @Id
  private int deptno;
  private String dname;
  private String loc;
  @SuppressWarnings("unused")
  @Version
  private int versionNo;
  private boolean active;
  @OneToMany(mappedBy = "department")
  private Set<Employee> employees;
  public Department() {
  }
  public int getDeptno() {
    return this.deptno;
  }
  public void setDeptno(int deptno) {
    this.deptno = deptno;
  }
  public java.lang.String getDname() {
    return this.dname;
  }
  public void setDname(java.lang.String dname) {
    this.dname = dname;
  }
  public java.lang.String getLoc() {
    return this.loc;
  }
  public void setLoc(java.lang.String loc) {
    this.loc = loc;
  }
  public void setVersionNo(int versionNo) {
    this.versionNo = versionNo;
  }
  public boolean isActive() {
    return active;
  }
  public void setActive(boolean active) {
    this.active = active;
  }
  public Set<Employee> getEmployees() {
    return employees;
  }
  public void setEmployees(Set<Employee> employees) {
    this.employees = employees;
  }
  @Override
  public boolean equals(Object other) {
    if (!(other instanceof Department))
      return false;
    Department castOther = (Department) other;
    return this.getDeptno() == castOther.getDeptno();
  }
  @Override
  public int hashCode() {
    return this.getDeptno();
  }
}
Employee.java

package examples.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity(name = "Emp")
public class Employee implements Serializable {
  private static final long serialVersionUID = -5411969211921106291L;
  @Id
  private long empno;
  private String ename;
  private String job;
  private Short mgr;
  @Temporal(TemporalType.DATE)
  private Date hiredate;
  private Float sal;
  private Float comm;
  @Temporal(TemporalType.TIMESTAMP)
  private Date tstamp;
  @ManyToOne
  @JoinColumn(name = "deptno")
  private Department department;
  @Embedded
  private Address address;
  public Employee() {
  }
  public Employee(long empno) {
    this.empno = empno;
  }
  public long getEmpno() {
    return this.empno;
  }
  public void setEmpno(long empno) {
    this.empno = empno;
  }
  public java.lang.String getEname() {
    return this.ename;
  }
  public void setEname(java.lang.String ename) {
    this.ename = ename;
  }
  public java.lang.String getJob() {
    return this.job;
  }
  public void setJob(java.lang.String job) {
    this.job = job;
  }
  public Short getMgr() {
    return this.mgr;
  }
  public void setMgr(Short mgr) {
    this.mgr = mgr;
  }
  public java.util.Date getHiredate() {
    return this.hiredate;
  }
  public void setHiredate(java.util.Date hiredate) {
    this.hiredate = hiredate;
  }
  public Float getSal() {
    return this.sal;
  }
  public void setSal(Float sal) {
    this.sal = sal;
  }
  public Float getComm() {
    return this.comm;
  }
  public void setComm(Float comm) {
    this.comm = comm;
  }
  public Department getDepartment() {
    return this.department;
  }
  public void setDepartment(Department department) {
    this.department = department;
  }
  public Date getTstamp() {
    return this.tstamp;
  }
  public void setTstamp(Date tstamp) {
    this.tstamp = tstamp;
  }
  public Address getAddress() {
    return address;
  }
  public void setAddress(Address address) {
    this.address = address;
  }
  @Override
  public boolean equals(Object other) {
    if (!(other instanceof Employee))
      return false;
    Employee castOther = (Employee) other;
    return this.getEmpno() == castOther.getEmpno();
  }
  @Override
  public int hashCode() {
    return (int) this.getEmpno();
  }
}
DepartmentClient.java

package examples.work;
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;
import examples.dao.DepartmentDao;
import examples.dao.DepartmentDaoImpl;
import examples.entity.Department;
public class DepartmentClient {
  private static final String PATH = "app.dicon"; 
  public static void main(String[] args) { 
    S2Container container = S2ContainerFactory.create(PATH); 
    container.init(); 
    try { 
      DepartmentDao dao = (DepartmentDao)container.getComponent(DepartmentDaoImpl.class); 
      Department department = dao.getDepartment(10);
      System.out.println(department.getLoc());
    } finally { 
      container.destroy(); 
    } 
  } 
}
EntityManagerClient.java

package examples.work;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;
import examples.entity.Department;
public class EntityManagerClient {
  private static final String PATH = "app.dicon"; 
  
  public static void main(String[] args) {
    S2Container container = S2ContainerFactory.create(PATH);
    container.init();
    try {
      //EntityManager em = (EntityManager) container.getComponent(TxScopedEntityManagerProxy.class);
      //Department department = (Department) em.find(Department.class, 10);
      //System.out.println(department.getDname());
      EntityManagerFactory emf = (EntityManagerFactory) container.getComponent(EntityManagerFactory.class);
      EntityManager em = emf.createEntityManager();
      Department department = (Department)em.find(Department.class, 10);
      updateDepartment(em, department);
      final Session session = Session.class.cast(em.getDelegate());
      department = (Department)session.load(Department.class, 10);
      System.out.println(department.getDname());
      Query query = session.createQuery("from Dept");
      System.out.println(query.list().size());
      final SessionFactory sf = session.getSessionFactory();
      System.out.println(sf.getAllClassMetadata().size());
    } finally {
      container.destroy();
    }
  }
  @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
  public static void updateDepartment(EntityManager em, Department department){
    System.out.println(department.getDname());
    department.setDname(department.getDname() + "XXX");
    EntityTransaction tx = em.getTransaction();
    tx.begin();
    em.persist(department);
    em.flush();
    tx.commit();
  }
}

  注意:使用注释掉的代码来获得em时,会报告session已经关闭的错误。

EntityManagerFactoryClient.java
package examples.work;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;
import org.seasar.framework.jpa.PersistenceUnitManager;
import examples.entity.Department;
public class EntityManagerFactoryClient {
  private static final String PATH = "app.dicon";
  public static void main(String[] args) {
    S2Container container = S2ContainerFactory.create(PATH);
    container.init();
    try {
      EntityManagerFactory emf = (EntityManagerFactory) container.getComponent(EntityManagerFactory.class);
      EntityManager em = emf.createEntityManager();
      Department department = (Department) em.find(Department.class, 10);
      System.out.println(department.getDeptno());
      PersistenceUnitManager pum = PersistenceUnitManager.class.cast(container.getComponent(PersistenceUnitManager.class));
      emf = pum.getEntityManagerFactory("s2hb3jpaUnit");
      em = emf.createEntityManager();
      Session session = Session.class.cast(em.getDelegate());
      SessionFactory sf = session.getSessionFactory();
      System.out.println(sf.getAllClassMetadata().size());
      department = (Department) em.find(Department.class, 10);
      System.out.println(department.getDeptno());
    } finally {
      container.destroy();
    }
  }
}

联系方式:QQ:6084884 email:agwcn@126.com 粤ICP备10101711号
本网站中发布的文章只代表发表人的个人观点,不代表安迪教程网网站的立场
copyright© 2000-2004 安迪教程网 All rights reserved agwcn.com