SqlMapClient对象

这个对象是iBatis操作数据库的接口(执行CRUD等操作),它也可以执行事务管理等操作。这个类是我们使用iBATIS的最主要的类。它是线程安全的。通常,将它定义为单例。(与hibernate中sessionFactory的定义类似)。如:

import java.io.Reader;

import com.ibatis.common.resources.Resources;

import com.ibatis.sqlmap.client.SqlMapClient;

import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class IbatisSQLMapConfig {

private static final SqlMapClient sqlMap;

//在静态区块中初试化返回

static {

try {

//声明配置文件的名称(映射文件被定义在其中)

String resource = "sql_map_config.xml";

//利用工具类Resources来读取到配置文件

Reader reader = Resources.getResourceAsReader(resource);

//创建SqlMapClient接口的变量实例

sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException(

"Error initializing MyAppSqlConfig class. Cause: " + e);

}

}

public static SqlMapClient getSqlMapInstance() {

//提供静态方法返回静态区块中得到的SqlMapClient

return sqlMap;

}

}

主要用法:

如何获得刚插入记录的自增长ID值?

以下所有虚线上面代表User.xml中的内容,虚线下方是测试类中的内容:User类沿用上一篇中的User类

<insert id="insertUser" parameterClass="User">

insert into t_user values (

null,#username#,#password#

)

<selectKey resultClass="int" keyProperty="id">

SELECT @@IDENTITY AS ID

</selectKey>

</insert>

User user = new User();

user.setUsername("张三");

user.setPassword("张三密码");

//如果主键是自动生成的,则其返回值可以通过<selectKey>标签来设置

//如果不通过<selectKey>标签来设置,则返回值为空!

//<selectKey >中的keyProperty,是指定User中的id属性,当调用结束之后,

//user对象的id值和insert方法的返回值都是这条记录的ID值!

Object obj = sqlMapper.insert("insertUser", user);

parameterClass的使用

<insert id="insertUser" parameterClass="User">

insert into t_user values (

null,#username#,#password#

)

<selectKey resultClass="int" keyProperty="id">

SELECT @@IDENTITY AS ID

</selectKey>

</insert>

<insert id="insertUser2">

insert into t_user values (

null,#username#,#password#

)

<selectKey resultClass="int" keyProperty="id">

SELECT @@IDENTITY AS ID

</selectKey>

</insert>

insertUser使用了parameterClass,所以必需传入User类型的对象

User user = new User();

user.setUsername("张三");

user.setPassword("张三密码");

//传递进去的对象,必须是User类型

Object obj = sqlMapper.insert("insertUser", user);

insertUser2没有使用parameterClass,所以可以传入任意具有相应属性值的对象

JustAnObject anobj = new JustAnObject();

anobj.setUsername("用户名");

anobj.setPassword("用户密码");

//如果没有指定parameterClass属性,则任何一个具有相应属性值

//的对象都可以被传递进去

Object obj = sqlMapper.insert("insertUser2", anobj);

parameterMap的使用

<parameterMap class="User" id="insertUser-param">

<parameter property="username"/>

<parameter property="password"/>

</parameterMap>

<insert id="insertUser" parameterMap="insertUser-param">

insert into t_user values (

null,?,?

)

<selectKey resultClass="int" keyProperty="id">

SELECT @@IDENTITY AS ID

</selectKey>

</insert>

parameterMap用于传入参数,以便匹配SQL语句中的?号

User user = new User();

user.setUsername("张三dd");

user.setPassword("张三密码dd");

Object obj = sqlMapper.insert("insertUser", user);

利用parameterMap,可以定义参数对象的属性如何映射到SQL查询语句的动态参数上,注意parameterMap中<parameter/>标签的先后顺序不能颠倒!

如何将查询结果映射到不同的对象?(resultClass的使用)

package com.ibatis.model;

publicclassOtherObject {

privateintid;

private String prop1;

private String prop2;

publicint getId() {

returnid;

}

publicvoid setId(int id) {

this.id = id;

}

public String getProp1() {

return Prop1;

}

publicvoid set Prop1 (String Prop1) {

this. Prop1 = Prop1;

}

public String getProp2() {

returnusername;

}

publicvoid setProp2 (String Prop2) {

this.Prop2 = Prop2;

}

}

<select id="selectUserForOtherObject" resultClass="com. ibatis.OtherObject" parameterClass="int">

select

username as prop1,

password as prop2

from t_user where id=#value#

</select>

//查找t_user表,将其结果映射到一个属性名不同的对象中!

OtherObject obj = (OtherObject)sqlMapper.queryForObject("selectUserForOtherObject", 1);

System.out.println(obj.getProp1()+","+obj.getProp2());

如何将查询结果集映射到不同的对象?(resultMap的基本使用)

<resultMap class="com.ibatis.model.OtherObject" id="ooResult">

<result property="prop1" column="username"/>

<result property="prop2" column="password"/>

</resultMap>

<!--

如果使用resultMap来定义如何映射,则如下语句不可写成:

select username as prop1,password as prop2 ....

-->

<select id="selectUserForOtherObject2" parameterClass="int"resultMap="ooResult">

select

username,

password

from t_user where id=#value#

</select>

//查找t_user表,将其结果映射到一个属性名不同的对象中!

OtherObject obj = (OtherObject)sqlMapper.queryForObject("selectUserForOtherObject2", 17);

System.out.println(obj.getProp1()+","+obj.getProp2());

如何将查询结果集映射为xml格式的数据?

<select id="selectXmlData" resultClass="xml" xmlResultName="User"parameterClass="int">

select * from t_user where id=#value#

</select>

<select id="selectXmlDatas" resultClass="xml" xmlResultName="User">

select * from t_user

</select>

//查找t_user表,将其结果映射到xml!

//返回值是xml形式的字符串

Object obj = (Object)sqlMapper.queryForObject("selectXmlData", 1);

System.out.println(obj);

//查找t_user表,将其结果映射到xml!

List list  = (List)sqlMapper.queryForList("selectXmlDatas");

System.out.println(list);

如何用Map类型的对象作为传入参数?

<!--

这里,可以使用全路径类名,如:

java.util.Map

java.util.HashMap

java.util.TreeMap

map

-->

<insert id="insertUser" parameterClass="map">

insert into t_user values (

null,#username#,#password#

)

</insert>

Map user = new TreeMap();

user.put("username", "Map用户");

user.put("password", "Map用户密码");

sqlMapper.insert("insertUser",user);

如何将查询结果集的元素转换为Map类型的对象?

<!--

resultClass可以定义为java.util.HashMap类型,

将能自动转换

-->

<select id="selectMapUsers" resultClass="java.util.HashMap">

select * from t_user

</select>

List list = (List)sqlMapper.queryForList("selectMapUsers");

System.out.println(list);

for (Iterator iter = list.iterator(); iter.hasNext();) {

Map map = (Map) iter.next();

//可在此输出map的数据

}

事务处理

可以使用sqlMapClient的startTransaction/commitTransaction/endTransaction等方法来控制事务的边界。

如果与spring整合(这是iBatis推荐的方式),则我们需要在spring配置文件中指定其事务特性。

ibatis使用--SqlMapClient对象的更多相关文章

  1. 【死磕ibatis】SqlMapClient 基本操作示例

    前言:想要学习ibatis,我这里写了一些关于SqlMapClient 的具体例子,希望对你有帮助.话不多说,直接看例子. 例 1: 数据写入操作(insert, update, delete): s ...

  2. ibatis传入list对象

    在使用ibatis的时候经常需要传入list对象,sql语句如下. <select id="GET-PERSONS" parameterClass="java.ut ...

  3. iBatis框架batch处理优化 (转)

    为什么要做batch处理        这个问题我就不解释了,因为我想你们肯定能比我解释的更好!如果你真的不知道,那就到Google上去搜索一下吧☻Oracle回滚段    这个问题偶也不很明白,只是 ...

  4. iBatis简单介绍

    1.       Ibatis是开源软件组织Apache推出的一种轻量级的对象关系映射(ORM)框架,和Hibernate.Toplink等在java编程的对象持久化方面深受开发人员欢迎. 对象关系映 ...

  5. Ibatis学习总结6--使用 SQL Map API 编程

    SQL Map API 力求简洁.它为程序员提供 4 种功能:配置一个 SQL Map,执行 SQL update操作,执行查询语句以取得一个对象,以及执行查询语句以取得一个对象的 List. 配置  ...

  6. Ibatis学习总结2--SQL Map XML 配置文件

    SQL Map 使用 XML 配置文件统一配置不同的属性,包括 DataSource 的详细配置信息, SQL Map 和其他可选属性,如线程管理等.以下是 SQL Map 配置文件的一个例子: Sq ...

  7. iBATIS sqlMapConfig配置详解

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC & ...

  8. iBatis入手案例

    第一部分,iBatis组织架构分析 1.1 组织架构图 1.2 架构分析 DAO层上面,DAO类通过SqlMapConfig文件,来构建iBatis提供的SqlMapClient,SqlMapConf ...

  9. IBatis——(一)

    IBatis是持久层的框架,也就是我们说的Dao层框架,关注数据库操作以及和Java对象之间的关联,我们将这样的框架也称之为ORM(Object/Relaction Mapping)框架.而这里映射的 ...

随机推荐

  1. iOS 蓝牙4.0开发

    背景: 1.iOS的蓝牙不能用来传输文件.2.iOS与iOS设备之间进行数据通信,使用gameKit.framework3.iOS与其他非iOS设备进行数据通信,使用coreBluetooth.fra ...

  2. .NET基础拾遗(7)多线程开发基础4

    一.多线程编程中的线程同步 1.C#中的lock关键字 lock关键字可能是我们在遇到线程同步的需求时最常用的方式,但lock只是一个语法糖,为什么这么说呢,下面慢慢道来. (1)lock的等效代码其 ...

  3. OD: Exploit Me - Overwrite Nearby Varible

    实验代码: #include<stdio.h> #include<string.h> #define PASSWORD "1234567" int veri ...

  4. Java 图片设置圆角(设置边框,旁白)

    /** * 图片设置圆角 * @param srcImage * @param radius * @param border * @param padding * @return * @throws ...

  5. 带搜索功能,支持绑定对象到节点的TreeView辅助类

    特点: 1.支持数叶子节点与对象绑定 2.支持xml导入,且数据类相关的xml可自定义,只和泛型的实现有关 3.支持节点搜索功能,可在树结构上要求只显示部分节点 4.用C#编写,但与平台关联性低,可移 ...

  6. RAC RMAN备份

    这篇主要介绍的是RAC 环境下的RMAN 备份. 关于Oracle 备份与恢复的一些理论知识参考我的Blog:       Oracle 备份 与 恢复 概述 http://blog.csdn.net ...

  7. C#进程与线程

    public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { / ...

  8. Android 虚拟机快捷键

    何须这样麻烦,直接用快捷键就行了,你用鼠标点来点去怎么还不如用快捷键来得快:一下是快捷键: Home键(小房子键) 在键盘上映射的就是home键,这倒是很好记. Menu键 用于打开菜单的按键,在键盘 ...

  9. flask开发restful api系列(2)

    继续上一章所讲,上一章我们最后面说道,虽然这个是很小的程序,但还有好几个要优化的地方.先复制一下老的view.py代码. # coding:utf-8 from flask import Flask, ...

  10. JNI错误记录--JNI程序调用本地库时JVM崩溃

    什么是JNI内存泄露,基本的避免方法 : http://www.ibm.com/developerworks/cn/java/j-lo-jnileak/ 最近的课题中需要用到Spark,同组同学负责的 ...