插件下载地址:http://www.seasar.org/eclipse/updates/3.3
建立工程如下:
代码如下(从上往下):
EmployeeDto.java
- package com.s2jdbc.dto;
- import com.s2jdbc.entity.Employee;
- public class EmployeeDto extends Employee {
- public String departmentName;
- }
SelectWithDepartmentDto.java
- package com.s2jdbc.dto;
- public class SelectWithDepartmentDto {
- public Integer salaryMin;
- public Integer salaryMax;
- }
Address.java
- package com.s2jdbc.entity;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.OneToOne;
- import javax.persistence.Version;
- @Entity
- public class Address {
- @Id
- @GeneratedValue
- public Integer id;
- public String name;
- @OneToOne(mappedBy = "address")
- public Employee employee;
- @Version
- public Integer version;
- }
Department.java
- package com.s2jdbc.entity;
- import java.util.List;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.OneToMany;
- import javax.persistence.Version;
- @Entity
- public class Department {
- @Id
- @GeneratedValue
- public Integer id;
- public String name;
- @OneToMany(mappedBy = "department")
- public List<Employee> employeeList;
- @Version
- public Integer version;
- }
Employee.java
- package com.s2jdbc.entity;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.Id;
- import javax.persistence.ManyToOne;
- import javax.persistence.OneToOne;
- import javax.persistence.Version;
- @Entity
- public class Employee {
- @Id
- @GeneratedValue
- public Integer id;
- public String name;
- //public JobType jobType;
- public String jobType;
- public Integer salary;
- public Integer departmentId;
- @ManyToOne
- public Department department;
- public Integer addressId;
- @OneToOne
- public Address address;
- @Version
- public Integer version;
- }
JobType.java
- package com.s2jdbc.entity;
- public enum JobType {
- CLERK {
- public int calculateBonus(int salary) {
- return salary;
- }
- },
- SALESMAN {
- public int calculateBonus(int salary) {
- return salary * 2;
- }
- },
- MANAGER {
- public int calculateBonus(int salary) {
- return salary * 3;
- }
- },
- ANALYST {
- public int calculateBonus(int salary) {
- return salary * 4;
- }
- },
- PRESIDENT {
- public int calculateBonus(int salary) {
- return salary * 5;
- }
- };
- public abstract int calculateBonus(int salary);
- }
selectWithDepartment.sql
- select e.*, d.name as department_name
- from employee e left outer join department d on e.department_id = d.id
- /*BEGIN*/
- where
- /*IF salaryMin != null*/
- e.salary >= /*salaryMin*/1000
- /*END*/
- /*IF salaryMax != null*/
- and e.salary <= /*salaryMax*/2000
- /*END*/
- /*END*/
- order by e.salary
DeleteTest.java
- package com.s2jdbc.work;
- import org.seasar.extension.jdbc.JdbcManager;
- import org.seasar.framework.container.S2Container;
- import org.seasar.framework.container.factory.S2ContainerFactory;
- import com.s2jdbc.entity.Employee;
- public class DeleteTest {
- public static void main(String[] args) {
- S2Container container = S2ContainerFactory.create("app.dicon");
- container.init();
- JdbcManager jdbcManager = (JdbcManager)container.getComponent(JdbcManager.class);
- Employee emp = jdbcManager.from(Employee.class).where("id = ?", 1).getSingleResult();
- jdbcManager.delete(emp).execute();
- emp = jdbcManager.from(Employee.class).where("id = ?", 1).getSingleResult();
- System.out.println(emp);
- }
- }
InsertTest.java
- package com.s2jdbc.work;
- import org.seasar.extension.jdbc.JdbcManager;
- import org.seasar.framework.container.S2Container;
- import org.seasar.framework.container.factory.S2ContainerFactory;
- import com.s2jdbc.entity.Employee;
- import com.s2jdbc.entity.JobType;
- public class InsertTest {
- public static void main(String[] args) {
- S2Container container = S2ContainerFactory.create("app.dicon");
- container.init();
- JdbcManager jdbcManager = (JdbcManager)container.getComponent(JdbcManager.class);
- Employee emp = new Employee();
- emp.name = "test";
- emp.jobType = JobType.ANALYST.name();
- emp.salary = 300;
- //======================
- emp.departmentId = 1;
- emp.addressId = 1;
- //======================
- jdbcManager.insert(emp).execute();
- System.out.println(emp.id);
- }
- }
- package com.s2jdbc.work;
- import java.util.List;
- import org.seasar.extension.jdbc.IterationCallback;
- import org.seasar.extension.jdbc.IterationContext;
- import org.seasar.extension.jdbc.JdbcManager;
- import org.seasar.extension.jdbc.where.SimpleWhere;
- import org.seasar.framework.beans.util.BeanMap;
- import org.seasar.framework.container.S2Container;
- import org.seasar.framework.container.factory.S2ContainerFactory;
- import com.s2jdbc.dto.EmployeeDto;
- import com.s2jdbc.dto.SelectWithDepartmentDto;
- import com.s2jdbc.entity.Employee;
- public class SearchTest {
- private static final String SQL_FILE = "com/s2jdbc/sql/employee/selectWithDepartment.sql";
- private static final String SELECT_EMPLOYEE_DTO = "select e.*, d.name as department_name"
- + " from employee e left outer join department d"
- + " on e.department_id = d.id"
- + " where d.id = ?";
- private static final String SELECT_COUNT = "select count(*) from employee";
- private static final String LABEL_VALUE = "select name as label, id as value from employee";
- public static void main(String[] args) {
- S2Container container = S2ContainerFactory.create("app.dicon");
- container.init();
- JdbcManager jdbcManager = (JdbcManager)container.getComponent(JdbcManager.class);
- //ResultCount
- long count = jdbcManager.from(Employee.class).getCount();
- System.out.println(count);
- //ResultList
- List<Employee> results = jdbcManager.from(Employee.class).getResultList();
- for (Employee e : results) {
- System.out.println(e.name);
- }
- //SingleResult
- Employee result = jdbcManager.from(Employee.class).where("id = ?", 1).getSingleResult();
- System.out.println(result.name);
- //Iterate
- long sum = jdbcManager.from(Employee.class).iterate(
- new IterationCallback<Employee, Long>() {
- private long sum;
- public Long iterate(Employee emp, IterationContext context) {
- sum += emp.salary;
- return sum;
- }
- });
- System.out.println(sum);
- Employee emp = jdbcManager.from(Employee.class).iterate(
- new IterationCallback<Employee, Employee>() {
- private long sum;
- public Employee iterate(Employee emp,
- IterationContext context) {
- sum += emp.salary;
- if (sum > 10000) {
- context.setExit(true);
- }
- return emp;
- }
- });
- System.out.println(emp.name);
- //OrderBy
- results = jdbcManager.from(Employee.class).orderBy("name desc").getResultList();
- for (Employee e : results) {
- System.out.println(e.name);
- }
- //Join
- results = jdbcManager.from(Employee.class).leftOuterJoin("department").leftOuterJoin("address").getResultList();
- for (Employee e : results) {
- System.out.println(e.name + ", " + e.department.name + ", " + e.address.name);
- }
- //SimpleWhere
- results = jdbcManager.from(Employee.class).leftOuterJoin("address").where(new SimpleWhere().starts("name", "A").ends("address.name","1")).getResultList();
- for (Employee e : results) {
- System.out.println(e.name + ", " + e.address.name);
- }
- //Paging
- results = jdbcManager.from(Employee.class).orderBy("id").limit(5).offset(4).getResultList();
- for (Employee e : results) {
- System.out.println(e.id);
- }
- //SqlFile
- SelectWithDepartmentDto dto = new SelectWithDepartmentDto();
- dto.salaryMin = 1200;
- dto.salaryMax = 1800;
- List<EmployeeDto> dto_results = jdbcManager.selectBySqlFile(EmployeeDto.class, SQL_FILE, dto).getResultList();
- for (EmployeeDto e : dto_results) {
- System.out.println(e.name + " " + e.salary + " " + e.departmentName);
- }
- //SqlGetResultList
- dto_results = (List<EmployeeDto>)jdbcManager.selectBySql(EmployeeDto.class, SELECT_EMPLOYEE_DTO, 1).getResultList();
- for (EmployeeDto e : dto_results) {
- System.out.println(e.name + " " + e.departmentName);
- }
- //SqlGetSingleResult
- Integer result_count = jdbcManager.selectBySql(Integer.class, SELECT_COUNT).getSingleResult();
- System.out.println(result_count);
- //SqlMap
- List<BeanMap> map_results = jdbcManager.selectBySql(BeanMap.class, LABEL_VALUE).getResultList();
- for (BeanMap m : map_results) {
- System.out.println(m);
- }
- }
- }
UpdateTest.java
- package com.s2jdbc.work;
- import org.seasar.extension.jdbc.JdbcManager;
- import org.seasar.framework.container.S2Container;
- import org.seasar.framework.container.factory.S2ContainerFactory;
- import com.s2jdbc.entity.Employee;
- public class UpdateTest {
- public static void main(String[] args) {
- S2Container container = S2ContainerFactory.create("app.dicon");
- container.init();
- JdbcManager jdbcManager = (JdbcManager)container.getComponent(JdbcManager.class);
- Employee emp = jdbcManager.from(Employee.class).where("id = ?", 1).getSingleResult();
- emp.name = "hoge";
- System.out.println(emp.version);
- jdbcManager.update(emp).execute();
- System.out.println(emp.version);
- }
- }
app.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="convention.dicon"/>
- <include path="aop.dicon"/>
- <include path="s2jdbc.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">
- <initMethod name="addRootPackageName">
- <arg>"com.s2jdbc"</arg>
- </initMethod>
- </component>
- <component class="org.seasar.framework.convention.impl.PersistenceConventionImpl"/>
- </components>
creator.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="convention.dicon"/>
- <include path="customizer.dicon"/>
- <component class="org.seasar.framework.container.creator.ActionCreator"/>
- <component class="org.seasar.framework.container.creator.DaoCreator"/>
- <component class="org.seasar.framework.container.creator.DtoCreator"/>
- <component class="org.seasar.framework.container.creator.DxoCreator"/>
- <component class="org.seasar.framework.container.creator.HelperCreator"/>
- <component class="org.seasar.framework.container.creator.LogicCreator"/>
- <component class="org.seasar.framework.container.creator.PageCreator"/>
- <component class="org.seasar.framework.container.creator.ServiceCreator"/>
- <component class="org.seasar.framework.container.creator.InterceptorCreator"/>
- <component class="org.seasar.framework.container.creator.ValidatorCreator"/>
- <component class="org.seasar.framework.container.creator.ConverterCreator"/>
- </components>
customizer.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="default-customizer.dicon"/>
- <!--
- Teeda-Extension の Page・Action のカスタマイズは以下のコメントを参考にしてください.
- アスペクトを設定する場合はポイントカットの指定を忘れないようにしてください.
- app.dicon で aop.dicon 等必要な dicon をインクルードしてください.
- -->
- <!--
- <component name="pageCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
- <initMethod name="addAspectCustomizer">
- <arg>"aop.traceInterceptor"</arg>
- <arg>"do.*, initialize, prerender"</arg>
- </initMethod>
- </component>
- -->
- <!--
- Dao のカスタマイズは以下のコメントを参考にしてください.
- 追加するカスタマイザ名は使用する Dao に合わせて変更してください.
- S2Dao : s2DaoCustomizer
- Uuji : uujiCustomizer
- Kuina-Dao : kuinaDaoCustomizer
- app.dicon で各 Dao で必要な dicon をインクルードしてください.
- S2Dao : dao.dicon
- Uuji : uuji.dicon
- Kuina-Dao : kuina-dao.dicon
- -->
- <!--
- <component name="daoCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
- <initMethod name="addCustomizer">
- <arg>traceCustomizer</arg>
- </initMethod>
- <initMethod name="addCustomizer">
- <arg>s2DaoCustomizer</arg>
- </initMethod>
- </component>
- -->
- <!--
- Dxo のカスタマイズは以下のコメントを参考にしてください.
- app.dicon で dxo.dicon をインクルードしてください.
- -->
- <!--
- <component name="dxoCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
- <initMethod name="addCustomizer">
- <arg>traceCustomizer</arg>
- </initMethod>
- <initMethod name="addCustomizer">
- <arg>s2DxoCustomizer</arg>
- </initMethod>
- </component>
- -->
- <!--
- その他のカスタマイズは以下のコメントを参考にしてください.
- コンポーネント名はカスタマイズ対象に合わせて変更してください.
- app.dicon で aop.dicon 等必要な dicon をインクルードしてください.
- -->
- <!--
- <component name="xxxCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
- <initMethod name="addCustomizer">
- <arg>traceCustomizer</arg>
- </initMethod>
- </component>
- -->
- </components>
env_ut.txt
- ut
env.txt
- ct
jdbc.dicon
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
- "http://www.seasar.org/dtd/components21.dtd">
- <components namespace="jdbc">
- <include path="jta.dicon"/>
- <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/seasar2"
- </property>
- <property name="user">"root"</property>
- <property name="password">"root"</property>
- </component>
- <!-- for HSQLDB -->
- <!--
- <component name="xaDataSource"
- class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
- <property name="driverClassName">
- "org.hsqldb.jdbcDriver"
- </property>
- <property name="URL">
- "jdbc:hsqldb:file:"
- + @org.seasar.framework.util.ResourceUtil@getBuildDir(@examples.entity.Employee@class).getCanonicalPath()
- + "/data/test"
- </property>
- <property name="user">"sa"</property>
- <property name="password">""</property>
- </component>
- -->
- <!-- for H2 -->
- <!--
- <component name="xaDataSource"
- class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
- <property name="driverClassName">
- "org.h2.Driver"
- </property>
- <property name="URL">
- "jdbc:h2:file:"
- + @org.seasar.framework.util.ResourceUtil@getBuildDir(@examples.entity.JdbcManagerTest@class).getCanonicalPath()
- + "/data/demo;DB_CLOSE_ON_EXIT=FALSE"
- </property>
- <property name="user">"sa"</property>
- <property name="password"></property>
- </component>
- -->
- <!-- for Oracle -->
- <!--
- <component name="xaDataSource"
- class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
- <property name="driverClassName">
- "oracle.jdbc.driver.OracleDriver"
- </property>
- <property name="URL">
- "jdbc:oracle:thin:@xxx:1521:xxx"
- </property>
- <property name="user">"xxx"</property>
- <property name="password">"xxx"</property>
- </component>
- -->
- <!-- for PostgreSQL -->
- <!--
- <component name="xaDataSource"
- class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
- <property name="driverClassName">
- "org.postgresql.Driver"
- </property>
- <property name="URL">
- "jdbc:postgresql://localhost/TEST"
- </property>
- <property name="user">"xxxx"</property>
- <property name="password">"xxxx"</property>
- </component>
- -->
- <!-- MySQL
- - MySQL4.0以下でマルチバイト文字を扱う場合には,URL指定の後に,
- 以下の接続パラメータを追加で指定してください.
- useUnicode=true
- characterEncoding=[MySQLのエンコーディングに対応した
- Javaのエンコーディング名]
- 例:"jdbc:mysql://localhost:3306/test?useUnicode=true" +
- "&characterEncoding=Windows-31J"
- - MySQL5.0以降で,エンコーディングがeucjpmsの列を扱う場合には,
- URL指定の後に,以下の接続パラメータを追加で指定してください.
- characterEncoding=UTF-8またはWindows-31J
- characterSetResults=UTF-8またはWindows-31J
- 例:"jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8" +
- "&characterSetResults=UTF-8"
- この指定をしない場合,Java側でUCS-2⇔EUC_JP_Solarisの変換が
- 行なわれるため,ユーザー定義外字などの一部の文字が化けます.
- この指定をすることで,MySQL側でeucjpms⇔ucs2⇔utf8(cp932)の
- 変換が行なわれ,Java側でUCS-2⇔UTF-8(Windows-31J)の変換が
- 行なわれるようになります.この結果,文字化けを防げます.
- なおJIS X 0212(補助漢字)を使用する場合は,Windows-31Jではなく
- UTF-8を指定する必要があります.
- - 上記以外の場合は,my.cnfでdefault-character-setの設定を適切に
- (cp932やutf8など.デフォルトのlatin1は不可)行なっていれば,
- 文字化けは防げます.
- <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/test"
- </property>
- <property name="user">"xxx"</property>
- <property name="password">"xxx"</property>
- </component>
- -->
- <!-- for SQLServer -->
- <!--
- <component name="xaDataSource"
- class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
- <property name="driverClassName">
- "net.sourceforge.jtds.jdbc.Driver"
- </property>
- <property name="URL">
- "jdbc:jtds:sqlserver://localhost/TEST;instance=SQLEXPRESS"
- </property>
- <property name="user">"xxxx"</property>
- <property name="password">"xxxx"</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"
- />
- <!-- from JNDI -->
- <!--
- <component name="DataSource"
- class="javax.sql.DataSource">
- @org.seasar.extension.j2ee.JndiResourceLocator@lookup("java:comp/env/jdbc/DataSource")
- </component>
- -->
- <!--
- <component name="dataSource"
- class="org.seasar.extension.datasource.impl.SelectableDataSourceProxy"/>
- -->
- </components>
log4j.properties
- log4j.category.org.seasar=DEBUG, C
- log4j.additivity.org.seasar=false
- log4j.category.tutorial.chura=DEBUG, C
- log4j.additivity.tutorial.chura=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
s2container.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 condition="#ENV == 'ut'" path="warmdeploy.dicon"/>
- <include condition="#ENV == 'ct'" path="hotdeploy.dicon"/>
- <include condition="#ENV != 'ut' and #ENV != 'ct'" path="cooldeploy.dicon"/>
- </components>
s2jdbc.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="jdbc.dicon"/>
- <include path="s2jdbc-internal.dicon"/>
- <component name="jdbcManager" class="org.seasar.extension.jdbc.manager.JdbcManagerImpl">
- <property name="maxRows">0</property>
- <property name="fetchSize">0</property>
- <property name="queryTimeout">0</property>
- <property name="dialect">mysqlDialect</property>
- <!--
- <property name="dialect">db2390Dialect</property>
- <property name="dialect">db2400Dialect</property>
- <property name="dialect">db2Dialect</property>
- <property name="dialect">derbyDialect</property>
- <property name="dialect">firebirdDialect</property>
- <property name="dialect">h2Dialect</property>
- <property name="dialect">hsqlDialect</property>
- <property name="dialect">interbaseDialect</property>
- <property name="dialect">maxdbDialect</property>
- <property name="dialect">mssql2005Dialect</property>
- <property name="dialect">mssqlDialect</property>
- <property name="dialect">mysqlDialect</property>
- <property name="dialect">oracleDialect</property>
- <property name="dialect">postgreDialect</property>
- <property name="dialect">standardDialect</property>
- <property name="dialect">sybaseDialect</property>
- -->
- </component>
- </components>
所需jar包:
MySQL
数据库,新建数据库名seasar2
- /*
- MySQL Data Transfer
- Source Host: localhost
- Source Database: seasar2
- Target Host: localhost
- Target Database: seasar2
- Date: 2008/08/22 14:13:10
- */
- SET FOREIGN_KEY_CHECKS=0;
- -- ----------------------------
- -- Table structure for address
- -- ----------------------------
- CREATE TABLE `address` (
- `id` int(11) NOT NULL auto_increment,
- `name` varchar(255) NOT NULL,
- `version` int(11) NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=latin1;
- -- ----------------------------
- -- Table structure for department
- -- ----------------------------
- CREATE TABLE `department` (
- `id` int(11) NOT NULL auto_increment,
- `name` varchar(255) NOT NULL,
- `version` int(11) NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
- -- ----------------------------
- -- Table structure for employee
- -- ----------------------------
- CREATE TABLE `employee` (
- `id` int(11) NOT NULL auto_increment,
- `name` varchar(255) NOT NULL,
- `job_type` varchar(30) NOT NULL,
- `salary` int(11) NOT NULL,
- `department_id` int(11) NOT NULL,
- `address_id` int(11) NOT NULL,
- `version` int(11) NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1;
- -- ----------------------------
- -- Records
- -- ----------------------------
- INSERT INTO `address` VALUES ('1', 'STREET 1', '1');
- INSERT INTO `address` VALUES ('2', 'STREET 2', '1');
- INSERT INTO `address` VALUES ('3', 'STREET 3', '1');
- INSERT INTO `address` VALUES ('4', 'STREET 4', '1');
- INSERT INTO `address` VALUES ('5', 'STREET 5', '1');
- INSERT INTO `address` VALUES ('6', 'STREET 6', '1');
- INSERT INTO `address` VALUES ('7', 'STREET 7', '1');
- INSERT INTO `address` VALUES ('8', 'STREET 8', '1');
- INSERT INTO `address` VALUES ('9', 'STREET 9', '1');
- INSERT INTO `address` VALUES ('10', 'STREET 10', '1');
- INSERT INTO `address` VALUES ('11', 'STREET 11', '1');
- INSERT INTO `address` VALUES ('12', 'STREET 12', '1');
- INSERT INTO `address` VALUES ('13', 'STREET 13', '1');
- INSERT INTO `address` VALUES ('14', 'STREET 14', '1');
- INSERT INTO `department` VALUES ('1', 'ACCOUNTING', '1');
- INSERT INTO `department` VALUES ('2', 'RESEARCH', '1');
- INSERT INTO `department` VALUES ('3', 'SALES', '1');
- INSERT INTO `department` VALUES ('4', 'OPERATIONS', '1');
- INSERT INTO `employee` VALUES ('1', 'ALLEN', 'SALESMAN', '1600', '3', '1', '1');
- INSERT INTO `employee` VALUES ('2', 'WARD', 'SALESMAN', '1250', '3', '2', '1');
- INSERT INTO `employee` VALUES ('3', 'JONES', 'MANAGER', '2975', '2', '3', '1');
- INSERT INTO `employee` VALUES ('4', 'MARTIN', 'SALESMAN', '1250', '3', '4', '1');
- INSERT INTO `employee` VALUES ('5', 'BLAKE', 'MANAGER', '2850', '3', '5', '1');
- INSERT INTO `employee` VALUES ('6', 'CLARK', 'MANAGER', '2450', '1', '6', '1');
- INSERT INTO `employee` VALUES ('7', 'SCOTT', 'ANALYST', '3000', '2', '7', '1');
- INSERT INTO `employee` VALUES ('8', 'KING', 'PRESIDENT', '5000', '1', '8', '1');
- INSERT INTO `employee` VALUES ('9', 'TURNER', 'SALESMAN', '1500', '3', '9', '1');
- INSERT INTO `employee` VALUES ('10', 'ADAMS', 'CLERK', '1100', '2', '10', '1');
- INSERT INTO `employee` VALUES ('11', 'JAMES', 'CLERK', '950', '3', '11', '1');
- INSERT INTO `employee` VALUES ('12', 'FORD', 'ANALYST', '3000', '2', '12', '1');
- INSERT INTO `employee` VALUES ('13', 'MILLER', 'CLERK', '1300', '1', '13', '1');
- 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
演示代码如下:
- import org.seasar.extension.jdbc.JdbcManager;
- import org.seasar.extension.unit.S2TestCase;
- public class DeleteTest extends S2TestCase {
- private JdbcManager jdbcManager;
- protected void setUp() throws Exception {
- include("app.dicon");
- }
- public void testDeleteTx() throws Exception {
- Employee emp =
- jdbcManager
- .from(Employee.class)
- .where("id = ?", 1)
- .getSingleResult();
- jdbcManager.delete(emp).execute();
- emp =
- jdbcManager
- .from(Employee.class)
- .where("id = ?", 1)
- .getSingleResult();
- System.out.println(emp);
- }
- }