坚信科学,分享技术

>>>尝试更加利于阅读的2014版科学院,以后都在新版上写。

Tag Archives: rose

rose手册第三章C节:DAO层:分表设置

欢迎顺利进入本章,如果您的企业需要这一节的内容,那么说明用户量很有前途,如果使用了本节的内容,不防向czhttp@gmail.com发信一封以表谢意,我们会很高兴收到各种反馈。 3.C.1 mysql分表的常规做法 以下是个人从业经验中的分表规则: 按照 id % 100 分为一百份 按照 id % 16 分为十六份 按照 id/10 % 10 分为十份 按照 id%10 分为十份 以上分表规则特别在mysql中使用机会比较多,各有优势,没有对错,只有最好与最不好用。 3.C.2 使用分表第一步:添加新的依赖 要使用分表,需要添加新的依赖,由bmw提供的bmwutils。 <dependency>       <groupId>com.54chen</groupId>       <artifactId>bmwutils</artifactId>       <version>0.0.2</version>   </dependency>   3.C.3 使用分表第二步:设置applicationContext.xml分表规则 在开写代码之前,需要告诉DAO是哪个表需要分表,按照什么规则分,分多少份。 <!

Continue reading

Posted in java | Tagged | 12 Comments

rose手册第三章B节:DAO层:DAO进阶:SQLParm支持和表达式SQL

3.B.1 SQLParam介绍:DAO方法传递参数 SQLParam作为DAO支持中的参数传递使者,可以传递一个常见的变量,也可以是一个自定义的对象。 比如: @SQL("insert into test (id,msg) values (:t.id,:t.msg)")    public void insertTest(@SQLParam("t") Test test);   上列中Test对象通过t传递到sql执行中去,并且可以分别使用其中的属性。这感觉是不是很自然? 当然,如果是一个int、long、String等自在不言中。 当是list时,会有自动的batch操作,将sql拆为多条sql执行。这个小技巧会在后面的章节里讲。平时很少用到。 3.B.2 ReturnGeneratedKeys介绍:返回刚刚插入的ID号 特别是使用mysql开发的广大劳苦大众,常常会使用到auto_increament的字段。 当一条insert语句在执行的时候,我们常常会去需要拿它的当前的自增id是多少。 @ReturnGeneratedKeys   @SQL("insert into test (id,msg) values (:t.id,:t.msg)")   public&nbs

Continue reading

Posted in java | Tagged | 34 Comments

rose手册第三章A节:DAO层:DAO的基本配置与使用

本章开始进入对DB层的支持,同进也是日常开发用得最多的章节。 3.A.1 什么是jade? jade大概是java access data layer的意思吧,具体的来由,在章节写到末尾的时候,我再找qieqie和liaohan大侠们写一写编年史。 用jade的好处在于,尽可能减少重复的从db把数据对bean进行装配的过程,统一入口,隔离业务逻辑,方便review。 jade是在spring完成的数据层的良好实践总结,无缝接入rose中,可以算得上是rose亲密无间的好模块。 3.A.2 引入基础配置 要开始使用jade,一定要先引用jade的基础包: pom.xml <dependency>       <groupId>com.54chen</groupId>       <artifactId>paoding-rose-jade</artifactId>       <version>1.1</version>   </dependency>   除了需要jade的包外,还需要引入数据源连接池的jar,这里使用了dbcp,还是在pom.xml中: <dependency>   &

Continue reading

Posted in java | Tagged | 26 Comments

rose手册第三章九节:controller层:上传文件

3.9.1 其实很简单 添加依赖包:commons-io.jar html中使用 enctype="multipart/form-data",method="POST" 直接看后端代码吧。 @Post("/doUpload")      public String doUpload(@Param("file") MultipartFile file) {          return "@ upload ok!" + file.getOriginalFilename();      }   3.9.2 其他 可以同时接收所有的文件 // 不声明@Param   // files可以是一个数组或者List   public String upload(MultipartFile[] files) {       return "@ok-" + Arrays.toString(files);   } &nbs

Continue reading

Posted in java | Tagged | 7 Comments

rose手册第三章八节:controller层:门户必备pipe支持

3.8.1 什么是pipe? ------------------ * pipe起源于facebook的工程师对他们网页提速的方案:将网页分解为Pagelets的小块(在rose叫做window的小块),然后通过后端多重管道运行,以达到性能的最佳。 * pipe巧妙使用了http 1.1连接有timeout的机制,充分使用一次http连接来传递数据。 * pipe可使用户在大多数浏览器中感受到延迟减少了一半。 3.8.2 与facebook的bigpipe相比rose pipe如何? -------------------------------------------- * fb并未在开源项目中公布过使用方法 * bigpipe神似是php+js搞定的 * rose pipe可以自由选择线程池大小,完全出自上一节的portal的基础 * 完全实现bigpipe功能,天然的对业务开发者透明 3.8.3 看实例 ------------ HelloController.java @Get("/3.8")   public String pipe(Pipe pipe) {       pipe.addWindow("p1", "/wp1");       pipe.addWindow("p2", "/wp2");      &

Continue reading

Posted in java | Tagged | 13 Comments

rose手册第三章七节:controller层:门户必备portal支持

3.7.1 什么是portal? -------------------- *字面意思,做门户用的。 *简单来说,把一个网页分成了N个区域,每个区域由不同的action去执行,多线程并行提高cpu使用率。 3.7.2 使用例子 ----------- *要使用portal,必须先在web.xml里声明所使用的线程池大小: <context-param>           <param-name>portalExecutorCorePoolSize</param-name>           <param-value>1024</param-value>   </context-param>   *然后看示例代码: @Get("/3.7")   public String portal(Portal portal) {       portal.addWindow("p1", "/wp1");       portal.addWindow("p2", "

Continue reading

Posted in java | Tagged | 11 Comments

rose手册第三章六节:controller层:一闪而过的信息,flash支持

3.6.1 需求描述 历史上,做web的需求时,经常遇到一个情况:在A页面修改/添加/删除了信息,提交,提示“修改/添加/删除成功!”。 rose的flash(并非你所想象的adobe的flash)建设性地使这一需求在开发过程中简单快捷化。 3.6.2 使用过程 使用过程会很愉快,在两个action之间,通过return "r:/xxx"来跳转(实际是301),只需要在第一个action里使用flash.put,在第二个action里使用flash.get即可。 @Get("/flash1")     public String flashStep1(Flash flash) {         flash.add("msg", "修改成功!");         return "r:/flash2";     }        @Get("/flash2")     public String flashStep2(Invocation inv, Flash flash) { &

Continue reading

Posted in java | Tagged | Leave a comment

rose手册第三章五节:controller层:统一的参数验证办法

3.5.1 用来做什么 ---------------- * 我们把的参数验证办法叫ParamValidator * 一般来说,像比如说验证http传来的参数是不是为空呀啥的(发挥你的想象力)。 * 好处在于不用再重复地写if else 3.5.2 怎么用 ------------ * 来看一个例子,验证用户的参数不可为空(灰常灰常的实用): public class NotBlankParamValidator implements ParamValidator {          @Override       public boolean supports(ParamMetaData metaData) {           return metaData.getAnnotation(NotBlank.class) != null;       }          @Override       publ

Continue reading

Posted in java | Tagged | 17 Comments

rose手册第三章四节:controller层:自定义http参数支持

3.4.1 http参数支持的一些前言 ----------------------------------------- * 我们把一个controller的类里的一个方法叫做action,它实际对应用户看到的一个url。 * 在action里可以接收各种各样的参数,也可以自己定义需要的参数。 * rose自己定义了一些常见的类型,基本上很有机会会用到自己定义,但是在某些情况下,也是个不错的选择: * 用来对指定的参数类型的值进行固定的修改和赋值。 3.4.2 看一个例子 -------------------------- ChenBeanResolver.java放在controllers目录下: public class ChenBeanResolver implements ParamResolver {          @Override       public Object resolve(Invocation inv, ParamMetaData metaData) throws Exception {           for (String paramNam

Continue reading

Posted in java | Tagged | Leave a comment

rose手册第三章三节:controller层:ErrorHandler支持

3.3.1 ErrorHandler的作用 一般来说传统的编程都会到处去try,特别是java里,try来try去的(如果你用erlang一定就知道,已经知道的可能性,怎么能叫异常?都try了还是让它崩了算了。。。)。 如果打开你的项目,每个java文件中的代码都有一堆的try,那这时候就是ErrorHandle上阵的时候了。 ErrorHanle致力于:统一捕捉和处理各种异常,可区分对待和返回;统一的出错体验。 非常类似做web开发时的500统一出错页面这样的东东。 3.3.2 示例 /** * @author chenzhen@xiaomi.com * 2010-12-1 */ package com.chen.controllers; import net.paoding.rose.web.ControllerErrorHandler; import net.paoding.rose.web.Invocation; public class ErrorHandler implements ControllerErrorHandler { public Object onError(Invocation inv, Throwable ex) throws Throwable { // TODO logger.error("handle err:", …

Continue reading

Posted in java | Tagged | 2 Comments
Page 1 of 212