ibtais和plsql连接oracle数据库使用sql查询简介:
daoImpl实现类代码:
public List<ImageRecord> queryImgRecord(ImageRecord imageRecord, int start,
int end,String orderBy,String orderType) {
//把数据封装到map里面去,key值必须和xml文件里面的parameterMap的属性值相匹配。
Map map = new HashMap<Object, Object>();
map.put("policyNo", imageRecord.getPolicyNo());
map.put("contractNo", imageRecord.getContractNo());
map.put("hasCreateTif", imageRecord.getHasCreateTif());
map.put("updateName", imageRecord.getUpdateName());
map.put("start", start);
map.put("end", end);
//使用map作为参数传递进去
List<ImageRecord> list = getSqlMapClientTemplate().queryForList(
"APP_IMG_RECORD.queryImgRecord", map);
return list;
}
xml文件sql编写:
属性简介和注意事项:
-
id:关联实现方法名,resultMap:返回的model类类型。关联定义好的resultMap的id
-
parameterClass:参数的类型这里指向model类。可以使其他类型比如String(和查询的表app_img_record保持一致)。
-
使用#符号是指匹配字段类型,类型与定义好的resultMap定义的一致。使用$符号不匹配字段类型。
-
有特殊符号就使用包括起来比如使用大于等于号之类的。
-
like查询使用%$$%来包括字段。使用$符号不匹配字段类型如果是字符类型需要加上''来包括。
-
定义的resultMap返回值类型,指向具体的model类。column指数据库字段,property指model字段,jdbcType指数据类型。
-
分页问题:(plsql没有分页函数只能使用rownum关键字(必须起别名不然plsql不认)进行查询所有行数,再用行数来决定显示哪些东西,要使用别名)
-
排序的话尽量在声明实体类属性名的时候和数据库字段名保持一致。封装map参数的时候和设置parameterMap参数必须保持一致尽量与数据库一致。传参可能会有问题比如排序的时候字段匹配不上。
比如:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
<sqlMap namespace="APP_IMG_RECORD" >
<resultMap id="BaseResultMap" class="com.ifp.bizsupport.common.model.exhibition.ImageRecord">
<result column="ID" property="id" jdbcType="VARCHAR" />
<result column="HAS_CREATE_TIF" property="hasCreateTif" jdbcType="VARCHAR" />
<result column="HAS_IS_AUTO" property="hasIsAuto" jdbcType="VARCHAR" />
<result column="UPDATE_TIME" property="updateTime" jdbcType="DATE" />
<result column="UPDATE_NAME" property="updateName" jdbcType="VARCHAR" />
<result column="INSERT_TIME" property="insertTime" jdbcType="DATE" />
<result column="UPLOAD_NUM" property="uploadNum" jdbcType="NUMBER" />
<result column="CREATE_NUM" property="createNum" jdbcType="NUMBER" />
<result column="POLICY_STATUS" property="policyStatus" jdbcType="NUMBER" />
<result column="POLICY_ID" property="policyId" jdbcType="VARCHAR" />
<result column="POLICY_NO" property="policyNo" jdbcType="VARCHAR" />
<result column="CONTRACT_NO" property="contractNo" jdbcType="VARCHAR" />
<result column="POLICY_TYPE" property="policyType" jdbcType="VARCHAR" />
<result column="BY1" property="by1" jdbcType="VARCHAR" />
<result column="BY2" property="by2" jdbcType="VARCHAR" />
<result column="BY3" property="by3" jdbcType="VARCHAR" />
<result column="BY4" property="by3" jdbcType="VARCHAR" />
<result column="BY5" property="by3" jdbcType="VARCHAR" />
</resultMap>
<!-- resultMap里的字段 -->
<sql id="Base_Column_List" >
ID, HAS_CREATE_TIF, HAS_IS_AUTO, UPDATE_TIME, UPDATE_NAME, INSERT_TIME,
UPLOAD_NUM, CREATE_NUM, POLICY_STATUS, POLICY_ID, POLICY_NO, CONTRACT_NO, POLICY_TYPE,
BY1, BY2, BY3, BY4, BY5
</sql>
<parameterMap class="java.util.HashMap" id="parameterMap1">
<parameter property="policyNo"/>
<parameter property="contractNo"/>
<parameter property="hasCreateTif"/>
<parameter property="updateName"/>
<parameter property="start"/>
<parameter property="end"/>
<parameter property="orderBy"/>
<parameter property="orderType"/>
</parameterMap>
<!-- 查询影像件列表 -->
<select id="queryImgRecord" resultMap="BaseResultMap" parameterClass="java.util.HashMap" >
select * from
(select rownum r, a.* from app_img_record a where 1=1) b
where POLICY_NO like '%$policyNo$%'
<isNotNull property="contractNo">
and CONTRACT_NO like '%$contractNo$%'
</isNotNull>
<isNotNull property="hasCreateTif">
and HAS_CREATE_TIF like '%$hasCreateTif$%'
</isNotNull>
<isNotNull property="updateName">
and UPDATE_NAME like '%$updateName$%'
</isNotNull>
<![CDATA[
and (r >= #start:NUMBER# and r <= #end:NUMBER#)
]]>
<!--
<isNotNull property="orderBy">
order by $orderBy$ $orderType$
</isNotNull>
-->
</select>
也可以使用在程序里面拼接sql语句在xml文件里面执行的方式。
java 程序:
String sql = "select "
+ " policy_agent_code, "
+ " policy_agent_name, "
+ " job_level, "
+ " policy_no, "
+ " main_product_name, "
+ " policy_sts, "
+ " premium "
+ " from v_gx_month_policy_info_new "
+ " where policy_agent_code = '" + agentCode + "'";
List<Map> list = getSqlMapClientTemplate().queryForList(
"PAD_GROUP_GX.queryPolicyInfoByMonth", sql);
xml执行文件:
<select id="queryPolicyInfoByMonth" parameterClass="java.lang.String"
resultClass="java.util.HashMap">
$sql$
</select>