博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis.net - 4 ISqlMapper 传递参数
阅读量:7074 次
发布时间:2019-06-28

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

在使用 mybatis.net 的时候,必然会涉及到命令参数问题。

1. 没有参数的 SQL

最为简单的就是没有参数的命令了。比如下面查询所有的产品,没有使用任何参数。

那么,在代码中可以直接传递一个 null,表示没有参数。

public IList
GetProductList(){ IList
productList = Mapper.QueryForList
("GetAllProducts", null); return productList;}

2. 只有一个参数的 SQL

如果你的语句只有一个参数,例如,通过产品的 Id 查询特定的产品信息。这里使用的 SQL 语句定义如下。

此时,唯一的参数可以使用 #value# 表示,我们就不用挖空心思专门为它起一个名字了。

在代码中,直接传递对应的参数即可,这个唯一的参数就对应 SQL 中定义的 #value# 。

public EntityModel.Product GetProductById(int id){    EntityModel.Product product        = Mapper.QueryForObject
("GetProductById", id); return product;}

在上面的例子中,id 的值就传递给了 #value# 。

3. 多个参数问题

多个参数的话,就会涉及到区分参数的问题了。我们通常使用名值对来表示参数。

又有两种方式,一种使用对象的属性方式,一种使用字典方式。

先看我们熟悉的对象方式。可以定义一个表示参数的对象,对象的属性名称分别表示各个参数的名称,对象的值就表示参数的值。

namespace EntityModel{    public class Shipper    {        public int ShipperId { set; get; }        public string ComapanyName { set; get; }        public string Phone { set; get; }    }}

然后,需要在映射文件中定义需要使用的类型。

随后,用在 SQL 语句中。注意每个参数使用 #参数名# 进行表示,这里的名称来自类中定义的属性名称,因此,一定要注意字母的大小写问题。

insert 元素的 parameterClass 表示使用实体类来表示参数,这里的 Shipper 来自刚刚定义的类型别名。

${selectKey}

语句开始中的 selectKey 用来在执行插入语句之后,获取刚刚生成的标识值。这里使用到的 selectKey 定义在 SqlMap.config 的属性中。

好了,最后,我们可以在代码中使用实体来传递参数了。数据访问对象中的插入方法如下所示。

public int InsertShipper(EntityModel.Shipper model){    int result = (int) this.Mapper.Insert("insertShipperByModel", model);    return result;}

第二种方式,需要使用字典来完成。

我们将所有的参数都定义为字典中的键值对。这里使用了字典的接口 IDictionary,注意键使用 string 类型来表示参数的名称,而值使用了 object 类型。

public int InsertShipper(string companyName, string phone){    IDictionary
parameter = new Dictionary
(); parameter.Add("comapanyname", companyName); parameter.Add("phone", phone); int id = (int) this.Mapper.Insert("insertShipperByParameter", parameter); return id;}

在映射文件中,需要将 parameterClass 设置为字典接口  System.Collections.IDictionary。而 SQL 语句中则使用字典中的键值。还是要注意大小写问题。这里同样也是区分大小写的。

${selectKey}

4. 生成的标识列问题

在 mybatis.net 中使用 select @@IDENTITY as value 来获取刚刚生成的标识列,你可能更想使用 select scope_identity()  来获取。直接使用是不行的。

可以在映射文件中,将插入语句定义为一个普通的查询语句,如下所示:

这里还使用了 cast 将 scope_identity() 转化为整数,因为这个函数的类型实际上是 numbric ,并不是真正的整数类型。

在数据访问对象中,则使用普通的查询来调用这个 SQL 语句。

public int InsertShipper(string companyName, string phone){    IDictionary
parameter = new Dictionary
(); parameter.Add("comapanyname", companyName); parameter.Add("phone", phone); int id = this.Mapper.QueryForObject
("insertShipperByParameter", parameter); return id;}

这样,就可以直接获取生成的标识。

转载地址:http://hckml.baihongyu.com/

你可能感兴趣的文章
apache开源项目--ibatis
查看>>
一则简单演示样例看Oracle的“无私”健壮性
查看>>
忘记Mysql的root密码怎么办?
查看>>
ODBC CRecordSet访问
查看>>
Codeforces Gym 100015C City Driving 离线LCA
查看>>
JavaScript基础:数据类型的中的那些少见多怪
查看>>
C#入门经典Lambda
查看>>
佛山Uber优步司机奖励政策(1月25日~1月31日)
查看>>
随机IP代理
查看>>
怎么提高ArcGIS for Desktop10.x的性能
查看>>
python文件相关操作
查看>>
socket.io+angular.js+express.js做个聊天应用(四)
查看>>
Spoj 2713 Can you answer these queries IV 水线段树
查看>>
swap函數 进阶探讨与实现
查看>>
PLSQL Developer过期要注冊表
查看>>
JavaScript中call,apply,bind方法的总结。
查看>>
Ajax、Comet与Websocket
查看>>
Python输出中文乱码问题
查看>>
HDU 5655 CA Loves Stick 水题
查看>>
EventBus (四) Sticky事件
查看>>