`
zhangzuanqian
  • 浏览: 269144 次
  • 来自: ...
社区版块
存档分类
最新评论

ibtatis 传入,传出数据

阅读更多
iBatis2学习笔记:入参和返回值的问题
 
iBatis2的难点之一就是如何处理好入参parameterClass和返回值(resultClass或resultMap)的问题。
 
一、入参问题
插入语句入参:parameterClass="类别名"  来设定。

查询语句入参:可以设定类别名,也可以设定为map,也可以设定为iBatis支持的原生类型(比如string、int、long等),当只有一个原生类型入参时,则在SQL中用value关键字来引用。比如:
        <select id="getById"  parameterClass="long" resultMap="result_base">
        select * from customer where id = #value#
        </select>
        map是最强大的入参方式,任何入参方式都可以转换为这种入参方式,因为iBatis仅接受一个入参,当几个参数分布在不同对象中的时候,将这些对象的属性(或者对象本身put)到map中,然后一次传递给sql语句是非常有效。可以自己写一个将对象或者对象集合转换为map的工具(我已经实现一个了)。
        另外,map的中的元素(比如pobj)是个复杂对象,则还可以在SQL中以#pobj.protyename#的格式来引用其中内嵌的属性。当然不推荐这么干。
 
SQL中引用parameterClass的参数有三种方式:
        iBatis内置支持的类型,比如int、string,使用#value#来引用,这个value是关键字,不可变。
        map类型的参数,使用#keyName#来引用,keyName为键名。
        复杂对象的参数,使用#propertyName#来引用,propertyName类属性的名字。
        模糊查询中参数的引用:模糊查询是针对字符串而言的,如果遇到两个单引号要包含一个参数,则不能再用#来引用变量了,而应该改为$,比如:'%$varName$%',当然,也可以使用 '%' || #varname# || '%' 来绕过此问题。
   
二、返回值的问题
 
下面通过一个例子详细讲述,此例子以本人iBatis2学习笔记:基本原理和配置为基础讲述:
 
表和实体的代码
表:
create table ACCOUNT(
ACC_ID bigint not null AUTO_INCREMENT,
ACC_FIRST_NAME varchar(20) default NULL,
ACC_LAST_NAME varchar(30) default NULL,
ACC_EMAIL varchar(30) default NULL,
PRIMARY KEY(ACC_ID)
        ) ENGINE=MyISAM DEFAULT CHARSET=gbk COMMENT='IBATIS简单测试'
 
实体类:
public class Account {
    private int id;
    private String firstName;
    private String lastName;
    private String emailAddress;
 
可以看到表列字段名和实体属性名完全不对应!!
 
下面给出一个完全正确的合理的映射:
<?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="Account">
    <typeAlias alias="Account" type="com.lavasoft.ibatissut.simple.domain.entity.Account"/>
    <resultMap id="AccountResult" class="Account" >
        <result property="id" column="ACC_ID"/>
        <result property="firstName" column="ACC_FIRST_NAME"/>
        <result property="lastName" column="ACC_LAST_NAME"/>
        <result property="emailAddress" column="ACC_EMAIL"/>
    </resultMap>

    <select id="selectAllAccounts" resultMap="AccountResult">
        select * from ACCOUNT
    </select>

    <select id="selectAccountById" parameterClass="int" resultClass="Account">
        select
        ACC_ID as id,
        ACC_FIRST_NAME as firstName,
        ACC_LAST_NAME as lastName,
        ACC_EMAIL as emailAddress
        from ACCOUNT
        where ACC_ID = #id#
    </select>
</sqlMap>

当结果集列名和类属性名完全对应的时候,则应该使用resultClass来指定查询结果类型。当然有些列明不对应,可以在sql中使用as重命名达到一致的效果。
 
当查询结果列名和类属性名对应不上的时候,应该选择resultMap指定查询结果集类型。否则,则查询出来填充的对象属性为空(数字的为0,对象的为null)。
 
由于select *语句结果集列名与类属性名不对应,则需要使用显式resultMap="AccountResult"来指定映射关系。
 
而<select id="selectAccountById"查询则对没个字段做了重命名,与实体属性名保持一致,则结果集自动映射到类属性上。因此可以直接使用类做结果集返回类型,而不用再做额外的映射工作。
分享到:
评论

相关推荐

    fastreport web 动态传入数据

    【FastReport Web动态传入数据详解】 FastReport是一款强大的报表设计和打印工具,它支持多种平台,包括.NET Framework和.NET Core。在Web环境下,FastReport提供了动态传入数据的功能,使得用户可以在运行时根据...

    eclipse(传入数据库数据)

    eclipse(传入数据库数据)

    C#向数据库传入和传出图像

    本教程将详细讲解如何使用C#向数据库传入和传出图像,这对于创建支持图像上传和展示的Web应用、桌面应用或移动应用至关重要。 首先,我们要了解数据库中的图像存储方式。通常,有两种主要方法:二进制大型对象...

    ios-将传入的数据进行分类,排序,并添加索引.zip

    本示例的"ios-将传入的数据进行分类,排序,并添加索引.zip"着重关注如何有效地管理和展示数据。下面我们将深入探讨这个话题。 首先,让我们讨论数据分类。在iOS应用中,我们经常需要将数据按照特定的标准进行分组...

    MATLAB 中实时信号处理的实时数据采集:使用简单的 for 或 while 循环将信号传入和传出数据采集硬件-matlab开发

    此代码通过提供一个简单的接口来扩展数据采集工具箱,以在 for 或 while 循环内将信号传入和传出数据采集硬件,并在 MATLAB 中将信号处理算法应用于实时真实数据。 使用 dspdemo.DAQRecorder 获取实时数据,使用 ...

    关于HighCharts无法传入数据

    在使用HighCharts时,可能会遇到无法正确传入数据的问题,这通常与数据格式、JavaScript语法错误或者HighCharts配置有关。本篇文章将深入探讨这些问题及其解决方案。 首先,HighCharts的数据可以来源于多个来源,如...

    Php表单数据传入数据库与mysql数据库数据发送客户端技术.docx

    Php 表单技术数据传入与传出技术是指使用 Php 语言将客户端提交的数据传入数据库,并将数据库中的数据发送回客户端的技术。这种技术广泛应用于各种 Web 应用程序中,如用户注册、登录、数据提交等。 Php 表单技术...

    USB接口的数据监视软件

    USB接口是计算机与外部设备之间常见的一种连接方式,它提供了高速的数据传输能力,广泛应用于各种设备,如闪存驱动器、打印机、手机、相机等。USB监视软件是开发者和普通用户进行USB设备调试、故障排查的重要工具。...

    SAP 供应商主数据屏幕增强

    3. 实现 BADI:需要实现 BADI,例如 VENDOR_ADD_DATA 和 VENDOR_ADD_DATA_CS,以便激活后台定义的屏幕组和传入传出数据。 代码详解: 1. VENDOR_ADD_DATA:用于激活后台定义的屏幕组’ZZ’。代码如下:check i_...

    利用三轴传感器传入三轴数据,识别出抬手动作的方法

    通过li3dsh(其他三轴传感器)获取三轴数据,传入到u8 AccForLcdOnOff(s16 xvalue,s16 yvalue,s16 zvalue),会返回是否亮屏。

    Echart动态加载数据

    - **局部更新**:只需要更新图表的部分数据时,可以使用`setOption`只传入需要更新的数据部分,例如`series.data`,ECharts会自动识别并更新图表。 - **整体替换**:如果需要更新全部数据,可以再次调用`setOption...

    图像分类数据集:5种鲜花图像分类数据集(已做数据集划分)

    项目包含:5种鲜花图像分类数据集(已做数据集划分),数据保存按照文件夹保存,经测试,可...为了方便查看数据,提供了可视化py文件,随机传入一张图片即可展示,并且保存在当前目录。脚本无需更改,可以直接运行!

    本页包含特定于 FT600Q-B / FT601Q-B SuperSpeed USB3.0 系列的示例应用程序

    代码将演示打开和关闭设备句柄以及在 FT60X 的一个或多个通道上传入和传出数据的基本 D3XX 调用。 数据流器: 数据流示例应用程序是一个简单的 Windows 应用程序,它演示了 FT600/601 将数据从主机应用程序传输到 ...

    图书管理系统的登录及数据传入

    在这个系统中,"登录及数据传入"是一个核心功能,涉及到用户验证和数据交互。本项目使用了MyEclipse作为开发环境,以及MySQL作为数据库系统,实现了用户登录验证和数据在数据库中的存取。"form"标签在这里通常指的是...

    图片分类数据集:28种常见建筑风格分类图像数据集(已做数据集划分)

    项目包含:28种常见建筑风格分类图像数据集(已做数据集划分),数据保存按照文件夹保存,经...为了方便查看数据,提供了可视化py文件,随机传入一张图片即可展示,并且保存在当前目录。脚本无需更改,可以直接运行!

    图像分类数据集:森林中有害昆虫、害虫图像分类数据集(已做数据集划分)

    数据包含:森林中有害昆虫、害虫图像分类数据集(已做数据集划分),数据保存按照文件夹保存,...为了方便查看数据,提供了可视化py文件,随机传入4张图片即可展示,并且保存在当前目录。脚本无需更改,可以直接运行!

    抑郁症分析数据-数据集

    该数据集涉及抑郁症的分析。该数据是对农村地区居民生活条件的研究。由于在挑战中并未说明所有专栏,因此我们无法理解它们。我们继续删除或忽略它们。 数据介绍 你好 Frankcc在以下链接中发布了原始的数据集:Link ...

    xlxs文档的数据传入数据库

    在IT行业中,数据存储和管理是一...总的来说,通过Java和JDBC将Excel数据传入数据库是一个涉及文件读取、数据处理、数据库连接和SQL操作的综合过程。了解并熟练掌握这些技术,对于提升你在数据处理领域的技能至关重要。

    Kettle循环遍历结果集作为参数传入转换

    在这个场景下,我们讨论的是如何在Kettle8.2中实现一个特定的操作,即“Kettle循环遍历结果集作为参数传入转换”。 首先,我们需要理解Kettle中的“结果集”这一概念。在数据库查询中,结果集是执行SQL语句后返回的...

Global site tag (gtag.js) - Google Analytics