问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ibatis框架调用sqlmap,执行多条sql

发布网友 发布时间:2022-04-27 12:34

我来回答

2个回答

懂视网 时间:2022-04-07 23:13

前面几节中,我们在Student.xml文件中配置了2条简单的sql语句,那么在程序中怎么使用呢?IBatis给我们封装了Mapper类,这个类的一个静态方法Instance()返回了一个ISqlMapper接口,这个接口将会是我们后期调用sql语句的入口
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public string Sex { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
public DateTime LoginDate { get; set; }
public int ClassId { get; set; }
internal ISqlMapper mapper; //操作sql语句的入口
public Student()
{
mapper = Mapper.Instance(); //返回ISqlMapper
}
public IList<Student> SelectAll() //查询方法
{
return mapper.QueryForList<Student>("Select",null);
}
}
在Student类中,我们在构造函数中实例化一个mapper实例,mapper下有很多方法,用来操作xml中的sql语句并执行.
1 添加一条记录,并返回主键id
在xml文件中这样配置
<insert id="InsertStu" parameterClass="Student" resultClass="int">
insert into Student(Name,Sex,Address,Phone,LoginDate,ClassId)
values(#Name#,#Sex#,#Address#,#Phone#,#LoginDate#,#ClassId#)
<selectKey resultClass="int" type="post" property="Id">select @@IDENTITY as value</selectKey>
</insert>
其中#Name#引用的是Student对象的Name属性
既然是插入数据,那么参数类型parameterClass="Student",返回主键则resultClass="int",注意selectKey节点,sqlserver的主键字段是后生成的,所以该节点要放在sql语句的后面并且type="post",select @@IDENTITY as value是sqlserver的固定语法.
在Student类中添加一个方法
public int Insert()
{
return (int)mapper.Insert("InsertStu", this); //InsertStu就是xml文档中select节点的id
}
插入数据只需要实例化一个Student对象并且调用Insert方法即可,比如new Student(){...}.Insert();
2 删除一条记录,并返回受影响的行数
xml配置:
<delete id="DeleteStu" parameterClass="Student">
delete from Student where id=#Id#
</delete>
当xml中只需要一个参数时,#id#中的id可以是任意值(#aaa#,#bbb#),由IBatis自动判断
在Student类中添加一个方法
public int Delete()
{
return mapper.Delete("DeleteStu", this); //this代表当前调用对象(Student)
}
然后就可以这样删除了:
int id = new Student() { Id = 11 }.Delete();
其中id为受影响的行数
3 修改一条记录,并返回受影响的行数
xml配置
<update id="UpdateStu" parameterClass="Student">
update Student set name=#Name#,Sex=#Sex# where id=#Id#
</update>
程序中方法:
public int Update()
{
return mapper.Update("UpdateStu", this); //this代表当前调用对象(Student)
}
然后修改就可以这样进行
int id = new Student() { Id = 13, Name = "李四", Sex = "f" }.Update();
其中id为受影响的行数
4 查询记录
xml配置
<select id="SelectStu" parameterClass="int" resultClass="Student">
select * from student where name= #dd#
</select>
方法
public IList<Student> Select(string str)
{
return mapper.QueryForList<Student>("SelectStu", str);
}
查询方法:
IList<Student> list = new Student().Select("李四");
5 可能有的同学看到这样的语句 delete from Student where id=$id$,
为了理解#和$的区别来看一个例子
<select id="Select" parameterClass="string" resultClass="Student">
select * from student where name= $name$
</select>
如果用户这样输入new Student().Select("‘‘ or name is not null"),因为数据库中并没有name值为‘‘ or name is not null的人,正常的查询结果是空,可是你要使用name= $name$的话会吧数据库记录全部查询出来,发生了sql注入.而使用name=#name#却没有问题.
说明$$只是简单的拼接sql语句,而#name#发生了编译,所以要尽量使用##来预防sql注入
最后要注意##中的参数是要区分大小写的,这样写#name#是因为只有一个传入参数,##中的参数和实体对象中属性的命名一致是好的做法,如果不一样的话要做参数映射parameterMap或resultMap

iBatis.Net系列(七)-执行sql语句

标签:

热心网友 时间:2022-04-07 20:21

没有的吧,我记得mybatis中是可以执行2条sql的,应该ibatis也可以才是。第一条sql中的返回值是可以作为第二条sql的条件执行的。
<updateid="insertProct-ORACLE" parameterClass="com.domain.Proct">
<selectKey resultClass="int" keyProperty="seqno" >
select seqno from table where .. for update
</selectKey>
update table set seqno = seqno+1

</update>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
篮球里假摔算不算犯规 月球和地球上的时间一样吗 网线插入路由器亮绿灯,马上又亮红灯 为什么华为路由器有时绿灯一直闪? 急求助 孩子在读高二 每晚失眠 有什么好办法快解决吗 急急急!!!_百度... 从高二开始失眠,已经9年了。那一晚没睡着,以后一直是浅度睡眠,白天精神... 睡眠太浅要怎么办啊? 我高二,每天睡眠时间很少,上课老想睡觉,如果上课中想睡觉可以吃点什么不... 儿子高三了晚上睡眠不深 怎么办啊 很担心因为睡眠不好影响学习_百度知 ... 房产纠纷确权借名买房 ss和ibatis框架,连接oracle的配置文件该怎么配 怎么判断网站数据库是不是MySQL? 用sqlmap怎么爆后台帐户名和密码 怎么... sqlmap遇到台站oracle数据库,太大要怎么dump sqlmap可以从第一万条开始脱裤吗 sqlmap中非dba权限怎样上传shell? 有些sqlmap的问题想请教下,比如为什么我的sqlmap连接失败? sqlmap怎么批量进行sql注入 sqlmap中交互式写入shell的原理和对应操作 以及 语句 如何通过sqlmap找到注入点 后台使用ibatis,数据库使用的是sql server,但客户现在要求使用oracle数据库 sqlmap注入之后可以做什么 如何使用sqlmap进行sql报错注入 ...的一列作为显示值一列作为value,数据库是oracle sqlmap怎么指定oracle数据库 sqlmap能注入oracle数据库吗 椰子肉应该怎么吃? 椰子肉有什么好与不好之处吗? 怎么样吃椰子肉 椰子肉 是什么样的 燕麦和大麦的区别 燕麦这样吃营养更高味更佳 C#的mybatis的批量导入到oracle数据库怎么做? oracle的批量插入和mysql的批量插入不一致,mybatis要怎么做兼容_百度知 ... 一体机电池恢复方法是什么? 没有学位证,是否能查到自己的学位证号码 一体机手机电池不耐用了该怎么办修复 一个提手旁加此念什么? 提手旁加个发是什么字 提手旁加一个可怎么念 提手旁加个宇宙的宇念啥? 提手旁加个及字念什么?急求 提手旁加拿字怎么读啊 小米一体机电池休眠了怎么激活? 利尔化学股份有限公司电话是多少? 美国利尔公司的公司简介 利尔化学股份有限公司的公司文化 河北利尔建筑工程有限公司怎么样? 山东利尔新材股份有限公司怎么样? 杭州利尔消防器材有限公司怎么样? 深圳利尔实业有限公司怎么样? 洛阳利尔耐火材料有限公司怎么样?