日系框架之seasar2(S2Hibernate3)
所需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-j2ee_1.4_spec-1.0.jar
hibernate3.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate-validator.jar
hsqldb-1.8.0.1.jar
javassist-3.4.GA.jar
jta-1.1.jar
junit-3.8.2.jar
log4j.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
s2-tiger-2.4.29.jar
slf4j-api-1.4.2.jar
slf4j-log4j12.jar
s2-hibernate-1.1.2.jar
步驟如下:
啟動HSQLDB並執行如下DDL:
- CREATE TABLE EMP
- (EMPNO NUMERIC(4) NOT NULL PRIMARY KEY,
- ENAME VARCHAR(10),
- JOB VARCHAR(9),
- MGR NUMERIC(4),
- HIREDATE DATE,
- SAL NUMERIC(7, 2),
- COMM NUMERIC(7, 2),
- DEPTNO NUMERIC(2));
- INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK', 7902,
- '1980-12-17', 800, NULL, 20);
- INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698,
- '1981-02-20', 1600, 300, 30);
- INSERT INTO EMP VALUES (7521, 'WARD', 'SALESMAN', 7698,
- '1981-02-22', 1250, 500, 30);
- INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER', 7839,
- '1981-04-02', 2975, NULL, 20);
- INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698,
- '1981-09-28', 1250, 1400, 30);
- INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839,
- '1981-05-01', 2850, NULL, 30);
- INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839,
- '1981-06-09', 2450, NULL, 10);
- INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566,
- '1982-12-09', 3000, NULL, 20);
- INSERT INTO EMP VALUES (7839, 'KING', 'PRESIDENT', NULL,
- '1981-11-17', 5000, NULL, 10);
- INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698,
- '1981-09-08', 1500, 0, 30);
- INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788,
- '1983-01-12', 1100, NULL, 20);
- INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698,
- '1981-12-03', 950, NULL, 30);
- INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566,
- '1981-12-03', 3000, NULL, 20);
- INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782,
- '1982-01-23', 1300, NULL, 10);
- CREATE TABLE DEPT
- (DEPTNO NUMERIC(2) NOT NULL PRIMARY KEY,
- DNAME VARCHAR(14),
- LOC VARCHAR(13),
- VERSIONNO NUMERIC(8));
- INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK', 0);
- INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS', 0);
- INSERT INTO DEPT VALUES (30, 'SALES', 'CHICAGO', 0);
- INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON', 0);
- COMMIT;
app.dicon
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
- "http://www.seasar.org/dtd/components24.dtd">
- <components>
- <includepath="examples/dicon/Employee.dicon"/>
- <includepath="examples/dicon/EmployeeAutoDao.dicon"/>
- <includepath="examples/dicon/DepartmentAutoDao.dicon"/>
- </components>
hibernate.cfg.xml
- <?xmlversion="1.0"?>
- <!DOCTYPE hibernate-configuration PUBLIC
- "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
- <hibernate-configuration>
- <session-factory>
- <propertyname="dialect">org.hibernate.dialect.HSQLDialect</property>
- <propertyname="show_sql">true</property>
- <mappingresource="examples/entity/Employee.hbm.xml"/>
- <mappingresource="examples/entity/Department.hbm.xml"/>
- </session-factory>
- </hibernate-configuration>
jdbc.dicon
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
- "http://www.seasar.org/dtd/components21.dtd">
- <componentsnamespace="jdbc">
- <includepath="jta.dicon"/>
- <componentname="xaDataSource"class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
- <propertyname="driverClassName">
- "org.hsqldb.jdbcDriver"
- </property>
- <propertyname="URL">
- "jdbc:hsqldb:hsql://localhost:9001"
- </property>
- <propertyname="user">"sa"</property>
- <propertyname="password">""</property>
- </component>
- <componentname="connectionPool"class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
- <propertyname="timeout">600</property>
- <propertyname="maxPoolSize">10</property>
- <propertyname="allowLocalTx">true</property>
- <destroyMethodname="close"/>
- </component>
- <componentname="DataSource"class="org.seasar.extension.dbcp.impl.DataSourceImpl"/>
- </components>
s2hibernate.dicon
- <?xmlversion="1.0"encoding="Shift_JIS"?>
- <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
- "http://www.seasar.org/dtd/components.dtd">
- <componentsnamespace="s2hibernate">
- <includepath="j2ee.dicon"/>
- <componentclass="org.seasar.hibernate3.impl.S2SessionFactoryImpl">
- <initMethodname="setConfigPath">
- <arg>"hibernate.cfg.xml"</arg>
- </initMethod>
- </component>
- <componentclass="org.seasar.hibernate3.dao.impl.HibernateDaoMetaDataFactoryImpl"/>
- <componentname="readOnly"class="org.seasar.hibernate3.interceptor.ReadOnlySessionInterceptor"/>
- <componentname="interceptor"class="org.seasar.hibernate3.dao.interceptors.S2HibernateDaoInterceptor"/>
- </components>
log4j.properties
- log4j.category.org.seasar=DEBUG, C
- log4j.additivity.org.seasar=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.category.net.sf.hibernate=DEBUG, C
- log4j.additivity.net.sf.hibernate=false
DepartmentAutoDao.dicon
- <?xmlversion="1.0"encoding="Shift_JIS"?>
- <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
- "http://www.seasar.org/dtd/components.dtd">
- <components>
- <includepath="s2hibernate.dicon"/>
- <componentclass="examples.dao.DepartmentAutoDao">
- <aspect>j2ee.requiredTx</aspect>
- <aspect>s2hibernate.interceptor</aspect>
- </component>
- </components>
Employee.dicon
- <?xmlversion="1.0"encoding="Shift_JIS"?>
- <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
- "http://www.seasar.org/dtd/components.dtd">
- <components>
- <includepath="j2ee.dicon"/>
- <componentclass="org.seasar.hibernate3.impl.S2SessionFactoryImpl"/>
- <componentclass="examples.dao.EmployeeDaoImpl">
- <aspect>j2ee.requiredTx</aspect>
- </component>
- </components>
EmployeeAutoDao.dicon
- <?xmlversion="1.0"encoding="Shift_JIS"?>
- <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
- "http://www.seasar.org/dtd/components.dtd">
- <components>
- <includepath="s2hibernate.dicon"/>
- <componentclass="examples.dao.EmployeeAutoDao">
- <aspect>j2ee.requiredTx</aspect>
- <aspect>s2hibernate.interceptor</aspect>
- </component>
- </components>
DepartmentAutoDao.java
- package examples.dao;
- import java.util.List;
- import examples.entity.Department;
- publicinterface DepartmentAutoDao {
- public Class<Department> BEAN = Department.class;
- //load
- public Department load(short empno);
- //引數にListをしていする場合
- public String getDepartmentByDeptno_ARGS = "deptno";
- public String getDepartmentByDeptno_EAGER = "employee";
- public Department getDepartmentByDeptno( int deptno );
- public String findAll_EAGER = "employee";
- public List<?> findAll( );
- //public String getDept_HQL = "from Department as d where d.deptno = :deptno";
- // public String getDept_HQL = "select d from Department as d where d.deptno = :deptno";
- public String getDept_HQL = "from Department as d where d.deptno = :deptno";
- public String getDept_ARGS = "deptno";
- public Department getDept(int deptno);
- public String getDeptName_HQL = "select d.dname from Department as d where d.deptno = :deptno";
- public String getDeptName_ARGS = "deptno";
- public String getDeptName(int deptno);
- }
EmployeeAutoDao.java
- package examples.dao;
- import java.math.BigDecimal;
- import java.util.List;
- import examples.dto.EmployeeSalDto;
- import examples.dto.EmployeeSearchDto;
- import examples.dto.EmployeeSimpleDto;
- import examples.entity.Employee;
- publicinterface EmployeeAutoDao {
- public Class<Employee> BEAN = Employee.class;
- //追加、削除、更新、儲存or更新をする場合
- publicvoid save(Employee employee);
- publicvoid delete(Employee employee);
- publicvoid update(Employee employee);
- publicvoid saveOrUpdate(Employee employee);
- //オブジェクトの取得
- public Employee load(Integer empno);
- //オブジェクトをロックをかけて取得
- public String loadLock_LOCK = "UPGRADE" ;
- public Employee loadLock(Integer empno);
- //HQLを指定しないで実行する場合
- public String getEmployeeByEmpNo_ARGS = "empno";
- public Employee getEmployeeByEmpNo(Integer empNo);
- public String getEmployeeByJobDeptno_ARGS = "job,deptno";
- public List<?> getEmployeeByJobDeptno(String job, int deptno);
- //HQLを指定して実行する場合
- public String getHQLAllEmployee_HQL = "from Employee emp order by emp.empno";
- public List<?> getHQLAllEmployee();
- //何も指定していない場合
- public List<?> getAllEmployee();
- //firstResult,maxResultsを指定する場合
- public String getEmployeeList_ARGS = "firstResult,maxResults";
- public String getEmployeeList_HQL = "from Employee emp order by emp.empno";
- public List<?> getEmployeeList(int firstResult ,int MaxResults );
- //戻り値がintの場合
- public String getEmployeeCount_HQL = "select count(emp) from Employee emp";
- publicint getEmployeeCount();
- //戻り値がStringの場合
- public String getEmployeeNameById_HQL
- = "select emp.ename from Employee emp where empno = :employeeId ";
- public String getEmployeeNameById_ARGS = "employeeId";
- public String getEmployeeNameById(Integer employeeId);
- //NamedQuery呼び出しを使う場合
- //(Employee.hbm.xmlの"examples.hibernate.dao.EmployeeAutoDao_getEmployeeByJob"に対応)
- public String getEmployeeByJob_ARGS = "job";
- public List<?> getEmployeeByJob(String job);
- //NamedQueryで戻り値がStringになるようなSQL文を使う場合
- //(Employee.hbm.xmlの"examples.hibernate.dao.EmployeeAutoDao_getSQLEmployeeNameById"に対応)
- public String getSQLEmployeeNameById_ARGS = "employeeId";
- public String getSQLEmployeeNameById(Integer employeeId);
- //NamedQueryで戻り値がLongになるようなSQL文を使う場合
- //(Employee.hbm.xmlの"getSQLEmployeeIdByName"NamedQueryを実行)
- public String getSQLEmployeeIdByName_ARGS = "employeeName";
- public Integer getSQLEmployeeIdByName(String employeeName);
- //引數にListをしていする場合
- public String getEmployeeByIdList_HQL = "from Employee emp where emp.empno in (:empnoList)";
- public String getEmployeeByIdList_ARGS = "empnoList";
- public List<?> getEmployeeByIdList( List<?> empnoList );
- //OrderByのフィールドを指定する場合
- public String getEmployeeOrderByField_ARGS = "orderBy";
- public List<?> getEmployeeOrderByField( String orderBy );
- //ARGSアノテーションに比較オペレーター(>)を指定した場合
- public String getEmployeeByGtSal_ARGS = "sal >";
- public List<?> getEmployeeByGtSal( BigDecimal sal );
- //ARGSアノテーションに比較オペレーター(<)を指定した場合
- public String getEmployeeByLtSal_ARGS = "sal <";
- public List<?> getEmployeeByLtSal( BigDecimal sal );
- //ARGSアノテーションに比較オペレーター(>,<)を指定した場合
- //指定したフィールドが指定した範囲の値のオブジェクトを取得したいとき
- public String getEmployeeByGtLtSal_ARGS = "sal >,sal <";
- public List<?> getEmployeeByGtLtSal( BigDecimal BigDecimal ,BigDecimal toSal );
- //ARGSアノテーションに比較オペレーター(=)を指定した場合
- public String getEmployeeByJobDeptnoEq_ARGS = "job =,deptno =";
- public List<?> getEmployeeByJobDeptnoEq(String job, int deptno);
- //ARGSアノテーションに比較オペレーター(like)を指定した場合
- public String getEmployeeByLikeEmane_ARGS = "ename like";
- public List<?> getEmployeeByLikeEmane( String ename );
- //ARGSアノテーションに比較オペレーター(in)を指定した場合
- public String getEmployeeByInIdList_ARGS = "empno in";
- public List<?> getEmployeeByInIdList( List<?> empnoList );
- //ARGSアノテーションに比較オペレーター(>=,<=)を指定した場合(EmployeeSearchDto)
- //指定したフィールドが指定した範囲の値のオブジェクトを取得したいとき
- public String getEmployeeByDto_PROPERTY = "empno,ename,job,mgr,deptno," +
- "hiredate >= fromHiredate,hiredate <= toHiredate,sal >= fromSal,sal <= toSal";
- public List<?> getEmployeeByDto( EmployeeSearchDto dto );
- //dtoとしてEmployeeを指定して処理する場合
- public List<?> getEmployeeByEmployeeDtoAuto( Employee dto );
- //dtoとしてEmployeeSimpleDtoを指定して処理する場合
- public List<?> getEmployeeByEmployeeSimpleDtoAuto( EmployeeSimpleDto dto );
- //Dtoの値をHQLに渡して実行する場合
- public String getEmployeeBySalDto_PROPERTY = "fromSal,toSal";
- public List<?> getEmployeeBySalDto( EmployeeSalDto dto );
- }
EmployeeDao.java
- package examples.dao;
- import examples.entity.Employee;
- publicinterface EmployeeDao {
- public Employee getEmployee(int empno);
- publicvoid save(Employee employee);
- }
EmployeeDaoImpl.java
- package examples.dao;
- import java.util.List;
- import org.hibernate.Query;
- import org.seasar.hibernate3.S2SessionFactory;
- import examples.entity.Employee;
- publicclass EmployeeDaoImpl implements EmployeeDao {
- privatestaticfinal String HQL = "from Employee where empno = ?";
- private S2SessionFactory sessionFactory_;
- public EmployeeDaoImpl(S2SessionFactory sessionFactory) {
- sessionFactory_ = sessionFactory;
- }
- public Employee getEmployee(int empno) {
- // List result = sessionFactory_.getSession().find(
- // HQL, new Integer(empno), Hibernate.INTEGER);
- Query query = sessionFactory_.getSession().createQuery(HQL);
- query.setInteger(0, new Integer(empno));
- List<?> result = query.list();
- if (result.size() > 0) {
- return (Employee) result.get(0);
- } else {
- returnnull;
- }
- }
- publicvoid save(Employee employee) {
- sessionFactory_.getSession().save(employee);
- }
- }
EmployeeSalDto.java
- package examples.dto;
- import java.math.BigDecimal;
- publicclass EmployeeSalDto {
- private BigDecimal fromSal;
- private BigDecimal toSal;
- public EmployeeSalDto() {
- }
- public BigDecimal getFromSal() {
- return fromSal;
- }
- publicvoid setFromSal(BigDecimal fromSal) {
- this.fromSal = fromSal;
- }
- public BigDecimal getToSal() {
- return toSal;
- }
- publicvoid setToSal(BigDecimal toSal) {
- this.toSal = toSal;
- }
- }
EmployeeSearchDto.java
- package examples.dto;
- import java.io.Serializable;
- import java.math.BigDecimal;
- publicclass EmployeeSearchDto implements Serializable {
- privatestaticfinallong serialVersionUID = 1L;
- private Integer empno;
- private String ename;
- private String job;
- private Short mgr;
- private java.util.Date fromHiredate;
- private java.util.Date toHiredate;
- private BigDecimal fromSal;
- private BigDecimal toSal;
- private Integer deptno;
- public EmployeeSearchDto() {
- }
- public Integer getEmpno() {
- returnthis.empno;
- }
- publicvoid setEmpno(Integer empno) {
- this.empno = empno;
- }
- public java.lang.String getEname() {
- returnthis.ename;
- }
- publicvoid setEname(java.lang.String ename) {
- this.ename = ename;
- }
- public java.lang.String getJob() {
- returnthis.job;
- }
- publicvoid setJob(java.lang.String job) {
- this.job = job;
- }
- public Short getMgr() {
- returnthis.mgr;
- }
- publicvoid setMgr(Short mgr) {
- this.mgr = mgr;
- }
- public java.util.Date getFromHiredate() {
- returnthis.fromHiredate;
- }
- publicvoid setFromHiredate(java.util.Date fromHiredate) {
- this.fromHiredate = fromHiredate;
- }
- public java.util.Date getToHiredate() {
- returnthis.toHiredate;
- }
- publicvoid setToHiredate(java.util.Date toHiredate) {
- this.toHiredate = toHiredate;
- }
- public BigDecimal getFromSal() {
- returnthis.fromSal;
- }
- publicvoid setFromSal(BigDecimal fromSal) {
- this.fromSal = fromSal;
- }
- public BigDecimal getToSal() {
- returnthis.toSal;
- }
- publicvoid setToSal(BigDecimal toSal) {
- this.toSal = toSal;
- }
- public Integer getDeptno() {
- returnthis.deptno;
- }
- publicvoid setDeptno(Integer deptno) {
- this.deptno = deptno;
- }
- public String toString() {
- StringBuffer buf = new StringBuffer("[");
- buf.append(empno).append(", ");
- buf.append(ename).append(", ");
- buf.append(job).append(", ");
- buf.append(mgr).append(", ");
- buf.append(fromHiredate).append(", ");
- buf.append(toHiredate).append(", ");
- buf.append(fromSal).append(", ");
- buf.append(toSal).append(", ");
- buf.append(deptno).append("]");
- return buf.toString();
- }
- }
EmployeeSimpleDto.java
- package examples.dto;
- import examples.entity.Employee;
- publicclass EmployeeSimpleDto extends Employee {
- privatestaticfinallong serialVersionUID = 1L;
- private String orderBy;
- public String getOrderBy() {
- return orderBy;
- }
- publicvoid setOrderBy(String orderBy) {
- this.orderBy = orderBy;
- }
- }
Department.java
- package examples.entity;
- import java.io.Serializable;
- import java.util.Set;
- publicclass Department implements Serializable {
- privatestaticfinallong serialVersionUID = 1L;
- privateint deptno;
- private String dname;
- private String loc;
- private Set<Employee> employee ;
- public Department() {
- }
- publicint getDeptno() {
- returnthis.deptno;
- }
- publicvoid setDeptno(int deptno) {
- this.deptno = deptno;
- }
- public java.lang.String getDname() {
- returnthis.dname;
- }
- publicvoid setDname(java.lang.String dname) {
- this.dname = dname;
- }
- public java.lang.String getLoc() {
- returnthis.loc;
- }
- publicvoid setLoc(java.lang.String loc) {
- this.loc = loc;
- }
- public Set<Employee> getEmployee() {
- return employee;
- }
- publicvoid setEmployee(Set<Employee> employee) {
- this.employee = employee;
- }
- publicboolean equals(Object other) {
- if ( !(other instanceof Department) ) returnfalse;
- Department castOther = (Department) other;
- returnthis.getDeptno() == castOther.getDeptno();
- }
- public String toString() {
- StringBuffer buf = new StringBuffer();
- buf.append("/n").append(deptno).append(", ");
- buf.append(dname).append(", ");
- buf.append(loc).append(",/n");
- buf.append(employee);
- return buf.toString();
- }
- publicint hashCode() {
- return (int) this.getDeptno();
- }
- }
Employee.java
- package examples.entity;
- import java.io.Serializable;
- import java.math.BigDecimal;
- publicclass Employee implements Serializable {
- privatestaticfinallong serialVersionUID = 1L;
- private Integer empno;
- private String ename;
- private String job;
- private Short mgr;
- private java.util.Date hiredate;
- private BigDecimal sal;
- private Float comm;
- private Integer deptno;
- public Employee(Integer empno, java.lang.String ename, java.lang.String job, Short mgr, java.util.Date hiredate, BigDecimal sal, Float comm, Integer deptno) {
- this.empno = empno;
- this.ename = ename;
- this.job = job;
- this.mgr = mgr;
- this.hiredate = hiredate;
- this.sal = sal;
- this.comm = comm;
- this.deptno = deptno;
- }
- public Employee() {
- }
- public Employee(Integer empno) {
- this.empno = empno;
- }
- public Integer getEmpno() {
- returnthis.empno;
- }
- publicvoid setEmpno(Integer empno) {
- this.empno = empno;
- }
- public java.lang.String getEname() {
- returnthis.ename;
- }
- publicvoid setEname(java.lang.String ename) {
- this.ename = ename;
- }
- public java.lang.String getJob() {
- returnthis.job;
- }
- publicvoid setJob(java.lang.String job) {
- this.job = job;
- }
- public Short getMgr() {
- returnthis.mgr;
- }
- publicvoid setMgr(Short mgr) {
- this.mgr = mgr;
- }
- public java.util.Date getHiredate() {
- returnthis.hiredate;
- }
- publicvoid setHiredate(java.util.Date hiredate) {
- this.hiredate = hiredate;
- }
- public BigDecimal getSal() {
- returnthis.sal;
- }
- publicvoid setSal(BigDecimal sal) {
- this.sal = sal;
- }
- public Float getComm() {
- returnthis.comm;
- }
- publicvoid setComm(Float comm) {
- this.comm = comm;
- }
- public Integer getDeptno() {
- returnthis.deptno;
- }
- publicvoid setDeptno(Integer deptno) {
- this.deptno = deptno;
- }
- publicboolean equals(Object other) {
- if ( !(other instanceof Employee) ) returnfalse;
- Employee castOther = (Employee) other;
- returnthis.getEmpno() == castOther.getEmpno();
- }
- publicint hashCode() {
- returnthis.getEmpno().intValue();
- }
- public String toString() {
- StringBuffer buf = new StringBuffer();
- buf.append("[");
- buf.append(deptno).append(", ");
- buf.append(empno).append(", ");
- buf.append(ename).append(", ");
- buf.append(job).append(", ");