ibatis学习笔记2

本节摘要:本节介绍ibatis的多条件查询

1.引言

最近,项目中某个表需要配置500多条数据,数据配置中难免会出错,此表关键字段为编号和方法名称,编号和方法名称要对应,如此的话,少配置一条记录,编号和方法名称不对应等等,这些错误都是可能存在的。人工去检查数据,如此多的数据,一是工作量大,二是人工检查也容易出错。签于此,写了一段代码来做一些简单的校验。采用ibatis加jxl的方式来实现此功能。采用jxl去取excle的数据,然后再根据取出的编号和方法名称去数据库查询数据,如果根据此条件可以查询到数据,那么表示此脚本已经配置,同时把表中未配置的数据给筛选出来。采用ibatis是因为之前学习过ibatis半自动化框架,这次只是想拿出来巩固一下。采用sql脚本的形式应该也可以实现此功能,这里不是我想介绍的。

本节的介绍是基于之前的一篇博客ibatis学习笔记,本节我就不再新建工程以及对应的接口和实现类,直接在原来的接口和实现类中增加一个方法。

关于jxl的介绍,也可以参考之前的一篇博客jxl简单介绍--excle数据的读和取

数据库连接的是本地的oracle数据库。

(1)excel中的数据形式如下:

image

这里只贴出10条记录,第一列编号,第二列为方法名称,我用jxl的方式取出每一行的编号和方法名称,如果根据这两个条件可以在表中查询到数据,表示我这条数据已经在表中配置了。

检验的前提是excel中的数据是经过整理的,是完全无误的,是基于这个的基础上,去对数据库表中的数据做以下检验.

(2)表的结构如下:

image

本来准备表把建表的语句贴出来,想想还是算了,毕竟是公司内部的东东,还是慎重点好。

 

2.代码文件

实在没什么好介绍的,就直接上代码吧

从本节你可能没什么收获请见谅,有些博客我只是想记录一下工作中的点点滴滴。

为了方便查看,我把增加的文件和修改的文件分开介绍。

(1)增加的文件

BsServiceCorba.java---表对应的javabean对象

BsServiceCorba.java
  1 package ibatis;
  2 
  3 /**
  4  * 
  5  *Module:          BsServiceCorba.java
  6  *Description:   bs_service_corba的javabean
  7  *Company:       
  8  *Author:           pantp
  9  *Date:              May 12, 2012
 10  */
 11 public class BsServiceCorba {
 12 
 13     public String STATE;
 14     public String IMPL_METHOD;
 15     public String BILL_ID_EXPR;
 16     public String REMARKS;
 17     public String BUSI_CODE;
 18     public String STATE_DATE;
 19     public String CREATE_DATE;
 20     public String SERVICE_ID;
 21     public String IMPL_MODE;
 22     public String IMPL_CLASS;
 23 
 24     public String getSTATE() {
 25         return STATE;
 26     }
 27 
 28     public void setSTATE(String state) {
 29         STATE = state;
 30     }
 31 
 32     public String getIMPL_METHOD() {
 33         return IMPL_METHOD;
 34     }
 35 
 36     public void setIMPL_METHOD(String impl_method) {
 37         IMPL_METHOD = impl_method;
 38     }
 39 
 40     public String getBILL_ID_EXPR() {
 41         return BILL_ID_EXPR;
 42     }
 43 
 44     public void setBILL_ID_EXPR(String bill_id_expr) {
 45         BILL_ID_EXPR = bill_id_expr;
 46     }
 47 
 48     public String getREMARKS() {
 49         return REMARKS;
 50     }
 51 
 52     public void setREMARKS(String remarks) {
 53         REMARKS = remarks;
 54     }
 55 
 56     public String getBUSI_CODE() {
 57         return BUSI_CODE;
 58     }
 59 
 60     public void setBUSI_CODE(String busi_code) {
 61         BUSI_CODE = busi_code;
 62     }
 63 
 64     public String getSTATE_DATE() {
 65         return STATE_DATE;
 66     }
 67 
 68     public void setSTATE_DATE(String state_date) {
 69         STATE_DATE = state_date;
 70     }
 71 
 72     public String getCREATE_DATE() {
 73         return CREATE_DATE;
 74     }
 75 
 76     public void setCREATE_DATE(String create_date) {
 77         CREATE_DATE = create_date;
 78     }
 79 
 80     public String getSERVICE_ID() {
 81         return SERVICE_ID;
 82     }
 83 
 84     public void setSERVICE_ID(String service_id) {
 85         SERVICE_ID = service_id;
 86     }
 87 
 88     public String getIMPL_MODE() {
 89         return IMPL_MODE;
 90     }
 91 
 92     public void setIMPL_MODE(String impl_mode) {
 93         IMPL_MODE = impl_mode;
 94     }
 95 
 96     public String getIMPL_CLASS() {
 97         return IMPL_CLASS;
 98     }
 99 
100     public void setIMPL_CLASS(String impl_class) {
101         IMPL_CLASS = impl_class;
102     }
103 
104 }

BsServiceCorba.xml---表对应的javabean的配置文件

BsServiceCorba.xml
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 <!DOCTYPE sqlMap      
 4     PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"      
 5     "http://ibatis.apache.org/dtd/sql-map-2.dtd">
 6 
 7 <sqlMap>
 8     <typeAlias alias="BsServiceCorba" type="ibatis.BsServiceCorba" />
 9 
10     <!-- 精确查询  多条件查询-->
11     <parameterMap class="java.util.HashMap" id="myParam">
12     <!-- property屬性,对应代码中map对象的key,可以随便写,尽量望文生义 -->
13         <parameter property="BUSI_CODE" />
14         <parameter property="IMPL_METHOD" />
15         <parameter property="STATE" />
16     </parameterMap>
17 
18     <select id="multQuery" parameterMap="myParam"
19         resultClass="BsServiceCorba">
20         SELECT BUSI_CODE,IMPL_METHOD FROM BS_SERVICE_CORBA WHERE
21         BUSI_CODE =? AND IMPL_METHOD =? AND STATE = ?
22     </select>
23 
24 </sqlMap>

Check.java---读取excel数据的方法和测试的main方法

Check.java
 1 package ibatis;
 2 
 3 import java.io.FileInputStream;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 
 7 import jxl.Sheet;
 8 import jxl.read.biff.BiffException;
 9 import jxl.read.biff.WorkbookParser;
10 
11 /**
12  * 
13  *Module:          Check.java
14  *Description:   采用jxl读取excel数据,然后根据读取的数据采用ibatis去查询oracle数据库
15  *Company:       
16  *Author:           pantp
17  *Date:              May 12, 2012
18  */
19 public class Check {
20 
21     //指定excel所在的路径,这里采用的是绝对路径
22     public final static String excelPath = "d:/data.xls";
23 
24     /**
25      * add by pantp 2012/05/12
26      * 采用jxl的方式去读取excel中的数据
27      * @throws BiffException
28      * @throws IOException
29      */
30     public static void queryExcel() throws BiffException, IOException {
31         InputStream is = new FileInputStream(excelPath);
32         WorkbookParser rwb = (WorkbookParser) WorkbookParser.getWorkbook(is);
33         Sheet rs1 = rwb.getSheet(0);//得到excel中第一个sheet的对象
34         int rows = rs1.getRows();// 获取所有的行数
35         System.out.println("\n【" + excelPath
36                 + "】表所在的信息为如下:==================");
37         System.out.println("行数=" + rows);
38         int cols = rs1.getColumns();// 获得所有的列数
39         System.out.println("列数=" + cols);
40         System.out.println("========================================\n");
41 
42         System.out.println("\n========================================");
43         IDeptSV query = new DeptSVImpl();
44         int m = 0;
45         int n = 0;
46         for (int j = 0; j < rows; j++) {
47             String busiCode = rs1.getCell(0, j).getContents();//得到编号
48             String implMehtod = rs1.getCell(1, j).getContents();//得到方法名称
49             BsServiceCorba bcs = query.qryBsServieceCorba(busiCode, implMehtod);
50             if (bcs == null) {//对象为null,表示没有查询到数据
51                 if (m % 5 == 0) {//每5行空一行
52                     System.out.println();
53                 }
54                 //打印一个序号
55                 System.out.println("(" + (m + 1) + ")" + "\t\t" + busiCode
56                         + "\t\t记录不存在");
57                 m++;//统计未配置数据的个数
58             } else {
59                 n++;//统计已配置数据的个数
60             }
61         }
62         System.out.println("\n=========================================\n");
63 
64         System.out.println("校验记录如下:=================================");
65         System.out.println("数据库脚本【已】配置的条数为:" + n);
66         System.out.println("数据库脚本【未】配置的条数为:" + m);
67         System.out.println("==========================================");
68     }
69     
70     /**
71      * add by pantp 2012/05/12
72      * 测试的main方法
73      * @param args
74      * @throws BiffException
75      * @throws IOException
76      */
77     public static void main(String[] args) throws BiffException, IOException {
78 
79          queryExcel();
80 
81     }
82 
83 }

 

(2)修改的文件

IDeptSV.java---增加一个查询表的qryBsServieceCorba接口

/**
* add by pantp    2012/05/12
* 根据需求编号和方法名称去查询BS_SERVICE_CORBA表
* @param busiCode          需求编号
* @param implMehtod    方法名称
* @return
*/
public BsServiceCorba qryBsServieceCorba(String busiCode,String implMehtod);

 

DeptSVImpl.java---增加对qryBsServieceCorba接口的实现

qryBsServieceCorba
 1     /**
 2      * add by pantp  2012/05/12
 3      * 根据需求编号和方法名称去查询BS_SERVICE_CORBA表
 4      * @param busiCode          需求编号
 5      * @param implMehtod    方法名称
 6      * @return
 7      */
 8     public BsServiceCorba qryBsServieceCorba(String busiCode, String implMehtod) {
 9         Map p = new HashMap();
10         // 此处的key和BsServiceCorba.xml文件中的parameter标签的property属性是一一对应的
11         p.put("BUSI_CODE", busiCode.trim());// 需求编号
12         p.put("IMPL_METHOD", implMehtod.trim());// 方法名称
13         p.put("STATE", "U");// 数据有效
14 
15         // BsServiceCorba bsc = new BsServiceCorba();
16         BsServiceCorba bsc = null;
17         try {
18             sqlMapClient.startTransaction();// 开始事务
19 
20             bsc = (BsServiceCorba) sqlMapClient.queryForObject("multQuery", p,
21                     bsc);
22 
23             sqlMapClient.commitTransaction();// 提交事务
24         } catch (SQLException e) {
25             try {
26                 sqlMapClient.getCurrentConnection().rollback();// 回滚事务
27                 System.out.println(busiCode + "\t\t" + e.getMessage());
28             } catch (SQLException e1) {
29                 e1.printStackTrace();
30             }
31             e.printStackTrace();
32         } finally {
33             try {
34                 sqlMapClient.endTransaction();// 结束事务
35             } catch (SQLException e) {
36                 e.printStackTrace();
37             }
38         }
39         return bsc;
40     }

 

SqlMapConfig.xml---添加对实体类BsServiceCorba和数据库表BS_SERVICE_CORBA的映射

只用加以下一句配置:

<sqlMap resource="ibatis/BsServiceCorba.xml" />

 

3.测试效果

把文件放在代码中指定的位置,运行Check类中的main方式,测试的效果如下:

image

为了方便把测试的整个效果截下来,我只用了100条数据来操作。

多条件查询也可以通过在java代码中拼装sql语句来实现,只是这种方式失去了ibatis代码和sql语句分离的好处,这里就采用以上的配置文件来实现了。

转载于:https://www.cnblogs.com/java-pan/archive/2012/05/13/ibatis2.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值