Spring数据库访问之iBatis(一)

Spring+Ibatis集成开发实例 首先简历数据库demo(本文选mysql)数据库脚本: CREATE TABLE `ibatis` (  `id` varchar(20) NOT NULL,  `name` varchar(20) default NULL,  PRIMARY KEY  (`id`)) ENGINE=InnoDB DEFAULT CHARSET=gb2312;insert into ibatis  阅读详情
    为了丰富博客专栏【Spring数据库访问系列】的内容,完善Spring数据库访问的体系,现在我们介绍Spring对iBatis的支持。 
    相对于Hibernate等ORM框架的全自动SQL,那么iBatis则属于半自动化的ORM框架,我们需要编写SQL语句,由iBatis进行数据库访问,返回结果。而iBatis可以为我们做的更多,比如对查询结果的封装等等。虽然不如全自动SQL方便,但是SQL的主动权却在我们开发人员的手中,对SQL优化的掌控则是很直接的。对于Hibernate和iBatis的其它讨论,不是我们探究的范围。 
当前iBatis的版本为3,其名称也已经更改为MyBatis。而Spring更新到3.1都没有对MyBatis进行支持,但是MyBatis团队已经自行开发了Spring的支持。我们以Spring为主,仍然使用对iBatis2的支持来进行说明。 
首先是构建开发环境,我们仍然使用Maven作为构建环境,创建项目,本文的示例基于“联系人管理”功能来展示:
Java代码   收藏代码
  1. package org.ourpioneer.contact.bean;  
  2. public class Contact {  
  3.     private Long id;  
  4.     private String name;  
  5.     private String gender;  
  6.     private String mobile;  
  7.     private String address;  
  8.     //省略getter和setter方法  
  9.     @Override  
  10.     public String toString() {  
  11.         return "Contact [id=" + id + ", name=" + name + ", gender=" + gender  
  12.                 + ", mobile=" + mobile + ", address=" + address + "]";  
  13.     }  
  14. }  

    编写一个Contact类来描述联系人的一些特征,为了简便,我们使用5个字段就够了,实体类是很简单的。下面是添加类库了,要访问数据库,不能少了数据库驱动,我们使用MySQL数据库,在pom.xml中添加依赖: 
Xml代码   收藏代码
  1. <dependency>  
  2.     <groupId>mysql</groupId>  
  3.     <artifactId>mysql-connector-java</artifactId>  
  4.     <version>5.1.14</version>  
  5.     <type>jar</type>  
  6.     <scope>compile</scope>  
  7. </dependency>  

    同时在数据库中建表,因为iBatis还没有自动建表的功能: 
Sql代码   收藏代码
  1. CREATE TABLE `contact` (  
  2. `ID`  int(11) NOT NULL AUTO_INCREMENT ,  
  3. `NAME`  varchar(20) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,  
  4. `GENDER`  varchar(10) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,  
  5. `MOBILE`  varchar(11) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,  
  6. `ADDRESS`  varchar(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,  
  7. PRIMARY KEY (`ID`)  
  8. )  
  9. ENGINE=InnoDB  
  10. DEFAULT CHARACTER SET=latin1 COLLATE=latin1_swedish_ci  
  11. AUTO_INCREMENT=1  
  12. ROW_FORMAT=COMPACT  
  13. ;  

    加好驱动,创建好数据库表,那么程序访问需要配置连接池,这里我们使用BoneCP连接池,在pom.xml中加入相关依赖: 
Xml代码   收藏代码
  1. <repositories>  
  2.     <repository>  
  3.         <releases>  
  4.             <updatePolicy>always</updatePolicy>  
  5.         </releases>  
  6.         <snapshots>  
  7.             <updatePolicy>always</updatePolicy>  
  8.         </snapshots>  
  9.         <id>Jolbox</id>  
  10.         <name>Jolbox Repositories</name>  
  11.         <url>http://jolbox.com/bonecp/downloads/maven</url>  
  12.     </repository>  
  13. </repositories>  

    因为BoneCP的Maven仓库不在Maven的中央仓库中,所以必须加入以上代码到pom.xml中,这点可以在BoneCP的官方网站(http://jolbox.com/)中获得,下面就是加入依赖了,就没有什么多说的了: 
Xml代码   收藏代码
  1. <dependency>  
  2.     <groupId>com.jolbox</groupId>  
  3.     <artifactId>bonecp</artifactId>  
  4.     <version>0.7.1.RELEASE</version>  
  5. </dependency>  

   下面配置系统日志,因为引入BoneCP而引入了slf4j,如果自动添加的版本过低,这里我们要重新设置slf4j的版本为1.6.4。那么我们添加logback来设置日志系统: 
Xml代码   收藏代码
  1. <dependency>  
  2.     <groupId>ch.qos.logback</groupId>  
  3.     <artifactId>logback-core</artifactId>  
  4.     <version>1.0.0</version>  
  5.     <type>jar</type>  
  6.     <scope>compile</scope>  
  7. </dependency>  
  8. <dependency>  
  9.     <groupId>ch.qos.logback</groupId>  
  10.     <artifactId>logback-classic</artifactId>  
  11.     <version>1.0.0</version>  
  12.     <type>jar</type>  
  13.     <scope>compile</scope>  
  14. </dependency>  

    下面配置logback.xml来配置日志具体项,logback.xml文件需要放置到类路径的根路径下: 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <configuration>  
  3.     <jmxConfigurator />  
  4.     <!--输出到控制台,方便调试,应用时切换到文件Log -->  
  5.     <appender name="ConsoleAppender" class="ch.qos.logback.core.ConsoleAppender">  
  6.         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">  
  7.             <pattern>%date %-5level [%logger{80}:%L] - %msg%n  
  8.             </pattern>  
  9.             <charset>UTF-8</charset>  
  10.         </encoder>  
  11.     </appender>  
  12.     <!-- 需要记录日志的包 -->  
  13.     <logger name="org.ourpioneer">  
  14.         <level value="debug" />  
  15.     </logger>  
  16.     <logger name="org.springframework">  
  17.         <level value="warn" />  
  18.     </logger>  
  19.     <root>  
  20.         <level value="warn" />  
  21.         <appender-ref ref="ConsoleAppender" />  
  22.     </root>  
  23. </configuration>  

    这里我们只创建了控制台的Appender,其中设置了日志的格式,编码和需要记录日志的包,并配置响应日志的级别,这都很好理解。下面是添加Spring和iBatis的类库: 
Xml代码   收藏代码
  1. <dependency>  
  2.     <groupId>org.apache.ibatis</groupId>  
  3.     <artifactId>ibatis-sqlmap</artifactId>  
  4.     <version>2.3.4.726</version>  
  5.     <scope>compile</scope>  
  6. </dependency>  

    Spring的类库添加core,beans,context,jdbc和orm模块即可,其它依赖则会自动添加过来,最终的类库如下图所示: 
 
    下面就是构建项目的目录结构: 
 
    我们采用分层开发的思想,DAO控制访问数据,Service调用DAO方法,同时在Service层做事务,因为我们不是Web项目,这里没有Web层的框架和Action。Bean包下的实体类Contact前面解释过了,common包下的BaseDAO提供操作iBatis的方法,ParameterMap是我们为iBatis提供参数的对象,dao包下就是DAO对象,service包下放置Service类,sqlMaps包下放置iBatis用到的SQL映射文件。App类是我们的测试类。类路径的根目录下的beans.xml是Spring的配置文件,logback.xml是日志配置文件,sqlMapConfig.xml是iBatis的总配置文件,首先来看sqlMapConfig.xml: 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>   
  2. <!DOCTYPE sqlMapConfig   
  3.     PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"   
  4.     "http://www.ibatis.com/dtd/sql-map-config-2.dtd">  
  5. <sqlMapConfig>  
  6.     <settings cacheModelsEnabled="true" enhancementEnabled="true"  
  7.         lazyLoadingEnabled="true" errorTracingEnabled="true" maxRequests="32"  
  8.         maxSessions="10" maxTransactions="5" />  
  9.         <sqlMap resource="org/ourpioneer/contact/sqlMaps/contact.xml" />  
  10. </sqlMapConfig>  

    其中就是对iBatis的一些设置,并包含sqlMap文件,很简单,这没有什么可多说的,logback文件前面给出了,下面是Spring的配置文件,首先配置数据源dataSource: 
Xml代码   收藏代码
  1. <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"  
  2.     destroy-method="close">  
  3.     <property name="driverClass" value="com.mysql.jdbc.Driver" />  
  4.     <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test" />  
  5.     <property name="username" value="root" />  
  6.     <property name="password" value="123" />  
  7.     <property name="maxConnectionsPerPartition" value="30" />  
  8.     <property name="minConnectionsPerPartition" value="10" />  
  9.     <property name="partitionCount" value="3" />  
  10.     <property name="acquireIncrement" value="5" />  
  11.     <property name="statementsCacheSize" value="100" />  
  12.     <property name="releaseHelperThreads" value="3" />  
  13. </bean>  

    关于BoneCP的介绍网上也有很多,这里不再详细解释各个配置项的含义了,配置好数据源,下面是SqlMapClient,使用Spring的bean工厂来创建,参数是iBatis的总配置文件和数据源,这里我们需要注入配置好的数据源dataSource: 
Xml代码   收藏代码
  1. <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
  2.     <property name="configLocation" value="classpath:sqlMapConfig.xml" />  
  3.     <property name="dataSource" ref="dataSource" />  
  4. </bean>  

    Spring在对iBatis的支持上提供了SqlMapClientTemplate,也就是操作SqlMapClient的模板,这个jdbcTemplate类似,其中的方法使用方式也是类似的,为我们操作iBatis提供了便捷的接口: 
Xml代码   收藏代码
  1. <bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">  
  2.         <constructor-arg>  
  3.             <ref bean="sqlMapClient" />  
  4.         </constructor-arg>  
  5.     </bean>  

    数据库操作的bean都配置好了,下面是事务模块的配置,我们抽象出Service层,也是为了方便事务操作,可能一组业务需要操作多个DAO,那么显然不能在DAO层做事务,而在业务层做事务是非常合适的,也符合逻辑,我们使用Spring提供的DataSourceTransactionManager来配置事务管理器: 
Xml代码   收藏代码
  1. <bean id="transactionManager"  
  2. class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  3.     <property name="dataSource">  
  4.         <ref bean="dataSource" />  
  5.     </property>  
  6. </bean>  

    下面是事务拦截的方法和AOP切入点: 
Xml代码   收藏代码
  1. <tx:advice id="txAdvice" transaction-manager="transactionManager">  
  2.     <tx:attributes>  
  3.         <tx:method name="get*" read-only="true" />  
  4.         <tx:method name="insert*" rollback-for="Exception" />  
  5.         <tx:method name="add*" rollback-for="Exception" />  
  6.         <tx:method name="addOrUpdate*" rollback-for="Exception" />  
  7.         <tx:method name="del*" rollback-for="Exception" />  
  8.         <tx:method name="update*" rollback-for="Exception" />  
  9.     </tx:attributes>  
  10. </tx:advice>  
  11. <aop:config proxy-target-class="true">  
  12.     <aop:pointcut id="serviceMethod"  
  13.         expression="execution(* org.ourpioneer.service.*Service.*(..))" />  
  14.     <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" />  
  15. </aop:config>  

这样,我们对org.ourpioneer.service.*Service中方法名以insert/add/del/update等开头的方法都做上事务了。因为我们使用Spring作为bean容器,那么将DAO和Service也纳入Spring 的管理之中: 
Xml代码   收藏代码
  1. <bean id="baseDAO" class="org.ourpioneer.contact.common.BaseDAO">  
  2.     <property name="sqlMapClientTemplate" ref="sqlMapClientTemplate" />  
  3. </bean>  
  4. <bean id="contactDAO" class="org.ourpioneer.contact.dao.impl.ContactDAOImpl"  
  5.     parent="baseDAO" />  

    这里我们将sqlMapClientTemplate配置到BaseDAO中,而ContactDAO继承BaseDAO即可,同时这里要注意这里我们使用了接口和实现相分离的做法,class中是实现类而不是接口,下面是Service: 
Xml代码   收藏代码
  1. <bean id="contactService" class="org.ourpioneer.contact.service.ContactService">  
  2.     <property name="contactDAO" ref="contactDAO" />  
  3. </bean>  

    配置文件都没有问题了,我们需要把这些涉及到的类都给写出来: 
Java代码   收藏代码
  1. package org.ourpioneer.contact.dao;  
  2. import java.util.Map;  
  3. import org.ourpioneer.contact.bean.Contact;  
  4. public interface ContactDAO {  
  5.     public Contact getContactById(Map<Object, Object> parameterMap);  
  6. }  

    DAO接口仅仅是方法的描述,而实现类中编写具体实现代码: 
Java代码   收藏代码
  1. package org.ourpioneer.contact.dao.impl;  
  2. import java.util.Map;  
  3. import org.ourpioneer.contact.bean.Contact;  
  4. import org.ourpioneer.contact.common.BaseDAO;  
  5. import org.ourpioneer.contact.dao.ContactDAO;  
  6. public class ContactDAOImpl extends BaseDAO implements ContactDAO {  
  7.     public Contact getContactById(Map<Object, Object> parameterMap) {  
  8.         return (Contact) getSqlMapClientTemplate().queryForObject("getContactById",  
  9.                 parameterMap);  
  10.     }  
  11. }  

    这里涉及到了BaseDAO,我们来看一下: 
Java代码   收藏代码
  1. package org.ourpioneer.contact.common;  
  2. import org.springframework.orm.ibatis.SqlMapClientTemplate;  
  3. public class BaseDAO {  
  4.     private SqlMapClientTemplate sqlMapClientTemplate;  
  5.     public SqlMapClientTemplate getSqlMapClientTemplate() {  
  6.         return sqlMapClientTemplate;  
  7.     }  
  8.     public void setSqlMapClientTemplate(  
  9.             SqlMapClientTemplate sqlMapClientTemplate) {  
  10.         this.sqlMapClientTemplate = sqlMapClientTemplate;  
  11.     }  
  12. }  

    调用DAO的Service代码如下: 
Java代码   收藏代码
  1. package org.ourpioneer.contact.service;  
  2. import java.util.Map;  
  3. import org.ourpioneer.contact.bean.Contact;  
  4. import org.ourpioneer.contact.common.ParameterMap;  
  5. import org.ourpioneer.contact.dao.ContactDAO;  
  6. public class ContactService {  
  7.     private ContactDAO contactDAO;  
  8.     public ContactDAO getContactDAO() {  
  9.         return contactDAO;  
  10.     }  
  11.     public void setContactDAO(ContactDAO contactDAO) {  
  12.         this.contactDAO = contactDAO;  
  13.     }  
  14.     public Contact getContactById(long id) {  
  15.         Map<Object, Object> parameterMap = new ParameterMap("ID", id);  
  16.         return getContactDAO().getContactById(parameterMap);  
  17.     }  
  18. }  

    从Spring的配置文件我们不难理解这些代码的真正含义,就不过多解释,这里用到了一个ParameterMap对象,我们来看一下它的定义: 
Java代码   收藏代码
  1. package org.ourpioneer.contact.common;  
  2. import java.util.HashMap;  
  3. public class ParameterMap extends HashMap<Object, Object> {  
  4.     private static final long serialVersionUID = 1L;  
  5.     public ParameterMap(Object... parameters) {  
  6.         for (int i = 0; i < parameters.length - 1; i += 2) {  
  7.             super.put(parameters[i], parameters[i + 1]);  
  8.         }  
  9.     }  
  10. }  

    非常的简单,这样我们在使用的时候就可以按照[名,值,名,值....]这样的格式来放置参数了。本例中涉及到了一个查询叫“getContactById”,它定义在sqlMaps下的contact.xml中,我们来看一下: 
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >  
  3. <sqlMap>  
  4.     <typeAlias alias="parameterMap" type="org.ourpioneer.contact.common.ParameterMap" />  
  5.     <typeAlias alias="contact" type="org.ourpioneer.contact.bean.Contact" />  
  6.     <select id="getContactById" parameterClass="parameterMap"  
  7.         resultClass="contact">  
  8.         select *  
  9.         from contact  
  10.         where ID=#ID:LONG#  
  11.     </select>  
  12. </sqlMap>  

    首先对ParameterMap和Contact进行别名,为了下面的方便调用,这里我们有一个查询,SQL语句很好理解,select元素的id属性就是它的标识符了,也是sqlMapClientTemplate的queryForObject方法第一个参数,parameterClass指定了参数类,我们使用的是自定义的ParameterMap,resultClass结果类型是我们的实体类对象,这样我们执行这个查询,iBatis会自动为我们封装成一个bean返回,易于调用。 
    为了测试,我们首先在数据表中插入一条记录: 
Sql代码   收藏代码
  1. INSERT INTO `contact` VALUES ('1', 'Sarin', 'male', '15940912345', 'Dalian');  

    下面来编写测试代码: 
Java代码   收藏代码
  1. package org.ourpioneer.contact;  
  2. import org.ourpioneer.contact.bean.Contact;  
  3. import org.ourpioneer.contact.service.ContactService;  
  4. import org.slf4j.Logger;  
  5. import org.slf4j.LoggerFactory;  
  6. import org.springframework.context.ApplicationContext;  
  7. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  8. public class App {  
  9.     private static final Logger logger = LoggerFactory.getLogger(App.class);  
  10.     public static void main(String[] args) {  
  11.         ApplicationContext context = new ClassPathXmlApplicationContext(  
  12.                 "beans.xml");  
  13.         ContactService contactService = (ContactService) context  
  14.                 .getBean("contactService");  
  15.         Contact contact = contactService.getContactById(1);  
  16.         logger.info("{}",contact);  
  17.     }  
  18. }  

   我们从Spring的ApplicationContext中获取到Service对象,然后调用getContactById方法获取结果,下面是运行的结果: 
 
   下一篇我们将深入介绍使用SqlMapClientTemplate来操作iBatis进行数据库访问。
11 
顶
1 
踩
分享到:   
参考知识库
Hbase知识库 4799  关注 | 63  收录
MongoDB知识库 4098  关注 | 271  收录
区块链知识库 2616  关注 | 90  收录
Objective-C知识库 3851  关注 | 1209  收录
评论
2 楼  宋建勇 2012-05-31  
 nice ,但要是能给出完整代码下载就好了
1 楼  makemyownlife 2012-01-02  
  不错 加油:——
深入理解iBatis与Spring框架整合 iBatis是一个流行的Java持久层框架,提供了对象关系映射(ORM)的功能,它通过SQL映射文件,将SQL语句与数据模型之间建立映射关系。iBatis消除了几乎所有的JDBC代码和手动设置参数以及获取结果集的工作。开发人员只需要关注SQL语句本身,可以将更多的时间专注于业务逻辑的实现。SQL Map允许开发者定义SQL语句,并通过映射文件将其与Java方法关联。这样做使得SQL语句的管理和维护更加集中和方便。SQL Map支持多种类型的SQL语句,主要包括以下几种:<select> 阅读详情

相关推荐

Spring框架与iBatis集成实践指南

在本章中,我们将对Spring框架进行一个全面的概述,并深入探讨其核心特性。Spring是一个开源的Java/Java EE全功能栈应用程序框架,它提供了一个全面的编程和配置模型,用于现代基于Java的企业应用—从最小的独立应用到最大的电子商务/企业级应用。iBatis作为Java开发中经典的持久层框架,它以强大的SQL映射功能和灵活的配置选项受到众多开发者的青睐。本章节将深入探讨iBatis框架的历史发展、核心组件和高级特性,并通过具体的配置和代码示例,帮助开发者更好地理解和掌握iBatis的使用。

weixin_35886636的博客 972

Spring集成Ibatis详细介绍

Spring集成Ibatis     对于spring集成ibatis,主要用到spring提供的一个重要的类 “org.springframework.orm.ibatis.SqlMapClientFactoryBean”。这个类是两者集成的接口。本来在ibatis中要配置的数据源,事物管理现在都交给spring来做就可以了。     以下是两者集成的图示: 具体结构图如下:

曹立禄的个人博客 1978

Spring高版本对ibatis的支持

最近想在最新的Spring5.0中集成ibatis(不是mybatis),发现已经不在支持SqlmapClientTemplate和SqlmapClientFactoryBean,于是搞了这个工具jar来进行支持如下配置 classpath:SqlMapConfig.xml

使用 Spring + iBATIS 框架详解

1: spring框架介绍   Spring框架是一个分层架构,由7个定义好的模块组成。Spring模块构建在核心容器上,核心容器定义了创建、配置和管理bean的方式。 每个模块的功能如下: 核心容器:核心容器提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现,BeanFactory使用控制反转(IoC)模式将应用程序的配置和依赖性规范与实际的应用代码分...

meazza10的专栏 815

DAC8568 Controller

DAC8568 ControllerDAC8568 简介串行接口三级目录 DAC8568 简介 PIN Description Name Description LDAC‾\overline{LDAC}LDAC load DACs SYNC‾\overline{SYNC}SYNC 低电平有效,电平触发控制, 该输入为输入数据的帧同步信号. 当SYNC为低,使能DAC内输入移位寄存器,并在随后的所有时钟沿采样数据。 在第32个时钟之后,DAC更新输出。 若不到32个时钟SYNC被置高(即

u010170039的博客 5130

小新学习K8s第一天之K8s基础概念

kubernetes是一个可移植,可扩展的开源平台,用于管理容器化工作负载和服务,有助于声明式配置和自动化。它拥有庞大且快速发展的生态系统。kubernetes服务,支持和工具随处可见。作用:用于自动部署,扩展和管理“容器化应用程序”的开源系统。可以理解成k8s是负责自动化运维管理多个容器化程序(比如docker)的集群,是一个生态及其丰富的容器编排框架工具。

pangdongqiqi的博客 1228

spring 数据库访问之ibatis(一)

本文转载:http://sarin.iteye.com/blog/1333238 为了丰富博客专栏【Spring数据库访问系列】的内容,完善Spring数据库访问的体系,现在我们介绍Spring对iBatis的支持。     相对于Hibernate等ORM框架的全自动SQL,那么iBatis则属于半自动化的ORM框架,我们需要编写SQL语句,由iBatis进行数据库访问,返回结果。而iB

xiezhenxiang的专栏 1106

MATLAB MinGW-w64 C/C++ 编译器 手动安装配置

根据Matlab版本与MinGW版本对应关系,手动安装、配置并测试MinGW

zjh2883的博客 7342

Spring对IBatis提供了完善的内建支持

 针对特定处理器进行优化教你如何优化你的多线程代码 community.youkuaiyun.com/E...想了解软件研发周期管理吗?怎么做ALM 如何做软件生命周期管理 sd.youkuaiyun.com在Eclipse中建Java API文档采用标准的 Javadoc 和 doclet 生成 Eclipse Javadoc API 文档 ibm.youkuaiyun.com Spring对IBatis提供了完善的内建支持。

y_mo的专栏 753

阿里巴巴达摩院人工智能训练师(高级)

阿里巴巴达摩院人工智能训练师(高级)

huang0612123的博客 1万+

基于CRU和WorldClim的高分辨率(1km)气候数据生成

基于CRU和WorldClim的高分辨率(1km)气候数据生成

lhq7842955的博客 1693

Ibatis学习三. Spring整合Ibatis

一.Spring整合iBatis原理 Apache iBatis是当前IT项目中使用很广泛的一个半自动ORM框架,区别于Hibernate之类的全自动框架,iBatis对数据库的操作拥有更加灵活的控制,对于那些经常需要调用本地数据库函数自定义SQL语句,或是喜欢自己优化SQL执行效率的开发者来说,iBatis是一个非常不错的选择。而得到广泛应用的开源企业架构SpringFramework,也很好...

zyjustin9的专栏 372

步进电机原理及梯形加速算法

步进电机重理解与梯形加速算法

weixin_39912966的博客 1324

spring拦截action

各位朋友,我用的是spring+ibatis+struts框架,现在要实现一个功能,进入系统后只要是.do访问路径,就得把路径给写到数据库中。而且要求写一段统一代码去实现,不要分别在每个action中去实现。此项目中所有action都继承了我们自己封装的一个BaseDispatchAction,此action之前做的统一工作就是记录日志啊什么的。现在我也想在这个action中完成这个工作,可麻烦来...

sunchenjava的专栏 207

SAP 接口测试操作-业务顾问

业务顾问测试接口操作

weixin_43657667的博客 5158

YOLOv8 骨骼结构识别详细说明

YOLOv8骨骼结构识别是一种基于深度学习技术的医学影像分析方法,主要用于X光、CT等影像中的骨骼定位与识别。该系统具有多骨骼同步识别能力,可应用于手部、脊柱、骨盆等不同部位,并能精确定位骨骼关键点。技术实现包括数据预处理、模型训练、推理检测、关键点分析和批量处理五个核心模块,支持骨折检测、骨龄评估等临床应用。该系统需注意医学合规性,要求高质量标注数据,并针对骨骼影像特点进行特征工程优化,同时考虑不同设备的部署需求。

u010117029的博客 331

数据库水平切分(拆库拆表)的实现原理解析(转)

第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当 高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式。水平切分数据库,可 以降低单台机器的负载,同时最大限度的降低了了宕机造成的损失。通过负载均衡策略,有效的降低了单台机器...

wentao365的专栏 354

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ibatis-Spring 整合

这两天一直在研究ibatis与spring的整合 一个小小的demo搞的我头晕目眩的,但程序一旦跑起来了,突然有一种豁然开朗,重见天日,感觉生活很美好的感觉!,也许,这就是那一行行的代码带给我们的不同享受吧。呵呵,废话就不多说了。 在此先引用几句别人的资料。。。 Spring通过DAO模式,提供了对iBATIS的良好支持。SqlMapClient对象是iBATIS中的主要对象,我们可以通过配置

itmyhome的专栏 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Spring与iBATIS的集成

iBATIS似乎已远离众说纷纭的OR框架之列,通常人们对非常流行的Hibernate情有独钟。但正如Spring: A Developers Notebook作者Bruce Tate 和Justin Gehtland所说的那样,与其他的OR框架相比,iBATIS独辟蹊径:“iBATIS不是试图从根本上掩盖SQL,实际上,它是在拥抱SQL。”但别犯愁:SQL本身具备了一些重要的功能,并且通过模板的

tanlier1的专栏 1350

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Spring整合Ibatis之SqlMapClientDaoSupport

前言 HibernateDaoSupport  SqlMapClientDaoSupport 。 其实就作用而言两者是一样的,都是为提供DAO支持,为访问数据库提供支持。    只不过HibernateDaoSupport是Spring对Hibernate的支持,而SqlMapClientDaoSupport是Spring对ibatis的支持。Hibernate是一个全自动化的ORM框架,而I

5810

ibatis与spring整合

这两天一直在研究ibatis与spring的整合 一个小小的demo搞的我头晕目眩的,但程序一旦跑起来了,突然有一种豁然开朗,重见天日,感觉生活很美好的感觉!,也许,这就是那一行行的代码带给我们的不同享受吧。呵呵,废话就不多说了。 在此先引用几句别人的资料。。。 Spring通过DAO模式,提供了对iBATIS的良好支持。SqlMapClient对象是iBATIS中的主要对象,我们可以通过配置

yangxiaojun9238的专栏 2万+

spring ibatis整合

Spring通过DAO模式,提供了对iBATIS的良好支持。SqlMapClient对象是iBATIS中的主要对象,我们可以通过配置让spring来管理SqlMapClient对象的创建。 与hibernate类似,Spring提供了SqlMapClientDaoSupport对象,我们的DAO可以继承这个类,通过它所提供的SqlMapClientTemplate对象来操纵数据库。看...

134

Spring自带的JPetStore分析(一)

Spring MVC + Spring + iBATIS 或Struts MVC + Spring +iBATIS使用的是Spring自带的例子,与iBATIS给出的例子还有有区别================安装:我使用的环境是Mysql,Tomcat4按照readme的说明编译好war文件后,根据两个文件创建数据库表和插入数据,配置jdbc,会发现WEB-INF下面没有东西,其实所有的ser

maxway的专栏 3846

《Spring 数据访问:高效整合数据库与 ORM》

《Spring 数据访问:高效整合数据库与 ORM》

1071
上一篇: ibatis如何支持clob 和blob
下一篇: spring中JDBC 声明式事务管理
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值