博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于ibatis简单使用的想法
阅读量:6608 次
发布时间:2019-06-24

本文共 2524 字,大约阅读时间需要 8 分钟。

hot3.png

   ibatis 是一个成熟的框架,现在已经是改名字叫mybatis了,框架的配置比较烦,如xml,dao的书写,还有每个表还要对应于javabean,没有的话,map 也成,一直在想怎么能通过一些方式使其更好地接入,

源代码在新浪爱问人 资料库中 搜 ibatis简单使用的想法

1.   xml的简化?

问题:ibatis 中的对应表的xml常用几种定义, <resultMap>,<statement>(包括,insert,select等,即sql语句),其中的主体是 sql语句,如

<statement id="selectBeanByColumn" resultMap="channel.map"

parameterClass="java.util.HashMap">

                   select * from T_EZF_CHANNEL

                   <dynamic prepend="WHERE">

                            <isNotEmpty prepend='AND' property='channel_name'>

                                     (T_EZF_CHANNEL_NAME like '%$channel_name$%')

                            </isNotEmpty>

                   </dynamic>

                   order by T_EZF_CHANNEL_ID ASC

         </statement>

在N个表,即N个xml中,这部分若能公用,会是比较不错的选择

方案:但考虑到这里写的sql,对于表中,字段的个数,字段的名字,字段的类型均不一样,因此,这里要写成一个xml给各表xml继承,没有什么好的办法。同时想想hibernate的具体操作,其对于比较复杂的语句,也均是使用hql来执行,只有简单的,才会共用,因此,我认为,这方面没有可行的方案。

              但联想到一些生成工具,我认为,可以写一个简单的生成工具去依据表来生成简单的对应sql,如queryCountByColumn queryPage deleteBean updateBean saveBean 等

2.   Java的简化?

         上面提到的xml的简化不太可行,但java的简化确是可行的,写一个抽象类BaseDao,把逻辑全部写完,对于user表,写一个tbuserdaoimlp.java对其继承,为了区分,这是user表,和它主键,此类实现basedao中的 两个方法,如:

    @Override

    protected String getTableMapStr() {

       return IUserDao.table_map_str;

    }

   

    protected String getTableId(){

       return IUserDao.user_id;

    }

3.   关于java bean 和 map的想法

ibatis中有bean,map的方式来实现入参和出参的格式,

a)         入参

一直觉得对于一个表写一个bean是比较烦躁,入参感觉用map会更灵活一点,一般来说,key和column应该是一一对应,这个key可以在idao里面用string statis写,很多时候,数据是从接口中来,接口中来,一般都要map

b)         出参

系统中查询功能用得非常多,对于单表查询,建议用resultMap来使用,在代码里为了让其key规范,可以在dao中加string 的静态final变量作常量,map这个和接口接也好一些

 4、ibatis对数据库的批量操作

ibatis的批量 操作可能通过数据库的批量操作来实现, 即这边把数据拼好后扔过去,其中用到了ibatis的<iterater>标签,

如:oracle的

begin
update XXX set
XXX_ACHECKSTATUS = '$targetList[].flow_acheckstatus$'
XXX_RESERVED1= '$targetList[].flow_reserved1$'
where XXX_INTERID = '$targetList[].flow_innerId$';
end;

注:这个map里面要有 targetList这个属性

如果用spring集成的话 ,

(String) getSqlMapClientTemplate().insert(getTableMapStr()+".batchInsert", paramMap);

insert的地址 :

insert all
into XXX_TMPCOUNT (XXX_FLOW_ID, XXX_TMPCOUNT_MERCHANT) values ( '$targetList[].flow_id$','$targetList[].tmpcount_merchant$')
select * from dual

5、数据类型为时间

在和页面或者是接口交互时,时间信息一般为yyyyMMddHHmmss的格式,这个和数据库的保存就有一些冲突,到底应该是java和数据库的数据类型转换,以java的string ->to_date,用sql的函数即可

to_date函数 ,

在select的时候,date类型应转为string 

select to_char(FF.T_EZF_TMPCOUNT_TIME,'yyyymmddhh24miss') ,即可

.

转载于:https://my.oschina.net/u/110531/blog/141639

你可能感兴趣的文章
Shell脚本 常用命令总结 二
查看>>
Centos(Yum源更改)
查看>>
冰球游戏大概的模块
查看>>
PHP中htmlentities和htmlspecialchars的区别
查看>>
Best Part
查看>>
ClassPathXMLApplicationContext上下文加载过程
查看>>
JS模拟select下拉菜单
查看>>
线性方程组迭代求解——Jacobi迭代算法(Python实现)
查看>>
vmware workstation14永久激活密钥分享
查看>>
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
查看>>
iOS 多线程 之 GCD(大中枢派发)(一)
查看>>
mysql用户与权限管理笔记
查看>>
Myeclipse中打开接口实现类的快捷键
查看>>
<20190516> 一次比较糟糕的售后维修体验(某硕主板)
查看>>
iOS网络篇2-http协议通信规则
查看>>
删除sql dump中的AUTO_INCREMENT
查看>>
使用JdbcTemplate和JdbcDaoSupport
查看>>
C博客作业--指针
查看>>
版本12.2.0.1.0数据库,复制种子数据库快速创建租户数据库PDB
查看>>
吴忠军中华演出网
查看>>