zoukankan      html  css  js  c++  java
  • 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

    代码
    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的操作

    代码
    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

                 

    代码
    <?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

    代码
    <?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)数据库准备,网上很多教程都没写这一步,数据库都没有,怎么能够访问数据库呢

      

    代码
    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)测试

    代码
    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左右

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

  • 相关阅读:
    Linux常用指令
    maven报错 java.lang.RuntimeException: com.google.inject.CreationException: Unable to create injector, see the following errors
    Idea 项目jdk环境配置
    Idea 设置maven配置文件settings.xml的位置
    IntelliJ IDEA常用快捷键总结
    Idea 一个窗口打开多个项目
    Git 下拉项目
    Git 删除本地保存的账号和密码
    mysql 查询奇偶数
    redis 短信验证码
  • 原文地址:https://www.cnblogs.com/likwo/p/1762782.html
Copyright © 2011-2022 走看看