日系框架之seasar2(S2JDBC)

来源:互联网 发布:交换机镜像端口个数 编辑:程序博客网 时间:2024/04/24 15:41

 官方主页:http://www.seasar.org/

插件下载地址:http://www.seasar.org/eclipse/updates/3.3

建立工程如下:

 

代码如下(从上往下):

EmployeeDto.java

  1. package com.s2jdbc.dto;
  2. import com.s2jdbc.entity.Employee;
  3. public class EmployeeDto extends Employee {
  4.     public String departmentName;
  5. }

SelectWithDepartmentDto.java

  1. package com.s2jdbc.dto;
  2. public class SelectWithDepartmentDto {
  3.     public Integer salaryMin;
  4.     public Integer salaryMax;
  5. }

Address.java

  1. package com.s2jdbc.entity;
  2. import javax.persistence.Entity;
  3. import javax.persistence.GeneratedValue;
  4. import javax.persistence.Id;
  5. import javax.persistence.OneToOne;
  6. import javax.persistence.Version;
  7. @Entity
  8. public class Address {
  9.     @Id
  10.     @GeneratedValue
  11.     public Integer id;
  12.     public String name;
  13.     @OneToOne(mappedBy = "address")
  14.     public Employee employee;
  15.     @Version
  16.     public Integer version;
  17. }

Department.java

  1. package com.s2jdbc.entity;
  2. import java.util.List;
  3. import javax.persistence.Entity;
  4. import javax.persistence.GeneratedValue;
  5. import javax.persistence.Id;
  6. import javax.persistence.OneToMany;
  7. import javax.persistence.Version;
  8. @Entity
  9. public class Department {
  10.     @Id
  11.     @GeneratedValue
  12.     public Integer id;
  13.     public String name;
  14.     @OneToMany(mappedBy = "department")
  15.     public List<Employee> employeeList;
  16.     @Version
  17.     public Integer version;
  18. }

Employee.java

  1. package com.s2jdbc.entity;
  2. import javax.persistence.Entity;
  3. import javax.persistence.GeneratedValue;
  4. import javax.persistence.Id;
  5. import javax.persistence.ManyToOne;
  6. import javax.persistence.OneToOne;
  7. import javax.persistence.Version;
  8. @Entity
  9. public class Employee {
  10.     @Id
  11.     @GeneratedValue
  12.     public Integer id;
  13.     public String name;
  14.     //public JobType jobType;
  15.     public String jobType;
  16.     public Integer salary;
  17.     public Integer departmentId;
  18.     @ManyToOne
  19.     public Department department;
  20.     public Integer addressId;
  21.     @OneToOne
  22.     public Address address;
  23.     @Version
  24.     public Integer version;
  25. }

JobType.java

  1. package com.s2jdbc.entity;
  2. public enum JobType {
  3.     CLERK {
  4.         public int calculateBonus(int salary) {
  5.             return salary;
  6.         }
  7.     },
  8.     SALESMAN {
  9.         public int calculateBonus(int salary) {
  10.             return salary * 2;
  11.         }
  12.     },
  13.     MANAGER {
  14.         public int calculateBonus(int salary) {
  15.             return salary * 3;
  16.         }
  17.     },
  18.     ANALYST {
  19.         public int calculateBonus(int salary) {
  20.             return salary * 4;
  21.         }
  22.     },
  23.     PRESIDENT {
  24.         public int calculateBonus(int salary) {
  25.             return salary * 5;
  26.         }
  27.     };
  28.     public abstract int calculateBonus(int salary);
  29. }

selectWithDepartment.sql

  1. select e.*, d.name as department_name
  2. from employee e left outer join department d on e.department_id = d.id
  3. /*BEGIN*/
  4. where
  5.   /*IF salaryMin != null*/
  6.     e.salary >= /*salaryMin*/1000
  7.   /*END*/
  8.   /*IF salaryMax != null*/
  9.     and e.salary <= /*salaryMax*/2000
  10.   /*END*/
  11. /*END*/
  12. order by e.salary

DeleteTest.java

  1. package com.s2jdbc.work;
  2. import org.seasar.extension.jdbc.JdbcManager;
  3. import org.seasar.framework.container.S2Container;
  4. import org.seasar.framework.container.factory.S2ContainerFactory;
  5. import com.s2jdbc.entity.Employee;
  6. public class DeleteTest {
  7.     public static void main(String[] args) {
  8.         
  9.         S2Container container = S2ContainerFactory.create("app.dicon");
  10.         container.init();
  11.         JdbcManager jdbcManager = (JdbcManager)container.getComponent(JdbcManager.class);
  12.         
  13.         Employee emp = jdbcManager.from(Employee.class).where("id = ?"1).getSingleResult();
  14.         jdbcManager.delete(emp).execute();
  15.         emp = jdbcManager.from(Employee.class).where("id = ?"1).getSingleResult();
  16.         System.out.println(emp);
  17.     }
  18. }

InsertTest.java

  1. package com.s2jdbc.work;
  2. import org.seasar.extension.jdbc.JdbcManager;
  3. import org.seasar.framework.container.S2Container;
  4. import org.seasar.framework.container.factory.S2ContainerFactory;
  5. import com.s2jdbc.entity.Employee;
  6. import com.s2jdbc.entity.JobType;
  7. public class InsertTest {
  8.     public static void main(String[] args) {
  9.         
  10.         S2Container container = S2ContainerFactory.create("app.dicon");
  11.         container.init();
  12.         JdbcManager jdbcManager = (JdbcManager)container.getComponent(JdbcManager.class);
  13.         
  14.         Employee emp = new Employee();
  15.         emp.name = "test";
  16.         emp.jobType = JobType.ANALYST.name();
  17.         emp.salary = 300;
  18.         
  19.         //======================
  20.         emp.departmentId = 1;
  21.         emp.addressId = 1;
  22.         //======================
  23.         
  24.         jdbcManager.insert(emp).execute();
  25.         System.out.println(emp.id);
  26.     }
  27. }
SearchTest.java
  1. package com.s2jdbc.work;
  2. import java.util.List;
  3. import org.seasar.extension.jdbc.IterationCallback;
  4. import org.seasar.extension.jdbc.IterationContext;
  5. import org.seasar.extension.jdbc.JdbcManager;
  6. import org.seasar.extension.jdbc.where.SimpleWhere;
  7. import org.seasar.framework.beans.util.BeanMap;
  8. import org.seasar.framework.container.S2Container;
  9. import org.seasar.framework.container.factory.S2ContainerFactory;
  10. import com.s2jdbc.dto.EmployeeDto;
  11. import com.s2jdbc.dto.SelectWithDepartmentDto;
  12. import com.s2jdbc.entity.Employee;
  13. public class SearchTest {
  14.     
  15.     private static final String SQL_FILE = "com/s2jdbc/sql/employee/selectWithDepartment.sql";
  16.     
  17.     private static final String SELECT_EMPLOYEE_DTO = "select e.*, d.name as department_name"
  18.                                                     + " from employee e left outer join department d"
  19.                                                     + " on e.department_id = d.id"
  20.                                                     + " where d.id = ?";
  21.     
  22.     private static final String SELECT_COUNT = "select count(*) from employee";
  23.     
  24.     private static final String LABEL_VALUE = "select name as label, id as value from employee";
  25.     
  26.     public static void main(String[] args) {
  27.         
  28.         S2Container container = S2ContainerFactory.create("app.dicon");
  29.         container.init();
  30.         JdbcManager jdbcManager = (JdbcManager)container.getComponent(JdbcManager.class);
  31.         //ResultCount
  32.         long count = jdbcManager.from(Employee.class).getCount();
  33.         System.out.println(count);
  34.         
  35.         //ResultList
  36.         List<Employee> results = jdbcManager.from(Employee.class).getResultList();
  37.         for (Employee e : results) {
  38.             System.out.println(e.name);
  39.         }
  40.         
  41.         //SingleResult
  42.         Employee result = jdbcManager.from(Employee.class).where("id = ?"1).getSingleResult();
  43.         System.out.println(result.name);
  44.         
  45.         //Iterate
  46.         long sum = jdbcManager.from(Employee.class).iterate(
  47.                 new IterationCallback<Employee, Long>() {
  48.                     private long sum;
  49.                     public Long iterate(Employee emp, IterationContext context) {
  50.                         sum += emp.salary;
  51.                         return sum;
  52.                     }
  53.                 });
  54.         System.out.println(sum);
  55.         
  56.         Employee emp = jdbcManager.from(Employee.class).iterate(
  57.                 new IterationCallback<Employee, Employee>() {
  58.                     private long sum;
  59.                     public Employee iterate(Employee emp,
  60.                             IterationContext context) {
  61.                         sum += emp.salary;
  62.                         if (sum > 10000) {
  63.                             context.setExit(true);
  64.                         }
  65.                         return emp;
  66.                     }
  67.                 });
  68.         System.out.println(emp.name);
  69.         
  70.         //OrderBy
  71.         results = jdbcManager.from(Employee.class).orderBy("name desc").getResultList();
  72.         for (Employee e : results) {
  73.             System.out.println(e.name);
  74.         }
  75.         
  76.         //Join
  77.         results = jdbcManager.from(Employee.class).leftOuterJoin("department").leftOuterJoin("address").getResultList();
  78.         for (Employee e : results) {
  79.             System.out.println(e.name + ", " + e.department.name + ", " + e.address.name);
  80.         }
  81.         
  82.         //SimpleWhere
  83.         results = jdbcManager.from(Employee.class).leftOuterJoin("address").where(new SimpleWhere().starts("name""A").ends("address.name","1")).getResultList();
  84.         for (Employee e : results) {
  85.             System.out.println(e.name + ", " + e.address.name);
  86.         }
  87.         
  88.         //Paging
  89.         results = jdbcManager.from(Employee.class).orderBy("id").limit(5).offset(4).getResultList();
  90.         for (Employee e : results) {
  91.             System.out.println(e.id);
  92.         }
  93.         
  94.         //SqlFile
  95.         SelectWithDepartmentDto dto = new SelectWithDepartmentDto();
  96.         dto.salaryMin = 1200;
  97.         dto.salaryMax = 1800;
  98.         List<EmployeeDto> dto_results = jdbcManager.selectBySqlFile(EmployeeDto.class, SQL_FILE, dto).getResultList();
  99.         for (EmployeeDto e : dto_results) {
  100.             System.out.println(e.name + " " + e.salary + " " + e.departmentName);
  101.         }
  102.         
  103.         //SqlGetResultList
  104.         dto_results = (List<EmployeeDto>)jdbcManager.selectBySql(EmployeeDto.class, SELECT_EMPLOYEE_DTO, 1).getResultList();
  105.         for (EmployeeDto e : dto_results) {
  106.             System.out.println(e.name + " " + e.departmentName);
  107.         }
  108.         
  109.         //SqlGetSingleResult
  110.         Integer result_count = jdbcManager.selectBySql(Integer.class, SELECT_COUNT).getSingleResult();
  111.         System.out.println(result_count);
  112.         
  113.         //SqlMap
  114.         List<BeanMap> map_results = jdbcManager.selectBySql(BeanMap.class, LABEL_VALUE).getResultList();
  115.         for (BeanMap m : map_results) {
  116.             System.out.println(m);
  117.         }
  118.     }
  119. }

UpdateTest.java

  1. package com.s2jdbc.work;
  2. import org.seasar.extension.jdbc.JdbcManager;
  3. import org.seasar.framework.container.S2Container;
  4. import org.seasar.framework.container.factory.S2ContainerFactory;
  5. import com.s2jdbc.entity.Employee;
  6. public class UpdateTest {
  7.     public static void main(String[] args) {
  8.         
  9.         S2Container container = S2ContainerFactory.create("app.dicon");
  10.         container.init();
  11.         JdbcManager jdbcManager = (JdbcManager)container.getComponent(JdbcManager.class);
  12.         
  13.         Employee emp = jdbcManager.from(Employee.class).where("id = ?"1).getSingleResult();
  14.         emp.name = "hoge";
  15.         System.out.println(emp.version);
  16.         jdbcManager.update(emp).execute();
  17.         System.out.println(emp.version);
  18.     }
  19. }

app.dicon

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
  3.     "http://www.seasar.org/dtd/components24.dtd">
  4. <components>
  5.     <include path="convention.dicon"/>
  6.     <include path="aop.dicon"/>
  7.     <include path="s2jdbc.dicon"/>
  8. </components>

convention.dicon

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
  3.     "http://www.seasar.org/dtd/components24.dtd">
  4. <components>
  5.     <component class="org.seasar.framework.convention.impl.NamingConventionImpl">
  6.         <initMethod name="addRootPackageName">
  7.             <arg>"com.s2jdbc"</arg>
  8.         </initMethod>
  9.     </component>
  10.     <component class="org.seasar.framework.convention.impl.PersistenceConventionImpl"/>
  11. </components>

creator.dicon

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
  3.     "http://www.seasar.org/dtd/components24.dtd">
  4. <components>
  5.     <include path="convention.dicon"/>
  6.     <include path="customizer.dicon"/>
  7.     <component class="org.seasar.framework.container.creator.ActionCreator"/>
  8.     <component class="org.seasar.framework.container.creator.DaoCreator"/>
  9.     <component class="org.seasar.framework.container.creator.DtoCreator"/>
  10.     <component class="org.seasar.framework.container.creator.DxoCreator"/>
  11.     <component class="org.seasar.framework.container.creator.HelperCreator"/>
  12.     <component class="org.seasar.framework.container.creator.LogicCreator"/>
  13.     <component class="org.seasar.framework.container.creator.PageCreator"/>
  14.     <component class="org.seasar.framework.container.creator.ServiceCreator"/>
  15.     <component class="org.seasar.framework.container.creator.InterceptorCreator"/>
  16.     <component class="org.seasar.framework.container.creator.ValidatorCreator"/>
  17.     <component class="org.seasar.framework.container.creator.ConverterCreator"/>
  18. </components>

customizer.dicon

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
  3.     "http://www.seasar.org/dtd/components24.dtd">
  4. <components>
  5.     <include path="default-customizer.dicon"/>
  6.     <!--
  7.         Teeda-Extension の Page・Action のカスタマイズは以下のコメントを参考にしてください.
  8.         アスペクトを設定する場合はポイントカットの指定を忘れないようにしてください.
  9.         app.dicon で aop.dicon 等必要な dicon をインクルードしてください.
  10.     -->
  11.     <!--
  12.     <component name="pageCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
  13.         <initMethod name="addAspectCustomizer">
  14.             <arg>"aop.traceInterceptor"</arg>
  15.             <arg>"do.*, initialize, prerender"</arg>
  16.         </initMethod>
  17.     </component>
  18.     -->
  19.     <!--
  20.         Dao のカスタマイズは以下のコメントを参考にしてください.
  21.         追加するカスタマイザ名は使用する Dao に合わせて変更してください.
  22.             S2Dao     : s2DaoCustomizer
  23.             Uuji      : uujiCustomizer
  24.             Kuina-Dao : kuinaDaoCustomizer
  25.         app.dicon で各 Dao で必要な dicon をインクルードしてください.
  26.             S2Dao     : dao.dicon
  27.             Uuji      : uuji.dicon
  28.             Kuina-Dao : kuina-dao.dicon
  29.     -->
  30.     <!--
  31.     <component name="daoCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
  32.         <initMethod name="addCustomizer">
  33.             <arg>traceCustomizer</arg>
  34.         </initMethod>
  35.         <initMethod name="addCustomizer">
  36.             <arg>s2DaoCustomizer</arg>
  37.         </initMethod>
  38.     </component>
  39.     -->
  40.     <!--
  41.         Dxo のカスタマイズは以下のコメントを参考にしてください.
  42.         app.dicon で dxo.dicon をインクルードしてください.
  43.     -->
  44.     <!--
  45.     <component name="dxoCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
  46.         <initMethod name="addCustomizer">
  47.             <arg>traceCustomizer</arg>
  48.         </initMethod>
  49.         <initMethod name="addCustomizer">
  50.             <arg>s2DxoCustomizer</arg>
  51.         </initMethod>
  52.     </component>
  53.     -->
  54.     <!--
  55.         その他のカスタマイズは以下のコメントを参考にしてください.
  56.         コンポーネント名はカスタマイズ対象に合わせて変更してください.
  57.         app.dicon で aop.dicon 等必要な dicon をインクルードしてください.
  58.     -->
  59.     <!--
  60.     <component name="xxxCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
  61.         <initMethod name="addCustomizer">
  62.             <arg>traceCustomizer</arg>
  63.         </initMethod>
  64.     </component>
  65.     -->
  66. </components>

env_ut.txt

  1. ut

env.txt

  1. ct

jdbc.dicon

 

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
  3.     "http://www.seasar.org/dtd/components21.dtd">
  4. <components namespace="jdbc">
  5.     <include path="jta.dicon"/>
  6.     <component name="xaDataSource"
  7.         class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  8.         <property name="driverClassName">
  9.             "com.mysql.jdbc.Driver"
  10.         </property>
  11.         <property name="URL">
  12.             "jdbc:mysql://localhost:3306/seasar2"
  13.         </property>
  14.         <property name="user">"root"</property>
  15.         <property name="password">"root"</property>
  16.     </component>
  17.     <!-- for HSQLDB -->
  18.     <!--
  19.     <component name="xaDataSource"
  20.         class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  21.         <property name="driverClassName">
  22.             "org.hsqldb.jdbcDriver"
  23.         </property>
  24.         <property name="URL">
  25.             "jdbc:hsqldb:file:"
  26.                 + @org.seasar.framework.util.ResourceUtil@getBuildDir(@examples.entity.Employee@class).getCanonicalPath()
  27.                 + "/data/test"
  28.         </property>
  29.         <property name="user">"sa"</property>
  30.         <property name="password">""</property>
  31.     </component>
  32.     -->
  33.     
  34.     <!-- for H2 -->
  35.     <!--
  36.     <component name="xaDataSource"
  37.         class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  38.         <property name="driverClassName">
  39.             "org.h2.Driver"
  40.         </property>
  41.         <property name="URL">
  42.             "jdbc:h2:file:"
  43.                 + @org.seasar.framework.util.ResourceUtil@getBuildDir(@examples.entity.JdbcManagerTest@class).getCanonicalPath()
  44.                 + "/data/demo;DB_CLOSE_ON_EXIT=FALSE"
  45.         </property>
  46.         <property name="user">"sa"</property>
  47.         <property name="password"></property>
  48.     </component>
  49.     -->
  50.     <!-- for Oracle -->
  51.     <!--
  52.     <component name="xaDataSource"
  53.         class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  54.         <property name="driverClassName">
  55.             "oracle.jdbc.driver.OracleDriver"
  56.         </property>
  57.         <property name="URL">
  58.             "jdbc:oracle:thin:@xxx:1521:xxx"
  59.         </property>
  60.         <property name="user">"xxx"</property>
  61.         <property name="password">"xxx"</property>
  62.     </component>
  63.     -->
  64.     <!-- for PostgreSQL -->
  65.     <!--
  66.     <component name="xaDataSource"
  67.         class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  68.         <property name="driverClassName">
  69.             "org.postgresql.Driver"
  70.         </property>
  71.         <property name="URL">
  72.           "jdbc:postgresql://localhost/TEST"
  73.         </property>
  74.         <property name="user">"xxxx"</property>
  75.         <property name="password">"xxxx"</property>
  76.     </component>
  77.     -->
  78.     <!-- MySQL
  79.     - MySQL4.0以下でマルチバイト文字を扱う場合には,URL指定の後に,
  80.         以下の接続パラメータを追加で指定してください.
  81.         useUnicode=true
  82.         characterEncoding=[MySQLのエンコーディングに対応した
  83.         Javaのエンコーディング名]
  84.         例:"jdbc:mysql://localhost:3306/test?useUnicode=true" +
  85.         "&characterEncoding=Windows-31J"
  86.         
  87.     - MySQL5.0以降で,エンコーディングがeucjpmsの列を扱う場合には,
  88.         URL指定の後に,以下の接続パラメータを追加で指定してください.
  89.         characterEncoding=UTF-8またはWindows-31J
  90.         characterSetResults=UTF-8またはWindows-31J
  91.         例:"jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8" +
  92.         "&characterSetResults=UTF-8"
  93.         この指定をしない場合,Java側でUCS-2⇔EUC_JP_Solarisの変換が
  94.         行なわれるため,ユーザー定義外字などの一部の文字が化けます.
  95.         この指定をすることで,MySQL側でeucjpms⇔ucs2⇔utf8(cp932)の
  96.         変換が行なわれ,Java側でUCS-2⇔UTF-8(Windows-31J)の変換が
  97.         行なわれるようになります.この結果,文字化けを防げます.
  98.         なおJIS X 0212(補助漢字)を使用する場合は,Windows-31Jではなく
  99.         UTF-8を指定する必要があります.
  100.         
  101.     - 上記以外の場合は,my.cnfでdefault-character-setの設定を適切に
  102.         (cp932やutf8など.デフォルトのlatin1は不可)行なっていれば,
  103.         文字化けは防げます.
  104.     <component name="xaDataSource"
  105.         class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  106.         <property name="driverClassName">
  107.             "com.mysql.jdbc.Driver"
  108.         </property>
  109.         <property name="URL">
  110.             "jdbc:mysql://localhost:3306/test"
  111.         </property>
  112.         <property name="user">"xxx"</property>
  113.         <property name="password">"xxx"</property>
  114.     </component>
  115.     -->
  116.     <!-- for SQLServer -->
  117.     <!--
  118.     <component name="xaDataSource"
  119.         class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  120.         <property name="driverClassName">
  121.             "net.sourceforge.jtds.jdbc.Driver"
  122.         </property>
  123.         <property name="URL">
  124.             "jdbc:jtds:sqlserver://localhost/TEST;instance=SQLEXPRESS"
  125.         </property>
  126.         <property name="user">"xxxx"</property>
  127.         <property name="password">"xxxx"</property>
  128.     </component>
  129.     -->
  130.     <component name="connectionPool"
  131.         class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
  132.         <property name="timeout">600</property>
  133.         <property name="maxPoolSize">10</property>
  134.         <property name="allowLocalTx">true</property>
  135.         <destroyMethod name="close"/>
  136.     </component>
  137.     <component name="DataSource"
  138.         class="org.seasar.extension.dbcp.impl.DataSourceImpl"
  139.     />
  140.     <!-- from JNDI -->
  141.     <!--
  142.     <component name="DataSource"
  143.         class="javax.sql.DataSource">
  144.         @org.seasar.extension.j2ee.JndiResourceLocator@lookup("java:comp/env/jdbc/DataSource")
  145.     </component>
  146.     -->
  147.     <!--
  148.     <component name="dataSource"
  149.         class="org.seasar.extension.datasource.impl.SelectableDataSourceProxy"/>
  150.     -->
  151. </components>

log4j.properties

  1. log4j.category.org.seasar=DEBUG, C
  2. log4j.additivity.org.seasar=false
  3. log4j.category.tutorial.chura=DEBUG, C
  4. log4j.additivity.tutorial.chura=false
  5. log4j.appender.C=org.apache.log4j.ConsoleAppender
  6. log4j.appender.C.Target=System.out
  7. log4j.appender.C.ImmediateFlush=true
  8. log4j.appender.C.layout=org.apache.log4j.PatternLayout
  9. log4j.appender.C.layout.ConversionPattern=%-5p %d [%t] %m%n
  10. log4j.rootLogger=INFO, A1
  11. log4j.appender.A1=org.apache.log4j.ConsoleAppender
  12. log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  13. log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

s2container.dicon

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" 
  3.     "http://www.seasar.org/dtd/components24.dtd">
  4. <components>
  5.     <include condition="#ENV == 'ut'" path="warmdeploy.dicon"/>
  6.     <include condition="#ENV == 'ct'" path="hotdeploy.dicon"/>
  7.     <include condition="#ENV != 'ut' and #ENV != 'ct'" path="cooldeploy.dicon"/>
  8. </components>

s2jdbc.dicon

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
  3.     "http://www.seasar.org/dtd/components24.dtd">
  4. <components>
  5.     <include path="jdbc.dicon"/>
  6.     <include path="s2jdbc-internal.dicon"/>
  7.     <component name="jdbcManager" class="org.seasar.extension.jdbc.manager.JdbcManagerImpl">
  8.         <property name="maxRows">0</property>
  9.         <property name="fetchSize">0</property>
  10.         <property name="queryTimeout">0</property>
  11.         <property name="dialect">mysqlDialect</property>
  12.         
  13.         <!--
  14.         <property name="dialect">db2390Dialect</property>
  15.         <property name="dialect">db2400Dialect</property>
  16.         <property name="dialect">db2Dialect</property>
  17.         <property name="dialect">derbyDialect</property>
  18.         <property name="dialect">firebirdDialect</property>
  19.         <property name="dialect">h2Dialect</property>
  20.         <property name="dialect">hsqlDialect</property>
  21.         <property name="dialect">interbaseDialect</property>
  22.         <property name="dialect">maxdbDialect</property>
  23.         <property name="dialect">mssql2005Dialect</property>
  24.         <property name="dialect">mssqlDialect</property>
  25.         <property name="dialect">mysqlDialect</property>
  26.         <property name="dialect">oracleDialect</property>
  27.         <property name="dialect">postgreDialect</property>
  28.         <property name="dialect">standardDialect</property>
  29.         <property name="dialect">sybaseDialect</property>
  30.         -->
  31.     </component>
  32. </components>

所需jar包:

MySQL

 

数据库,新建数据库名seasar2

  1. /*
  2. MySQL Data Transfer
  3. Source Host: localhost
  4. Source Database: seasar2
  5. Target Host: localhost
  6. Target Database: seasar2
  7. Date: 2008/08/22 14:13:10
  8. */
  9. SET FOREIGN_KEY_CHECKS=0;
  10. -- ----------------------------
  11. -- Table structure for address
  12. -- ----------------------------
  13. CREATE TABLE `address` (
  14.   `id` int(11) NOT NULL auto_increment,
  15.   `name` varchar(255) NOT NULL,
  16.   `version` int(11) NOT NULL,
  17.   PRIMARY KEY  (`id`)
  18. ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=latin1;
  19. -- ----------------------------
  20. -- Table structure for department
  21. -- ----------------------------
  22. CREATE TABLE `department` (
  23.   `id` int(11) NOT NULL auto_increment,
  24.   `name` varchar(255) NOT NULL,
  25.   `version` int(11) NOT NULL,
  26.   PRIMARY KEY  (`id`)
  27. ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
  28. -- ----------------------------
  29. -- Table structure for employee
  30. -- ----------------------------
  31. CREATE TABLE `employee` (
  32.   `id` int(11) NOT NULL auto_increment,
  33.   `name` varchar(255) NOT NULL,
  34.   `job_type` varchar(30) NOT NULL,
  35.   `salary` int(11) NOT NULL,
  36.   `department_id` int(11) NOT NULL,
  37.   `address_id` int(11) NOT NULL,
  38.   `version` int(11) NOT NULL,
  39.   PRIMARY KEY  (`id`)
  40. ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1;
  41. -- ----------------------------
  42. -- Records 
  43. -- ----------------------------
  44. INSERT INTO `address` VALUES ('1', 'STREET 1', '1');
  45. INSERT INTO `address` VALUES ('2', 'STREET 2', '1');
  46. INSERT INTO `address` VALUES ('3', 'STREET 3', '1');
  47. INSERT INTO `address` VALUES ('4', 'STREET 4', '1');
  48. INSERT INTO `address` VALUES ('5', 'STREET 5', '1');
  49. INSERT INTO `address` VALUES ('6', 'STREET 6', '1');
  50. INSERT INTO `address` VALUES ('7', 'STREET 7', '1');
  51. INSERT INTO `address` VALUES ('8', 'STREET 8', '1');
  52. INSERT INTO `address` VALUES ('9', 'STREET 9', '1');
  53. INSERT INTO `address` VALUES ('10', 'STREET 10', '1');
  54. INSERT INTO `address` VALUES ('11', 'STREET 11', '1');
  55. INSERT INTO `address` VALUES ('12', 'STREET 12', '1');
  56. INSERT INTO `address` VALUES ('13', 'STREET 13', '1');
  57. INSERT INTO `address` VALUES ('14', 'STREET 14', '1');
  58. INSERT INTO `department` VALUES ('1', 'ACCOUNTING', '1');
  59. INSERT INTO `department` VALUES ('2', 'RESEARCH', '1');
  60. INSERT INTO `department` VALUES ('3', 'SALES', '1');
  61. INSERT INTO `department` VALUES ('4', 'OPERATIONS', '1');
  62. INSERT INTO `employee` VALUES ('1', 'ALLEN', 'SALESMAN', '1600', '3', '1', '1');
  63. INSERT INTO `employee` VALUES ('2', 'WARD', 'SALESMAN', '1250', '3', '2', '1');
  64. INSERT INTO `employee` VALUES ('3', 'JONES', 'MANAGER', '2975', '2', '3', '1');
  65. INSERT INTO `employee` VALUES ('4', 'MARTIN', 'SALESMAN', '1250', '3', '4', '1');
  66. INSERT INTO `employee` VALUES ('5', 'BLAKE', 'MANAGER', '2850', '3', '5', '1');
  67. INSERT INTO `employee` VALUES ('6', 'CLARK', 'MANAGER', '2450', '1', '6', '1');
  68. INSERT INTO `employee` VALUES ('7', 'SCOTT', 'ANALYST', '3000', '2', '7', '1');
  69. INSERT INTO `employee` VALUES ('8', 'KING', 'PRESIDENT', '5000', '1', '8', '1');
  70. INSERT INTO `employee` VALUES ('9', 'TURNER', 'SALESMAN', '1500', '3', '9', '1');
  71. INSERT INTO `employee` VALUES ('10', 'ADAMS', 'CLERK', '1100', '2', '10', '1');
  72. INSERT INTO `employee` VALUES ('11', 'JAMES', 'CLERK', '950', '3', '11', '1');
  73. INSERT INTO `employee` VALUES ('12', 'FORD', 'ANALYST', '3000', '2', '12', '1');
  74. INSERT INTO `employee` VALUES ('13', 'MILLER', 'CLERK', '1300', '1', '13', '1');
  75. INSERT INTO `employee` VALUES ('14', 'SMITH', 'CLERK', '800', '2', '14', '1');

代码参考S2JDBC-Tutorial-2.4.27包中的程序,只对包名等少量修改。下载:http://s2container.seasar.org/2.4/ja/downloads.html

实际运用中发现:

creator.dicon

customizer.dicon

env_ut.txt

env.txt

s2container.dicon

上述5个文件可以省略。

注意:不敢保证上述文件是否在正式项目中省略仍能够使程序正常运行。

关于这些配置文件的介绍资料可参考:http://s2container.seasar.org/2.4/ja/stdDicon.html#s2container.dicon

 

另:Seasar2提供了比较强大的单体测试类:S2TestCase

演示代码如下:

  1. import org.seasar.extension.jdbc.JdbcManager;
  2. import org.seasar.extension.unit.S2TestCase;
  3. public class DeleteTest extends S2TestCase {
  4.     private JdbcManager jdbcManager;
  5.     protected void setUp() throws Exception {
  6.         include("app.dicon");
  7.     }
  8.     public void testDeleteTx() throws Exception {
  9.         Employee emp =
  10.             jdbcManager
  11.                 .from(Employee.class)
  12.                 .where("id = ?"1)
  13.                 .getSingleResult();
  14.         jdbcManager.delete(emp).execute();
  15.         emp =
  16.             jdbcManager
  17.                 .from(Employee.class)
  18.                 .where("id = ?"1)
  19.                 .getSingleResult();
  20.         System.out.println(emp);
  21.     }
  22. }