经历过的,和正在经历的。。。

ibatis调用存储过程实例

上次调用存储过程返回游标集合,调试花了些时间,记录下来备忘。

映射文件:

<?xml version=”1.0″ encoding=”UTF-8″ ?>
<!DOCTYPE sqlMap PUBLIC “-//ibatis.apache.org//DTD SQL Map 2.0//EN” “http://www.ibatis.com/dtd/sql-map-2.dtd“>
<sqlMap namespace=”goodsTypeSales”>
<typeAlias alias=”goodsTypeSalesDO” type=”com.hongyue.common.entity.report.GoodsTypeSalesDO”/>
<resultMap id=”get-goodstype-sales-result” >
<result property=”goodsTypeId” column=”goods_type_id”/>
<result property=”sales” column=”sales”/>
<result property=”orderNum” column=”order_num”/>
<result property=”buyers” column=”buyers”/>
<result property=”pricePerBuyer” column=”price_per_buyer”/>
<result property=”orderConversionRate” column=”order_conversion_rate”/>
<result property=”grossMargin” column=”gross_margin”/> 
</resultMap>
<parameterMap id=”param”  class=”java.util.Map”>
<parameter property=”goodstype” jdbcType=”VARCHAR2″ javaType=”java.lang.String” mode=”IN”/>
<parameter property=”startdate” jdbcType=”VARCHAR2″ javaType=”java.lang.String” mode=”IN”/>
<parameter property=”enddate” jdbcType=”VARCHAR2″ javaType=”java.lang.String” mode=”IN”/>
<parameter property=”verify” jdbcType=”NUMBER” javaType=”java.lang.Integer” mode=”IN”/>
<parameter property=”result” jdbcType=”ORACLECURSOR” javaType=”java.sql.ResultSet” mode=”OUT” resultMap=”get-goodstype-sales-result”/>
</parameterMap>
    <procedure id=”IbatisGoodsTypeSalesDAO.getGoodsTypeSales” parameterMap=”param” >  
          {call RP_ORDER_STATISTICS(?,?,?,?,?)}  
     </procedure>  
</sqlMap>

在DAO中:

 public List<GoodsTypeSalesDO> getGoodsTypeSales(HashMap paramMap) {
  queryForList(“IbatisGoodsTypeSalesDAO.getGoodsTypeSales”,paramMap);
  List<GoodsTypeSalesDO> arrayList = (ArrayList)paramMap.get(“result”);//取值 array

  System.out.println(arrayList.size());
  return arrayList;
 }

在Action中组织参数的HashMap

        HashMap paramMap = new HashMap();

        paramMap.put(“goodstype”, goodsTypeId);
        paramMap.put(“startdate”, startDate);
        paramMap.put(“enddate”, endDate);
        paramMap.put(“verify”, verify);
        paramMap.put(“result”, “”);

        gtsList = goodsTypeSalesService.getGoodsTypeSales(paramMap);

September 2, 2010编程杂集

没有评论
12 views

让ibatis输出sql语句

为了便于调试时能看到ibatis执行的sql语句,需要在log4j.properties中做如下配置:

#ibatis log configure
log4j.logger.com.ibatis=debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=DEBUG

转载:Ibatis访问存储过程的配置

这两天在做报表,遇到ibatis调用存储过程返回游标结果集的问题,网上查了好多资料,最后参考了下边这篇文章成功完成了配置。

—————————————————————————————————–

最近项目里经常需要配置用Ibatis访问存储过程(或函数),多次摸索,发现配置的难点是在于如何配置输入输出参数。现以访问Oracle的存储过程(或函数)举例说明。

一般基本的配置要点如下:

(1)、访问存储过程(或函数)一般以procedure标签来定义statement。

(2)、输入输出的参数需要用parameterMap标签单独定义。

(3)、区分输入输出参数用parameter标签的mode属性来定义,分别为”OUT”和”IN”。

按照是否有返回值,是否使用游标分类说明如下:

第一类,没有返回结果,有输出参数以out标识的过程访问配置样式:

<parameterMap id=”functionPramsMap” class=”map”>

<parameter property=”p1″ jdbcType=”VARCHAR” javaType=”string” mode=”IN”/>

<parameter property=”p2″ jdbcType=”INTEGER” javaType=”int” mode=”IN”/>

<parameter property=”p3″ jdbcType=”INTEGER” javaType=”int” mode=”OUT” />

</parameterMap>

<procedure id=”statementId” parameterMap=”functionPramsMap”>

{call packageName.functionName(?,?,?)}

</procedure>

  继续阅读 »

August 25, 2010经典网文

没有评论
16 views

loser们的共同特征

       互联网提供了一个很好的窗口,使我们可以观察形形色色的人们,那么看到最多的,大概就是loser了。这也符合社会人群构成的分布,失意者往往是大多数,成功者往往是极少数。

       怎样摆脱失意,成就自己,不妨先看看loser有哪些共性,再看看自己占了几条。

loser共性之一, 怨天尤人

       别人有个好老板,我们老板真抠门;别人有背景,我们是草根;等等,把自己的无能用“客观环境”来掩盖,乍一听条条是理,其实呢,别人成功都是偶然,自己的失败都是命不好。这样的人能成功才是没天理。今天无论是网络社区里,街边聊天里,听到最多的就是这种谈资,“我们老板不成,太黑,你看人家谁那单位”,每个行业,顶尖的人才都是极少数,而平庸的人总是过剩,你跨入那个门槛,你就会发现,其实你的老板非常大方,一点都不黑,关键是,你在门槛外,然后看着门槛内的人,觉得他们似乎是命运的宠儿。却从来无视这个门槛的存在,所以有人说某某网游公司核心工程师月薪2万3万,人家公司待遇多好,自己才拿两三千,却从来不肯面对自己的水平和人家的水平差多少。

继续阅读 »

关于标签的混用

今天遇到一个问题,在Action中死活取不到jsp页面隐藏域的值,
后来发现是form使用了struts的标签(<s:form name=”form1″>),
而隐藏域依然使用原始的(<input type=”hidden” name=”icode” id=”code” value=”${rankingRule.ICode}”>)。
在将隐藏域也改成struts标签形式的时候便正常了(<s:hidden name=”rankingRule.ICode”/>),记录之。

May 27, 2010j2se

没有评论
119 views

正则表达式


public static void main(String[] args) {
//简单认识正则表达式的概念
System.out.println("abc".matches("..."));//一个点代表一个字符

p("abc".matches("..."));
p("a8729a".replaceAll("\\d", "-"));//\d代表一个数字,多加一个\进行转义

Pattern p = Pattern.compile("[a-z]{3}");//三位a到z的字符,先做了编译
Matcher m = p.matcher("fgh");
p(m.matches());
p("fgha".matches("[a-z]{3}"));

//初步认识. * + ?
p("a".matches("."));
p("aa".matches("aa"));
p("aaaa".matches("a*"));// *号表示0个或多个
p("aaaa".matches("a+"));// +号表示1个或多个
p("".matches("a*"));
p("aaaa".matches("a?"));//一个或0个
p("".matches("a?"));
p("a".matches("a?"));
p("3215436455476547865".matches("\\d{3,100}"));
p("192.168.0.aaa".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));//{1,3}代表出现1到3次
p("192".matches("[0-2][0-9][0-9]"));//[]代表范围,第一位为0-2范围

//范围

p("a".matches("[abc]"));//中括号匹配一个字符
p("a".matches("[^abc]"));//^表示取反
p("A".matches("[a-zA-Z]"));//a-z或A-Z的内容
p("A".matches("[a-z]|[A-Z]"));//同上
p("A".matches("[a-z[A-Z]]"));//同上
p("R".matches("[A-Z&&[RFG]]"));//范围为A-Z并且是RFG中的内容

//认识\s \w \d \
p(" \n\r\t".matches("\\s{4}"));//表示4个空白字符
p(" ".matches("\\S"));//\\S表示非空字符
p("a_8".matches("\\w{3}"));//3位单词字符,\w的范围是[a-zA-Z_0-9]
p("abc888&^%".matches("[a-z]{1,3}\\d+[&^#%]+"));
p("\\".matches("\\\\"));//用两个\\来表示一个\

//POSIX Style
p("a".matches("\\p{Lower}"));

//boundary
p("hello sir".matches("^h.*"));//^h是指以h开头
p("hello sir".matches(".*ir$"));//ir$是指以$结尾
p("hello sir".matches("^h[a-z]{1,3}o\\b.*"));//\\b是单词边界
p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));

//white lines
p(" \n".matches("^[\\s&&[^\\n]]*\\n$"));

//匹配email "[\\w[.-]]+"表示构成单词的字符或者.-出现一次或多次 "\\."表示跟着一个.
p("asdfasdfasdfsfsf@dsdfsdf.com".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));

//matcher find lookingAt
Pattern p = Pattern.compile("\\d{3,5}");
String s = "123-34545-234-00";
Matcher m = p.matcher(s);

p(m.matches());//false

m.reset();//在执行完上一句时,字符串已经匹配到123-,如果不执行reset,下边的find方法将从余下的子串继续匹配

p(m.find());//查找子串是否匹配
p(m.start() + "-" + m.end());//end是指匹配的后一个字符 0-3
p(m.find());
p(m.find());
p(m.find());

p(m.lookingAt());//每次都从头部开始比较,所以四个都为true
p(m.lookingAt());
p(m.lookingAt());
p(m.lookingAt());

//字符串的替换
Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);//CASE_INSENSITIVE大小写不敏感
Matcher m = p.matcher("java Java JAVa JaVa IloveJAVA adsfsadf");
while(m.find()){
p(m.group());//打印出匹配的子串
}

p(m.replaceAll("JAVA"));//将所有的都替换成大写的

m.reset();
//奇数的改成大写,偶数的改成小写
StringBuffer buf = new StringBuffer();
int i=0;
while(m.find()){
i++;
if(i%2==0){
m.appendReplacement(buf, "java");
}else{
m.appendReplacement(buf, "JAVA");
}
}
m.appendTail(buf);//加上最后的 adsfsadf
p(buf);

//分组
Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");//分组用()分隔
String s = "123aa-34345bb-234cc-00";
Matcher m = p.matcher(s);
while(m.find()){
p(m.group());
p(m.group(1));//取得第一个分组,即数字部分
}

}

public static void p(Object o){
System.out.println(o);
}

April 3, 2010生活点滴

没有评论
112 views

工作总算尘埃落定

从3月中旬开始,一直忙着找工作,到月底总算搞定了,还是做电子商务平台,自己也比较看好这一块吧。最近也想了一些问题,还是决定停止迷恋DBA,做好自己目前要做的事。能否成功,最重要的其实还是得看人,好了,踏实走好接下来的每一步!

February 27, 2010Java

没有评论
154 views

PowerDesigner12.5的下载及破解

PowerDesigner是一个针对企业的综合建模和设计工具,可以帮助企业快速、低成本的创建或重新设计企业应用程序。

Sybase PowerDesigner支持60多种数据库和领先的开发环境,其中包括Sybase Workspace、Sybase PowerBuilder、Java、Eclipse开源开发环境和微软的Visual Studio。

PowerDesigner 12.5下载地址:

http://download.sybase.com/eval/PowerDesigner/powerdesigner125_eval.exe

破解补丁:http://media-001.yo2cdn.com/wp-content/uploads/235/23551/2008/05/e7a0b4e8a7a3.rar

破解方法:
下载 PowerDesigner12.5 后有一个 license.lic 和 pdflm12.dll 两个文件,license.lic 是用于破解序号的,pdflm12.dll 是用于替换原来安装后的文件,破解首先用 pdflm12.dll 替换安装要目录的 pdflm12.dll 文件,然后在PD的菜单中找到 Tools ==>> License Parameters ==>> 选第一个,然后先load找到 下载的 license.lic 文件,重启即破解完成。

February 26, 2010经典网文

没有评论
151 views

这些道理不懂,你注定就是穷打工的命

好文,转来学习。
————————————————————————————
首先声明:如果你是“愤青”或“类愤青”,对不起,请放下此书,因为文中的观点可能会伤害你的心灵(不是对“愤青”有偏见,而是“愤青”们多数都是“纯洁”得不识人间烟火的主儿,成天充满“乌托邦”式的幻想,实在不适合在职场上发展。我相信“愤青”肯定有“愤”的理由。有人说历史上的每一次进步都是由“愤青们”推动的,比如屈原、鲁迅,并以此来反驳我。对于这种观点,我的看法是:如果你还没有“愤”到能够推动历史车轮前进的地步,那么,你最好正视目前的现实生活,做一个“奋青”更为实际。时势造英雄。要怪,就怪没有生在那个可以让“愤青”成为“英雄”的时代。个人观点,绝无恶意。)如果在职场上发展得顺风顺水,同样也没有必要看这篇文章,这些道理对你们来说只是“小儿科”。如果你遇到了前页所说的那些问题,并且想从此改变自己,不想浪费未来的30年,那么,就花上30分钟的时间,仔仔细细把这篇文章看完。我不敢保证看了这篇文章就一定会使你平步青云,我没有那个本事。如果你有一天飞黄腾达,也绝对与这篇文章没有直接的关系。因为,你的命运,只掌握在你自己的手中!

同样是打工,为什么你一个月只有2、3K,而唐骏的身价却可以高达10亿?或许你会反驳我,说人人都成为唐骏的概率有多大?的确,人人都成为唐骏的确不现实,但是经过努力,月薪达到8K、1W的总是大有人在吧?虽然不能达到大富大贵,但也不至于买不起房子,成天挤在合租房吧?

继续阅读 »

February 16, 2010Java

没有评论
195 views

MyEclipse快捷键

熟用快捷键可以提高工作效率,备用。

(1)Ctrl+M切换窗口的大小
(2)Ctrl+Q跳到最后一次的编辑处
(3)F2当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时Tooltip还会显示即Show Tooltip Description。
F3跳到声明或定义的地方。
F5单步调试进入函数内部。
F6单步调试不进入函数内部,如果装了金山词霸2006则要把“取词开关”的快捷键改成其他的。
F7由函数内部返回到调用处。
F8一直执行到下一个断点。
(4)Ctrl+Pg~对于XML文件是切换代码和图示窗口
(5)Ctrl+Alt+I看Java文件中变量的相关信息
(6)Ctrl+PgUp对于代码窗口是打开“Show List”下拉框,在此下拉框里显示有最近曾打开的文件
(7)Ctrl+/ 在代码窗口中是这种//~注释。
Ctrl+Shift+/ 在代码窗口中是这种注释,在JSP文件窗口中是
(8)Alt+Shift+O(或点击工具栏中的Toggle Mark Occurrences按钮) 当点击某个标记时可使本页面中其他地方的此标记黄色凸显,并且窗口的右边框会出现白色的方块,点击此方块会跳到此标记处。
(9)右击窗口的左边框即加断点的地方选Show Line Numbers可以加行号。
(10)Ctrl+I格式化激活的元素Format Active Elements。
Ctrl+Shift+F格式化文件Format Document。
(11)Ctrl+S保存当前文件。
Ctrl+Shift+S保存所有未保存的文件。
(12)Ctrl+Shift+M(先把光标放在需导入包的类名上) 作用是加Import语句。
Ctrl+Shift+O作用是缺少的Import语句被加入,多余的Import语句被删除。
(13)Ctrl+Space提示键入内容即Content Assist,此时要将输入法中Chinese(Simplified)IME-Ime/Nonlme Toggle的快捷键(用于切换英文和其他文字)改成其他的如改成Ctrl+Shift+Z,同时在“Text Service and Input Languages”对话框中删掉Chinese(PRC)下面的其他中文输入法只保留紫光输入法,此时按Ctrl+Shift+Z将在英文和紫光中文之间切换。
Ctrl+Shift+Space提示信息即Context Information。
(14)Ctrl+D删除当前行。
(15)双击窗口的左边框可以加断点。
(16)在.jap.或.java等文件中右键选“Campare With”或“Replace With”可以找到所有操作的历史记录。
(17)在菜单中选Window-Show View-Navigator可调出导航功能窗。
(18)Ctrl+1 快速修复(最经典的快捷键,就不用多说了)

继续阅读 »

返回顶部