IBatisNet的相关使用方法 - 入门
来源:互联网 发布:数据预测模型算法 编辑:程序博客网 时间:2024/05/16 06:51
IBatisNet的相关使用方法
1. IBatisNet简介
IBatisNet是一个ORM(Object Relational Mapping,对象关系映射)框架,着重于ORM中的M(Mapping),通过使用XML文档在sql语句和实体对象之间建立映射。
常用的图解:
2. IBatisNet配置文件详解
SqlMap.configMap配置文件
<?xml version="1.0" encoding="utf-8"?>
<sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<settings>
<setting useStatementNamespaces="false"/>是否使用sqlMap节点中的namespace
<setting cacheModelsEnabled="true"/> 是否启用缓存机制
<setting validateSqlMap="false"/> 是否需要使用SqlMapConfig.xsd schema验证隐射
</settings>
<database>
<provider name="sqlServer1.1"/> provider获取providers.config中对应的属性
<dataSource name="ConnectString" connectionString="server=.;database=Test;user id=sa;password=sa;ConnectionReset=FALSE;Min Pool Size=1;Max Pool Size=100"/>
数据库链接
</database>
<sqlMaps>
<sqlMap resource="maps/Member.xml"/> Map文件加载的路径,如果要加载多个,按此格式写下去
</sqlMaps>
</sqlMapConfig>
providers.config数据库链接配置文件
<?xml version="1.0" encoding="utf-8"?>
<providers xmlns="http://ibatis.apache.org/providers" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<clear/>
<provider
name="sqlServer1.0"
enabled="false"
assemblyName="System.Data,Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
connectionClass="System.Data.SqlClient.SqlConnection"
commandClass="System.Data.SqlClient.SqlCommand"
parameterClass="System.Data.SqlClient.SqlParameter"
parameterDbTypeClass="System.Data.SqlDbType"
parameterDbTypeProperty="SqlDbType"
dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"
commandBuilderClass="System.Data.SqlClient.SqlCommandBuilder"
usePositionalParameters = "false"
useParameterPrefixInSql = "true"
useParameterPrefixInParameter = "true"
parameterPrefix="@"
/>
<provider
name="sqlServer1.1"
enabled="true"
assemblyName="System.Data,Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
connectionClass="System.Data.SqlClient.SqlConnection"
commandClass="System.Data.SqlClient.SqlCommand"
parameterClass="System.Data.SqlClient.SqlParameter"
parameterDbTypeClass="System.Data.SqlDbType"
parameterDbTypeProperty="SqlDbType"
dataAdapterClass="System.Data.SqlClient.SqlDataAdapter"
commandBuilderClass="System.Data.SqlClient.SqlCommandBuilder"
usePositionalParameters = "false"
useParameterPrefixInSql = "true"
useParameterPrefixInParameter = "true"
parameterPrefix="@"
/>
<providers>
可以获取官方文件,获得相应数据库的provider
3. 相关Map文件配置
Member.xml
<?xml version="1.0" encoding="utf-8" ?>
<sqlMap namespace="MemberInfo" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
namespace就是useStatementNamespaces对应的namespace
<alias>
<typeAlias alias="Member" 此map映射的类名
assembly="ETest.dll" 引用的程序集
type="ETest.test.Member" 对应项目中的累
/>
</alias>
<resultMaps> 返回的所有结果类
<resultMap 返回的一个结果类
id="MemberMap" id,对应下面select等语句返回的map
class="Member"> 对应alias中映射的类名
<result property="Name" 对应alias中映射的类的属性
column="Name" /> 对应返回结果中的列表对应到类的属性
<result property="CardNO"
column="CardNO" /> 为了解释采用这种格式,见谅
</resultMap>
</resultMaps>
<statements>
<select id="SelectMember" 方法id,在程序中被调用
resultMap="MemberMap" 对应resultMap中相应的id
parameterClass="int"> 参数集合,如为int,string等单值,则语句中
参数位置使用#value#
SELECT CardNo,Name FROM Member WhereUserID = #value#
</select>
<update id="SaveMember"
parameterClass="Member" 参数集合Member,对应相应操作的类
resultClass="int">
UPDATE Memberset
CardNo = #CardNo#, Member的属性CardNo
Name =#Name# Member的属性Name
where UserID=#UserID# Member的属性UserID
</update>
<delete id="DeleteMember" parameterClass="int">
delete
from Member
where UserID = #value#
</delete>
</statements>
</sqlMap>
<insert>、<delete>、<update>、<select>四个节点分别代表对数据库进行的4个操作
4. 相关类以及Member表
Create table Member
( User_ID int identity(1,1), --自增
CardNo nvarchar(50) not null,
[Name] nvarchar(50) not null)
namespace ETest.test {
[Serializable]
publicclass Member{ Member类。包括属性存取
private int_user_ID;
private string_name;
private string_cardNO;
public stringCardNO
{
get { return_cardNO; }
set { _cardNO = value; }
}
public stringName
{
get { return_name; }
set { _UserName = value; }
public intUser_ID
{
get { return_user_ID; }
set { _user_ID = value; }
}
}
public class MemberLogic 相关逻辑类,包含所有逻辑
{
privateSqlMapper mapper = null;
publicMemberLogic () { 构造函数
DomSqlMapBuilderbuilder = new DomSqlMapBuilder();
mapper =builder.Configure(); mapping
}
public MemberSelect(int User_ID)
{
return(Member)mapper.QueryForObject("SelectMember", User_ID);
map的自有方法,返还Member.xml中id为“SelectMember”的执行结果,返还结果为对象
}
publicvoid Update(Membermember)
{
mapper.Update("SaveMember", member);
map的自有方法,直接对应Member.xml中id为“SaveMember”的执行.
}
public void Delete(int User_ID)
{
mapper.Update("DeleteMember ", member);
map的自有方法,直接对应Member.xml中id为“DeleteMember”的执行.
}
}
下面简单说一下mapper的几个常用方法:
QueryForObject用于返回单个实体类,
QueryForList返回实现IList接口的ArrayList,
QueryForDictionary用于返回实现IDictionary的Hashtable,
5. 存储过程的使用
先写个简单的存储过程
create proc InsertMember
(
@UserID int,
@Cardno nvarchar(50),
@Name nvarchar(10)
)
as
begin
insert memeber select @Cardno,@Name
select @UserID=@@identity
end
以下文件配置在Member.xml中进行操作存储过程
<procedure id="InsertMember" 存储过程名称
parameterMap="Member_Par" 对应的parameterMap,接来下马上登场
resultClass="int"> 返回值,同正常返回值
InsertMember
</procedure>
在procedure 中必须设置parameterMap属性,即使存储不带任何参数也需要设置一下。
对应的parameterMap:
<parameterMaps>
<parameterMap id=" Member_Par" 对应 procedure中的parameterMap
class="Member"> 对应的类Member
<parameter property="CardNo" 对应类中属性
column="CardNo" 对应参数的属性
dbType="NVARCHAR" 数据库字段类型
type="string" 自动类型
direction="INPUT" /> 参数类型
<parameter property="Name" 对应类中属性
column="Name" 对应参数的属性
dbType="NVARCHAR" 数据库字段类型
type="string" 自动类型
direction="INPUT" /> 参数类型
<parameter property="User_ID" 对应类中属性
column="User_ID" 对应参数的属性
dbType="INT" 数据库字段类型
type="int" 自动类型
direction="INPUTOUTPUT" /> 返回值参数
</parameterMap>
</parameterMaps>
6. 动态SQL
动态sql就可以解决相关的多表链接查询以及模糊查询的问题
<select id="SelectEemployee" parameterClass="string" resultMap = "MemberMap">
select CardNo,Name from Member
<dynamic prepend="WHERE">
<isParameterPresent>
User_ID = #value#
</isParameterPresent>
</dynamic>
</select>
动态sql写法
<dynamic prepend ="WHERE"> 表示动态sql开始,如果关联表 prepend ="AND",可以为””
<关键字
<!—关键字可以为以下 相关含义
<isEqual> 参数等于值
<isNotEqual> 参数不等于值
<isGreaterThan> 参数大于值
<isGreaterEqual> 参数大于等于值
<isLessEqual> 参数小于等于值
<isPropertyAvailable> 参数被使用
<isNotPropertyAvailable> 参数没有使用
<isNull> 参数is null
<isNotNull> 参数is not null
<isEmpty> 参数为空
<isNotEmpty> 参数不为空
<isParameterPresent> 参数类不为NULL
<isNotParameterPresent> 参数类为NULL
-- >
prepend="AND" 连接关键字
property="UserID" 参数
compareValue="20"> 值,也可以为属性名来比较
相关sql ,就是动态sql要添加的条件,比如:
Name =#value#
</关键字>
</dynamic>
- IBatisNet的相关使用方法 - 入门
- IBatisnet、Castle开发的相关文章
- Ibatisnet的数据库事务相关与总揽
- iBatisNet 入门篇(DataMapper)
- IBatisNet + Castle 开发相关文章
- iBatisNet入门示例源码详解
- iBatisNet入门示例源码详解
- 我的IBatisNet实践
- [学习]IBatisNet的Demo
- IbatisNet的实战应用
- iBatisNet的配置
- IBatisNet的问题总结
- 简单的iBatisNet示例
- IbatisNet内容的学习
- iBATISnet的配置
- iBatisNet出现的问题
- AJAX的相关使用方法
- CMake的使用方法入门
- Exception in thread "main" java.lang.NoClassDefFoundError:错误 如何解决?
- Oracle和DB2的相关转换
- 解决risefile控件经常出现《保存文件失败could not execute query》的问题
- 俺是新来的
- singleton的优缺点
- IBatisNet的相关使用方法 - 入门
- tuxedo学习(1)
- 协调是工作流出现的因素之一
- CR与CX结合所做的报表
- RDS-TMC(Traffic Message Channel)蕴藏的商机不可小视
- Delphi图像处理 -- 平面几何变换(上)
- java时间的处理
- 利用JS获取传过来的参数
- 链表