当前位置: 首页 > news >正文

关于spring和ibatis的整合

没大段时间写博客,工作的时候记录一些,等有时间了再写博客总结吧。现在都是加班来会议一天到底学到了什么,然后记录一些... 觉得盲目的工作实在是太无趣了。

spring现在普及度很广,在项目中就像千手观音一般,无所不能。

而ibatis几十年来的orm,现已经转成myBitis,鉴于现在orm的数目是在太多,ibatis也越来越少人用了,事实上一个orm在spring看来只是千手观音中的一个手上的法宝罢了。

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <import resource="classpath:applicationContext-dao.xml" />
    <import resource="classpath:applicationContext-resources.xml" />
    <import resource="classpath:applicationContext-service.xml" />
    
</beans>

相当清晰。

spring拿到ibatis法宝:

applicationContext-dao.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"
    default-lazy-init="true">

    <!-- Transaction manager for a single JDBC DataSource -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>


    <!-- SqlMap setup for iBATIS Database Layer -->
    <bean id="sqlMapClient"
        class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation">
            <value>classpath:/sql-map-config.xml</value>
        </property>
        <property name="dataSource" ref="dataSource" />
    </bean>


    <bean id="userDao" class="com.syezon.webapp.dao.ibatis.UserDaoImpl">
        <property name="dataSource" ref="dataSource" />
        <property name="sqlMapClient" ref="sqlMapClient" />
    </bean>
</beans>

配置过单独的ibatis的话,就知道我们是要自己配置transactionManagersqlMapClient的。

现在我们把这两个对象交给spring管理了

注意到sqlMapClient参数的configLocation:classpath:/sql-map-config.xml

我们来看看:

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

    <settings enhancementEnabled="true" maxTransactions="20"
        maxRequests="32" maxSessions="10" useStatementNamespaces="true" />

    <!-- Identify all SQL Map XML files to be loaded by this SQL map. Relative to classpath -->

    
    <sqlMap resource="sqlmaps/SaleS2dSQL.xml" />
    <sqlMap resource="sqlmaps/DealerSQL.xml" />
</sqlMapConfig>

 

resource就是写sql文的文件啦,那么就让我们开始写sql吧。
来两条select语句吧:其中蕴含了大部分可能遇到的问题,包括
isEqual 判断,<![CDATA[是为了尖括号能够使用
    <select id="getUsedAdmins" parameterClass="java.util.Map"
        resultMap="adminNameResult">
        <![CDATA[
        select id,name from tb_admin where  status = 1
    ]]>
        <isEqual property="type" compareValue="3">
            <![CDATA[  and roleid=3 ]]>
        </isEqual>
        <isEqual property="type" compareValue="4">
            <![CDATA[ and roleid>3 and roleid<6 ]]>
        </isEqual>
    </select>
 <select id="getAdmins" parameterClass="java.util.Map" resultMap="adminResult">
        select * from (select rownum rn,m.* from(select *
        from tb_admin where
        status=1 and roleid=1
        <isNotEqual property="roleid" compareValue="0" prepend="and">
            id
            in(select user_id from qx_user_role where role_id=#roleid#)
        </isNotEqual>
    <![CDATA[         
        order by id desc)m )
        where rn>#firstrow# and rn<#maxrow#
    ]]>
    </select>

    <select id="getAdmin" parameterClass="java.lang.Long" resultMap="adminResult">
        <![CDATA[
        select * from tb_admin where id = #value# and status = 1
    ]]>
    </select>

insert语句可能会牵涉到自增长自然主键

http://www.cnblogs.com/killbug/archive/2012/12/23/2830252.html

 

相关文章:

  • mybatis java.lang.NumberFormatException: For input string: D
  • 初识 beanstalkd
  • Oracle Apps AutoConfig
  • 用以太坊开发框架Truffle开发智能合约实践攻略(代码详解)
  • javascript解汉诺塔问题
  • RIP 漏打 no auto-summary 造成环路故障
  • oracle Like模糊查询与带有关键字Reverse的索引应用
  • JQuery EasyUI 动态隐藏
  • 安装OpenStack Queens版本的教程推荐
  • [leetcode]Flatten Binary Tree to Linked List
  • 深度学习中常见问题
  • 华为云:如何解除数据库高并发场景下的达摩克利斯之剑?
  • Tomcat的参数配置及一般问题的解决
  • node.js来爬取智联全国的竞争最激烈的前十岗位
  • css颜色代码大全:(网页设计师和平面设计师常用)
  • JavaScript-如何实现克隆(clone)函数
  • 「译」Node.js Streams 基础
  • 【RocksDB】TransactionDB源码分析
  • 【刷算法】从上往下打印二叉树
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CentOS7 安装JDK
  • JS学习笔记——闭包
  • Linux下的乱码问题
  • MySQL用户中的%到底包不包括localhost?
  • Netty 4.1 源代码学习:线程模型
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • PHP CLI应用的调试原理
  • Protobuf3语言指南
  • Python 反序列化安全问题(二)
  • python 学习笔记 - Queue Pipes,进程间通讯
  • SQLServer插入数据
  • 从setTimeout-setInterval看JS线程
  • 排序算法之--选择排序
  • 前端技术周刊 2019-02-11 Serverless
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 小而合理的前端理论:rscss和rsjs
  • 学习使用ExpressJS 4.0中的新Router
  • 优化 Vue 项目编译文件大小
  • 栈实现走出迷宫(C++)
  • !!Dom4j 学习笔记
  • #NOIP 2014# day.1 T2 联合权值
  • (10)ATF MMU转换表
  • (LeetCode C++)盛最多水的容器
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (力扣)1314.矩阵区域和
  • (三分钟)速览传统边缘检测算子
  • (三十五)大数据实战——Superset可视化平台搭建
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)Sublime Text3配置Lua运行环境
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net framework4与其client profile版本的区别