s二dao 德姆o (原创)

作为初学者自己依据转发的那篇小说摸索了一段时间才炮制了一个简易的Demo,发觉S贰dao难到简单,对于初学者的话,首假若布局,假如能够配置成功,基本上就对S二dao有个大旨精晓,能够做更浓密的上学了。

那是一本值得每贰个心爱网络的人去读书的书。

 

长尾理论

以下是自个儿个人的德姆o制作进程。

何以是长尾理论?

一.S二dao 文书下载,请在谷歌(Google) 搜索自行下载。

要回答这几个标题首先要看一张图:

贰.下载S贰dao文件后,在Eclipse里本身新建3个Java project : S二daoH二Test

长尾

三.数据库选拔H二,假诺想利用其它的数据库,请参见官方的jdbc.dicon。

在商品销售中,商品能够被分成两大类,一类是热门商品,一类是非热门商品。热门商品占据了商品销售中的绝半数以上市面,而非热门商品们则分享着多余的商海。

 

在价值观的行销中,拿零售行业来说,二个市镇中,用来摆放货物的货架是简单的,那么3个市场倘使想要令其销售利益最大化,最佳的方案是在货架上摆放热门的货品保障销售量。而非热门商品则大多无缘小型的市集。大家得以看来影响非热门商品上架的要素在于商品的热点程度过低,使得收入抵不上货架所分摊的集团租金等资本。也得以换1个角度来看,倘诺货架与存款和储蓄不要求任何基金,那么非热门商品就有望有机遇能够上架。也得以再换一个角度来看,借使非热门商品的私人住房消费者都能够突破空间的界限,那么那个非热门商品就有机遇面向更加大人群的买主,销售出足足的量去抵消一定的财力了。

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

互连网的产出打破了非热门商品与潜在消费者之间的空中壁垒,又增进网络电商不须要货架摆放呈现商品的资本,使得非热门商品销售出越来越大比例的货色。

(1)文件结构

那种势头发生在互连网电商,例如天猫商城京东等;发生在互联网虚拟产品销售,例如Kindle图书NETFLIX等;发生在文化产业,例如播客等。

葡京网上娱乐场 1 

那本书给本身带来的最大的记念仍旧互连网打破了成品与地下消费者之间的空中界限以及网络产品本身的低本钱。

 

打破了空间界限,非热门商品就有机遇显示给愈多的暧昧消费者。人类总是存在着好几共性,所以大多数人群追逐着热门商品,人类的每一种个体又存在着差异,所以总会有1部分非热门商品知足着某一类人群的急需。网络的触角广,像天猫商城能够接触到大概全国外省的网络好友,某个冷门的满意小圈圈人群必要的货色在这几个平台上也能集合丰裕量的消费者,获得丰裕的毛利。

 (二)库文件,作者把源文件库也引用了,实际中不必要引用源文件库

低本钱,在实物商品的网络销售中(例如服装),商品少去了公司租金和水力发电等支付降低资金,那一个是货物显示时所需的资本;在虚拟商品的互联网销售中(例如电子图书),除了出示开销降低外,还在商品的仓库储存开销方面也大幅度下滑(存款和储蓄所需资金为硬盘费用,异常低)。

葡京网上娱乐场 2 

那本书给自身带来了三个新的眼光去看互连网上边包车型客车内容。这一个内容能够是YouTube上的网络朋友自制摄像,能够是博客平台上网络好友创作的稿子,仍是能够是微博上的转载点评。内容产生的血本降低,用户可以用手机摄像录制,能够在简书上申请帐号撰写,甚至足以点击一下鼠标配上多少个神情转载2个帖子。内容传播途径优化,网络提供了大小无数个平台来显示内容,这个内容理论上有机会能够触发到别的能上网的人(在那里就背着中中原人民共和国局域网了),基本上属于内容大发生的情状。

 

而那大批量的剧情,有个别内容大概对此一些人工产后出血来说是宝贝,而对于另一片段人的话则是噪声了,怎么样去对那几个情节开始展览筛选再彰显就呈现尤其首要。

(3)建立java bean

剧情筛选能够分为内容传播前的筛选和扩散后的筛选,传播前的筛选典型的例证正是音讯网址的编写,在音讯传出前依照其规则实行筛选;传播后的筛选能够是谷歌(Google)查寻,让你在巨大的音信流中找出您想要的音讯。

 

书中称之为筛选器,就如二个管道壹样,过滤掉一部分事物,让通过的事物尤其优质特别有针对。筛选器其实能够是很各种形象,能够是简书的三个专题,也得以是豆类上的一条豆列,同理可得能够对大气的内容举行再三回看弃、整理和集合而让内容聚合越发优质和有针对性的大路都足以叫做筛选器。其实仔细估测计算,筛选器又何尝不是在生育内容呢?与1般的剧情生产差异,筛选器生产的是1个剧情的联谊。

葡京网上娱乐场 3葡京网上娱乐场 4代码

在此以前本人直接以为互连网让这一个世界文化趋于统一,因为互连网让全数网上朋友都有时机接触到越来越多的学问产品,人们会选用上色的学识产品(例如看好莱坞和美国片),追热门的游乐歌星,长此未来下谢世界上的芸芸众生都会掌握《冰与火之歌》,都听过《江南style》。看过那本书之后笔者发觉到那么些内容是属于长尾理论中的热门商品,而种种人都会有协调的差别于外人的兴趣爱好,就好像自个儿以后搞不懂近来的小鲜肉明星都叫什么名字,不知晓1遍元又出了什么热门的番一样,“过多”的选拔让人们有时机去发展满意他们供给的爱好。这一个世界会越来越多元,因为大概每1种知识都足以透过互联网找到更加多的消费者。

package db.entity;

别的,小编在用多看阅读app阅读的时候还不忘摘录部分自家觉得有启示、对自己有用处的文字,如下:

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

大热点是必要不足的产物——假如只有那么多少个货架、多少个波段,唯壹明智的做法正是把那一点空间留给那三个最吃香的事物。

它们正在把过去无利可图的主顾、产品和商海变得有利可图。

这几个公司家才是当真的发明者。作者只想尝尝着将她们的名堂提炼为叁个框架。当然,那正是文学的任务:它力求用简明易懂的框架来叙述真实世界的风貌。这一个框架本人也会带来理念的进化,但若与这么些率头阵现、率先行动的四驱的光辉立异比较,此框架便大相径庭了。

热门文学(作者将在事后的章节中更详实地商量它)诞生于贰个须求不足的时期,在那个时期,我们从没丰硕的空间为每1个人提供每1样东西:未有丰硕的货架可以摆下全部的CD、VCD和录制游戏光盘;未有丰盛的银幕能够放映全体的影视;未有丰富的频段去播放全部的TV节目;未有足够的波段去播送全体的音乐;也远未有充分多的光阴将富有情节都缩水到某2个载体上。

我们得以把长尾理论浓缩为不难的一句话:大家的学识和经济主题正在马不停蹄转移,从供给曲线头部的少数大热门(主子宫破裂品和市镇)转向供给曲线尾巴部分的大批量利基产品和商海。在二个不曾货架空间限制和别的供应瓶颈的一时,面向特定小群众体育的产品和服务能够和主流热点具有同等的经济吸重力。

被放大的口头传播效应印证了长尾的第二种力量:利用消费者的心情来归并要求与要求。普及生产工具是首先种力量,是它让长尾增添起来。普及传播工具是第一种能力,是它将长尾变得人尽可得。但光有那二种能力还不够。直到那第二种能力发挥效用,帮忙人们在数之不尽的精选中找到自个儿的最爱,长尾市面包车型客车潜力才会真正释放出来。

搜索引擎之所以变成硅谷的一大经济能力,只是因为大家认识到了度量和剖析民众行为的价值。

在二个可是接纳的时期,统治理和整顿个的不是内容,而是寻找内容的点子。

在于今的长尾市面中,过滤器的显要功能在于一种变更:帮忙人们沿着一条既舒适又切合个人品位的道路从已知世界(大热点)走向未知世界(利基产品)。

在提出大家前几日所说的“休姆归结难点”(休姆’s Problem of
Induction)时,他问了如此二个难点:1人在调查到多少只白天鹅之后才能断言全部的天鹅都以反革命,深翠绿天鹅并不设有?九拾伍只?1000只?我们不明了。

在长尾市面中,有二种力量能够有助于供给从头顶移向后面部分,从大热门移向利基产品。第一种力量便是项目标足够性。倘使您只给芸芸众生拾种选取,他们只好十里挑1。假设您给他们1000种东西,必要就不太会集中在前⑩种东西上了。第二种力量是较低的“搜索取费用用”,那既包涵实际的搜寻,也包蕴推荐系统和其余过滤技术。最终壹种能力便是样本示范:对一首歌,你也许可避防费试听30秒;对壹本书,你或然可以在网上试读1部分。那能下跌购销危机,鼓励消费者们更是浓厚未知世界。

“电视机又粗俗、又下流、又愚昧,并不是因为TV观者们又粗俗、又下流、又愚昧。电视机之所以是那副样子,只是因为人们在那个粗俗、下流、鸠拙的兴趣爱好上非凡地1般,但在那叁个优雅、美好、高尚的兴趣爱好上却又相形见绌。”

——戴维·福斯特·华莱士

越来越多的音讯是好事,但前提是,音讯提供格局必须有助于顾客的挑选,而不是把挑选进度弄得愈加混乱。

@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;
    }
}

 (肆) S贰dao文件,那几个文件根本是对javabean的操作

 

葡京网上娱乐场 5葡京网上娱乐场 6代码

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();    

}

 (伍)配置文件 ,请留心参考图片的文本夹格式配置。不然会出错误.
j二ee.dicon在UserDao.dicon的上层目录。

      1> UserDao.dicon

             

葡京网上娱乐场 7葡京网上娱乐场 8代码

<?xml version=”1.0″ encoding=”Shift_JIS”?>
<!DOCTYPE components PUBLIC “-//SEASAR//DTD S2Container//EN”
http://www.seasar.org/dtd/components.dtd"&gt;
<components>
    <include path=”dao.dicon”/>
葡京网上娱乐场,    <component class=”db.dao.UserDao”>
        <aspect>dao.interceptor</aspect>
    </component>
</components>

   2> j2ee.dicon

 

葡京网上娱乐场 9葡京网上娱乐场 10代码

<?xml version=”1.0″ encoding=”Shift_JIS”?>
<!DOCTYPE components PUBLIC “-//SEASAR2.1//DTD S2Container//EN”
    “http://www.seasar.org/dtd/components21.dtd"&gt;
<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>

 

三> log肆j.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

 

 (陆)数据库准备,网上海人民广播电台高校科都没写这一步,数据库都并未有,怎么能够访问数据库呢

  

葡京网上娱乐场 11葡京网上娱乐场 12代码

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

 

葡京网上娱乐场 13葡京网上娱乐场 14代码

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

 

 不带库文件的档次源文件,相比较小。