ibatis 开发中的经验 (二)ibatis 命名空间配置以及左中右连接查询

        前几天在写dao层实现的时候,自己写了sql语句但是在dao层找不到语句,在sqlmap文件里面已经配置好了,从错误的类型来看,觉得很可能是查找路径不正确,最后发现是配置文件的namespace这个参数起的作用,命名空间大家都知道是起到了避免命名冲突的作用,在各种java类里面都是通过包和命名空间来避免冲突,因此它一般是启用的,但是在ibatis中如果不配置默认它是不起作用的,因此查了查咋么配置ibatis。配置如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
    <settings useStatementNamespaces="true"/>
	<sqlMap resource="com/zhjy/zydc/dao/map/sql-map-menuinfo.xml"/>  
	<sqlMap resource="com/zhjy/zydc/dao/map/sql-map-orgInfo.xml"/>  
	<sqlMap resource="com/zhjy/zydc/dao/map/sql-map-roleinfo.xml"/>  
	<sqlMap resource="com/zhjy/zydc/dao/map/sql-map-userinfo.xml"/>  
	<sqlMap resource="com/zhjy/zydc/dao/map/sql-map-resource.xml"/>  
</sqlMapConfig>
 

        在sqlMapConfig标签中,有一个settings元素,这个标签是对ibatis进行各种配置的作用,<settings>元素用于配置和优化SqlMapClient实例的各个选项。这个元素自己以及它包含的属性都是可选的,所以,我们开始没有增加这个属性也可以使用。

       这个元素可以设置命名空间、缓存配置、懒加载、最大会话数等一些常用功能,在性能优化方面还是值得了解了解的。更多配置可以查询文档。

       今天在弄表单这一块,表单里面没有的功能就需要自己实现,写写代码自己建立一些表等等,觉得挺简单的但是有时也会遇到问题好好研究一下它这个表单的实现,下午在用表单做一个多选复选框,建了一张字典表、一张关系表,两个表单一个修改、一个只读,在加载数据记录时,找了半天也加载不出来,数据库里面也添加进了数据去,经过仔细检查SQL语句,发现有些错误,当主表和关系表或其他表组合查询时,其他的表里面如果没有记录那么很可能导致查询不出来,我想到了这种一般是左右连接查询,修改了SQL语句可以查询出来了,左右连接查询一般用在表需要组合查询但是一边有没有记录的情况,或者只想要一边的记录时,就可以利用连接查询。如下面sql语句

select u.*,ui.checkid 
from fcs_user as u LEFT JOIN fcs_useritem as ui on u.id=ui.userid 
where id=':{$urlParam("formid")}:'



           这样查询出来的记录就不会有左边的表记录或者右边的表记录。

           内连接其实大家一直用的等值连接即是内连接,inner关键字是可以省略的,这是我在查询表单时写的SQL语句,使用的是内连接,这几种写法其实是一样的没有什么区别,反正都可以查询出记录来,可能第一种会更标准一些。

第一种
select FCS_BILLSUB.*,FCS_ITEM.sitemcode,FCS_ITEM.sitemname 
from FCS_BILLSUB inner join FCS_ITEM on FCS_BILLSUB.sitemid=FCS_ITEM.sitemid 
where djbh='DAA00000476'
第二种

select FCS_BILLSUB.*,FCS_ITEM.sitemcode,FCS_ITEM.sitemname 
from FCS_BILLSUB join FCS_ITEM on FCS_BILLSUB.sitemid=FCS_ITEM.sitemid 
where djbh='DAA00000476'
第三种

select FCS_BILLSUB.*,FCS_ITEM.sitemcode,FCS_ITEM.sitemname 
from FCS_BILLSUB,FCS_ITEM   
where FCS_BILLSUB.sitemid=FCS_ITEM.sitemid 
and djbh='DAA00000476'

            
         上面者三种写法是一样的,测试之后查询出来的结果也是一样的,本质上都是多个表进行等值连接查询,内连接查询可能是相对于外连接查询而言的,左右查询把左右表的非等值数据过滤掉了,这就是很简单的内连接查询。


           实现各种功能或做啥东西都要求有基础,即使给一个新的东西在实现的过程中也会应用你会的各种基础知识,所以掌握好基础在哪里都会用的上,平时多积累一些知识点、常识啥的,还是非常有用的。


posted @ 2014-06-09 18:29  李龙生的博客  阅读(278)  评论(0编辑  收藏  举报