`

DAO层:jade

 
阅读更多
DAO层:jade

一、Jade简介:
jade:java access data layer
1.用jade的好处在于,尽可能减少重复的从db把数据对bean进行装配的过程,统一入口,隔离业务逻辑,方便review。
2.jade是在spring完成的数据层的良好实践总结,无缝接入rose中,可以算得上是rose亲密无间的好模块。


二、基础配置
1.要开始使用jade,一定要先引用jade的基础包:
pom.xml:
        <dependency>
            <groupId>com.54chen</groupId>
            <artifactId>paoding-rose-jade</artifactId>
            <version>1.1</version>
        </dependency>

除了需要jade的包外,还需要引入数据源连接池的jar,这里使用了dbcp,当然了mysql-connector也是必不可少的,还是在pom.xml中添加:
      
 <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
                        <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.10</version>
        </dependency>

3.在pom中引入了依赖之后,需要定义一个数据源,这里先不考虑多个数据源的情况:
在war项目的applicationContext.xml中增加数据源定义:
     <!-- 数据源配置 dbcp -->
    <bean id="jade.dataSource.com.chen.dao" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url"
            value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=utf-8"></property>
        <property name="username" value="test"></property>
        <property name="password" value="test"></property>
        <!-- 运行判断连接超时任务的时间间隔,单位为毫秒,默认为-1,即不执行任务。 -->
        <property name="timeBetweenEvictionRunsMillis" value="3600000"></property>
        <!-- 连接的超时时间,默认为半小时。 -->
        <property name="minEvictableIdleTimeMillis" value="3600000"></property>
    </bean> 

这里假设了mysql已经安装在本地了,用户名为test,密码为test。
jade约定了bean的id为jade.dataSource.classPackageName。
jade约定了这个bean的有效范围为classPackageName所有的DAO。
jade约定了除非有专门的定义,所有的子目录也受bean上的classpackageName所影响。



三、jade支持一些常规的表达式:

语法一:常见的变量赋值

冒号(:)表示这是一个变量,比如上面的例子里的 :t.id,它会被一个值替换。
语法二:字符串连接

连续的井号(##) 表示后面的变量作字符串连接
如下例中的partition变量,还请不要误解,分表不是这样做的,下一章会介绍标准的分表设置。
   @SQL("SELECT user_id, device_token FROM test_##(:partition) LIMIT :limit")
    public List<Test> getTests(@SQLParam("partition") int partition, @SQLParam("limit") int limit);


语法三:条件选择
井号if(#if{})用于表示当条件满足时sql拼接。
   @SQL("SELECT user_id, device_token FROM test_##(:partition) #if(:user>0){ where user_id=:user } LIMIT :limit")
    public List<Test> getTestsIf(@SQLParam("partition") int partition, @SQLParam("limit") int limit, @SQLParam("user") int user); 


其他语法:还有for循环。
典型地,一般的select in查询,可以直接传入list,例如下例中的ids变量:
    @SQL("SELECT user_id, device_token FROM test_##(:partition) where user_id in(:ids)")
    public List<Test> getTestsByIds(@SQLParam("partition") int partition, @SQLParam("ids") List<Integer> ids);


























分享到:
评论
1 楼 liubinli2005 2016-08-23  
这个可以脱底spring。单独使用吗?

相关推荐

Global site tag (gtag.js) - Google Analytics