s2dao Demo (原创)

作为初学者本人根据转载的那篇文章摸索了一段时间才制作了一个简单的Demo,发觉S2dao难到不难,对于初学者来说,主要是配置,如果能够配置成功,基本上就对S2dao有个基本了解,能够做更深入的学习了。

 

以下是我个人的Demo制作过程。

1.S2dao 文件下载,请在Google 搜索自行下载。

2.下载S2dao文件后,在Eclipse里自己新建一个Java project : S2daoH2Test

3.数据库采用H2,如果想采用其它的数据库,请参考官方的jdbc.dicon。

 

工程文件有下载的,不过Lib文件太大,不上传了。请自行到关方网站下载。

(1)文件结构

 

 

 (2)库文件,我把源文件库也引用了,实际中不需要引用源文件库

 

 

(3)建立java bean

 

ExpandedBlockStart.gif 代码
package  db.entity;

import  org.seasar.dao.annotation.tiger.Bean; 

@Bean(table 
=   " user " )
public   class  UserEntity {
    
    
// public static final String TABLE = "user";
    
    
private  String id;
    
private  String name;
    
    
public  String getId()
    {
        
return   this .id;
    }
    
    
public   void  setId(String id)
    {
        
this .id  =  id;
    }
    
    
public  String getName()
    {
        
return   this .name;
    }
    
public   void  setName(String name)
    {
        
this .name  =  name;
    }
}


 (4) S2dao文件,这个文件主要是对javabean的操作

 

ExpandedBlockStart.gif 代码
package  db.dao;
import  java.util.List;

import  org.seasar.dao.annotation.tiger.Arguments;
import  org.seasar.dao.annotation.tiger.Sql;
import  org.seasar.dao.annotation.tiger.Query;
import  org.seasar.dao.annotation.tiger.S2Dao;

import  db.entity.UserEntity;

@S2Dao(bean 
=  UserEntity. class )
public   interface  UserDao {
    
    
int  insert(UserEntity userEntity);
    
    @Query(
" name = /*name*/ " )
    @Arguments({
" name " })
    UserEntity getByName(String name);
    
    @Query(
" id = ? " )
    UserEntity getById(String id);
    
    
int  update(UserEntity userEntity);
    
    
int  delete(UserEntity userEntity);
    
    @Query(
" id = /*id*/ " )
    @Arguments({
" id " })
    
int  deleteById(String id);
    
    List
< UserEntity >  getAll();    

}

 (5)配置文件 ,请注意参考图片的文件夹格式配置。不然会出错误. j2ee.dicon在UserDao.dicon的上层目录。

      1> UserDao.dicon

             

ExpandedBlockStart.gif 代码
<? xml version="1.0" encoding="Shift_JIS" ?>
<! DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components.dtd"
>
< components >
    
< include  path ="dao.dicon" />
    
< component  class ="db.dao.UserDao" >
        
< aspect > dao.interceptor </ aspect >
    
</ component >
</ components >


   2> j2ee.dicon

 

ExpandedBlockStart.gif 代码
<? xml version="1.0" encoding="Shift_JIS" ?>
<! DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
    "http://www.seasar.org/dtd/components21.dtd"
>
< components  namespace ="j2ee" >
    
< component  name ="transactionManager"
        class
="org.seasar.extension.jta.TransactionManagerImpl" />
    
< component  name ="requiredTx"
        class
="org.seasar.extension.tx.RequiredInterceptor" />
    
< component  name ="requiresNewTx"
        class
="org.seasar.extension.tx.RequiresNewInterceptor" />
    
< component  name ="mandatoryTx"
        class
="org.seasar.extension.tx.MandatoryInterceptor" />
    
< component  name ="notSupportedTx"
        class
="org.seasar.extension.tx.NotSupportedInterceptor" />

    
< component 
        
name ="resultSetFactory"
        class
="org.seasar.dao.pager.PagerResultSetFactoryWrapper" >
        
< arg >
            
< component  class ="org.seasar.extension.jdbc.impl.BasicResultSetFactory" />
        
</ arg >
        
< property  name ="useScrollCursor" > true </ property >
    
</ component >
    
<!--
    <component 
        name="resultSetFactory"
        class="org.seasar.dao.pager.PagerResultSetFactoryLimitOffsetWrapper">
        <arg>
            <component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
        </arg>
        <arg>dataSource</arg>
    </component>
    
-->

    
< component  class ="org.seasar.extension.jdbc.impl.ConfigurableStatementFactory" >
        
< arg >
            
< component  class ="org.seasar.dao.pager.PagerStatementFactory" />
        
</ arg >
        
< property  name ="fetchSize" > 100 </ property >
        
<!--
        <property name="maxRows">100</property>
        
-->
    
</ component >

    
<!--
    <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>
        <! - -
        <property name="maxRows">100</property>
        - - >
    </component>
    <component class="org.seasar.extension.jdbc.impl.OracleResultSetFactory"/>
    <component class="org.seasar.extension.jdbc.impl.BooleanToIntStatementFactory"/>
    
-->

    
< component  name ="xaDataSource"
        class
="org.seasar.extension.dbcp.impl.XADataSourceImpl" >
        
< property  name ="driverClassName" >
            "org.hsqldb.jdbcDriver"
        
</ property >
        
< property  name ="URL" >
            
<!--
            "jdbc:hsqldb:hsql://localhost:9001"
            
-->
            
<!--
            "jdbc:hsqldb:file:D:/Eclipse/WorkspaceS2DaoTest/S2DaoH2Test/java/examples/dao/demo"
            
-->
            "jdbc:h2:c:/s2db/test" 
        
</ property >
        
< property  name ="user" > "sa" </ property >
        
< property  name ="password" > "sa" </ 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 >

 

3> 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

 

 (6)数据库准备,网上很多教程都没写这一步,数据库都没有,怎么能够访问数据库呢

  

ExpandedBlockStart.gif 代码
package  Prepare;

import  java.sql.Connection;
import  java.sql.DriverManager;
import  java.sql.ResultSet;
import  java.sql.Statement;

import  org.h2.tools.DeleteDbFiles;

public   class  DbInit {
    
public   static   final  String PATHSEPERATECHAR  =   " / " ;
    
public   static   final  String DATABASEDIR  =   " c:/s2db " ;
    
public   static   final  String DRIVER = " jdbc:h2: " ;
    
public   static   final  String DATABASENAME  =   " test " ;
    
public   static   final  String DATABASE  =  DRIVER  +  DATABASEDIR  +   " / "   +  DATABASENAME;
    
public   static   final  String USER  =   " sa " ;
    
public   static   final  String PWD  = " sa " ;

    
public   static   void  main(String[] a)  throws  Exception {
        DeleteDbFiles.execute(DATABASEDIR, DATABASENAME, 
true );
        Class.forName(
" org.h2.Driver " );
        Connection conn 
=  DriverManager.getConnection(DATABASE, USER, PWD);
        Statement stat 
=  conn.createStatement();
        String sql 
=   " CREATE TABLE user(id VARCHAR(8) NOT NULL PRIMARY KEY,name VARCHAR(16)) " ;
        stat.execute(sql);
        conn.close();
    }

}


 

(7)测试

 

ExpandedBlockStart.gif 代码
package  db.test;

import  java.util.List;
import  java.util.ArrayList;
import  db.dao.UserDao;
import  db.entity.UserEntity;

import  org.seasar.framework.container.S2Container;
import  org.seasar.framework.container.factory.SingletonS2ContainerFactory;


public   class  UserTest {
    
    
public   static   final    String CONFIG_PATH = " dicon/UserDao.dicon " ;
    
    
public   void  test(){
        UserDao userDao 
=  getComponent(UserDao. class );
        UserEntity user 
=   new  UserEntity();
        
        
// test insert
        user.setId( " 1 " );
        user.setName(
" MyName " );
        userDao.insert(user);
        
        
// test get
        UserEntity newUser  =   new  UserEntity();
        
// newUser = userDao.getById("1");
        newUser  =  userDao.getByName( " MyName " );
        System.out.println(newUser.getId() 
+   "  -  "   +  newUser.getName());
        
        
// test delete
        userDao.deleteById( " 1 " );
        
        
// test getAll
        user.setId( " 1 " );
        user.setName(
" MyName " );
        userDao.insert(user);
        user.setId(
" 2 " );
        user.setName(
" MyName2 " );
        userDao.insert(user);    
        
        List
< UserEntity >  users  =   new  ArrayList < UserEntity > () ;
        users 
=  userDao.getAll();
        
for  (UserEntity userEntity : users) {
             System.out.println(
" getall: " + userEntity.getId()  +   "  -  "   +  userEntity.getName());
        }
        
        userDao.deleteById(
" 1 " );
        userDao.deleteById(
" 2 " );    
    }
    
    
    
public   static   void  main(String[] a){
        
        UserTest userTest 
=    new  UserTest();
        userTest.test();
    }
    
public   static   < T >  T getComponent( final  Class < T >  clazz) {
            SingletonS2ContainerFactory.setConfigPath(CONFIG_PATH);
            SingletonS2ContainerFactory.init(); 
            
final  S2Container container  =  SingletonS2ContainerFactory.getContainer();
            
final  Object o  =  container.getComponent(clazz);
            
final  T bean  =  clazz.cast(o);
            
return  bean;
         }
}

测试结果如下

 DEBUG 2010-06-22 16:47:08,093 [main] Physical connection got
DEBUG 2010-06-22 16:47:08,093 [main] Logical connection got
DEBUG 2010-06-22 16:47:08,093 [main] Logical connection closed
DEBUG 2010-06-22 16:47:08,093 [main] Logical connection got
DEBUG 2010-06-22 16:47:08,156 [main] Logical connection closed
DEBUG 2010-06-22 16:47:08,171 [main] Logical connection got
DEBUG 2010-06-22 16:47:08,171 [main] INSERT INTO user (id, name) VALUES ('1', 'MyName')
DEBUG 2010-06-22 16:47:08,187 [main] Logical connection closed
DEBUG 2010-06-22 16:47:08,187 [main] Logical connection got
DEBUG 2010-06-22 16:47:08,187 [main] SELECT user.id, user.name FROM user WHERE name = 'MyName'
DEBUG 2010-06-22 16:47:08,187 [main] Logical connection closed
1 - MyName
DEBUG 2010-06-22 16:47:08,187 [main] Logical connection got
DEBUG 2010-06-22 16:47:08,187 [main] DELETE FROM user WHERE id = '1'
DEBUG 2010-06-22 16:47:08,187 [main] Logical connection closed
DEBUG 2010-06-22 16:47:08,187 [main] Logical connection got
DEBUG 2010-06-22 16:47:08,187 [main] INSERT INTO user (id, name) VALUES ('1', 'MyName')
DEBUG 2010-06-22 16:47:08,187 [main] Logical connection closed
DEBUG 2010-06-22 16:47:08,187 [main] Logical connection got
DEBUG 2010-06-22 16:47:08,187 [main] INSERT INTO user (id, name) VALUES ('2', 'MyName2')
DEBUG 2010-06-22 16:47:08,187 [main] Logical connection closed
DEBUG 2010-06-22 16:47:08,187 [main] Logical connection got
DEBUG 2010-06-22 16:47:08,187 [main] SELECT user.id, user.name FROM user
DEBUG 2010-06-22 16:47:08,187 [main] Logical connection closed
getall:1 - MyName
getall:2 - MyName2
DEBUG 2010-06-22 16:47:08,187 [main] Logical connection got
DEBUG 2010-06-22 16:47:08,187 [main] DELETE FROM user WHERE id = '1'
DEBUG 2010-06-22 16:47:08,187 [main] Logical connection closed
DEBUG 2010-06-22 16:47:08,187 [main] Logical connection got
DEBUG 2010-06-22 16:47:08,187 [main] DELETE FROM user WHERE id = '2'
DEBUG 2010-06-22 16:47:08,187 [main] Logical connection closed

-----------------------------

项目文件下载:

 

 带库文件的项目文件,文件比较大8.5M左右

 

 不带库文件的项目源文件,比较小。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值