简单的iBatisNet示例。自己写的一个示例,也是自己刚刚接触ibatis的第一个示例
自己在刚刚接触时,也费了好多劲才弄明白,希望初学者可以少走点弯路,身边没有高手是件很痛苦的事情
顺便说下,网上好多的示例都很老了,我刚接触时有好多地方的方法都已经过期了,需要做下修改。我用的NET2005
以下是源码
using IBatisNet.Common.Utilities;
using IBatisNet.DataMapper;
using IBatisNet.DataMapper.Configuration;
namespace OneTest
{
/********************************
* 作者:jackfor001
* 时间:2006-7-1
* 功能描述:
* Mapper类
*********************************
*/
public class Mapper
{
private static volatile ISqlMapper _mapper = null;
protected static void Configure (object obj)
{
_mapper = null;
}
protected static void InitMapper()
{
ConfigureHandler handler = new ConfigureHandler (Configure);
DomSqlMapBuilder builder = new DomSqlMapBuilder();
_mapper = builder.ConfigureAndWatch(handler);
}
public static ISqlMapper Instance()
{
if (_mapper == null)
{
lock (typeof (SqlMapper))
{
if (_mapper == null) // double-check
InitMapper();
}
}
return _mapper;
}
public static ISqlMapper Get()
{
return Instance();
}
}
}
//以下是app.config(如果是web程序需要写在web.config里面)
<?xml version="1.0" encoding="gb2312" ?>
<configuration>
<!--拷贝以下代码-->
<configSections>
<sectionGroup name="iBATIS">
<section name="logging" type="IBatisNet.Common.Logging.ConfigurationSectionHandler, IBatisNet.Common" />
</sectionGroup>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<iBATIS>
<logging>
<logFactoryAdapter type="IBatisNet.Common.Logging.Impl.Log4NetLoggerFA, IBatisNet.Common.Logging.Log4Net">
<arg key="configType" value="inline" />
</logFactoryAdapter>
</logging>
</iBATIS>
<log4net>
<!-- Define some output appenders -->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="c:/log.txt" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="2" />
<param name="MaximumFileSize" value="100KB" />
<param name="RollingStyle" value="Size" />
<param name="StaticLogFileName" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="[Header]/r/n" />
<param name="Footer" value="[Footer]/r/n" />
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] <%X{auth}> - %m%n" />
</layout>
</appender>
<!-- Set root logger level to ERROR and its appenders -->
<root>
<level value="DEBUG" />
<appender-ref ref="RollingLogFileAppender" />
<appender-ref ref="ConsoleAppender" />
</root>
<!-- Print only messages of level DEBUG or above in the packages -->
<logger name="IBatisNet.DataMapper.Configuration.Cache.CacheModel">
<level value="DEBUG" />
</logger>
<logger name="IBatisNet.DataMapper.Configuration.Statements.PreparedStatementFactory">
<level value="DEBUG" />
</logger>
<logger name="IBatisNet.DataMapper.LazyLoadList">
<level value="DEBUG" />
</logger>
<logger name="IBatisNet.DataAccess.DaoSession">
<level value="DEBUG" />
</logger>
<logger name="IBatisNet.DataMapper.SqlMapSession">
<level value="DEBUG" />
</logger>
<logger name="IBatisNet.Common.Transaction.TransactionScope">
<level value="DEBUG" />
</logger>
<logger name="IBatisNet.DataAccess.Configuration.DaoProxy">
<level value="DEBUG" />
</logger>
</log4net>
</configuration>
using System;
namespace OneTest.Model
{
/********************************
* 作者:jackfor001
* 时间:2006-7-1
* 功能描述:
* Student实体类
*********************************
*/
public class Student
{
private int _Id;
public int Id
{
get { return _Id; }
set { _Id = value; }
}
private string _FirstName;
public string FirstName
{
get { return _FirstName; }
set { _FirstName = value; }
}
private string _LastName;
public string LastName
{
get { return _LastName; }
set { _LastName = value; }
}
private DateTime _BirthDate;
public DateTime BirthDate
{
get { return _BirthDate; }
set { _BirthDate = value; }
}
private decimal _WeightInKilograms;
public decimal WeightInKilograms
{
get { return _WeightInKilograms; }
set { _WeightInKilograms = value; }
}
private decimal _HeightInMeters;
public decimal HeightInMeters
{
get { return _HeightInMeters; }
set { _HeightInMeters = value; }
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<sqlMap
namespace="Student"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://ibatis.apache.org/dataMapper">
<!-- XML "behind" document for the People service class. -->
<resultMaps>
<resultMap id="SelectResult" class="OneTest.Model.Student">
<result property="Id" column="S_ID" />
<result property="FirstName" column="S_FIRST_NAME" />
<result property="LastName" column="S_LAST_NAME" />
<result property="BirthDate" column="S_BIRTH_DATE" />
<result property="WeightInKilograms" column="S_WEIGHT_KG" />
<result property="HeightInMeters" column="S_HEIGHT_M" />
</resultMap>
</resultMaps>
<statements>
<select id="Select" parameterClass="int" resultMap="SelectResult">
select
S_ID,
S_FIRST_NAME,
S_LAST_NAME,
S_BIRTH_DATE,
S_WEIGHT_KG,
S_HEIGHT_M
from Student
<dynamic prepend="WHERE">
<isParameterPresent>
S_ID = #value#
</isParameterPresent>
</dynamic>
</select>
<insert id="Insert" parameterClass="Student" resultClass="int">
insert into Student
(S_ID, S_FIRST_NAME, S_LAST_NAME,
S_BIRTH_DATE, S_WEIGHT_KG, S_HEIGHT_M)
values
(#Id#, #FirstName#, #LastName#,
#BirthDate#, #WeightInKilograms#, #HeightInMeters#)
</insert>
<update id="Update" parameterClass="Student" resultClass="int">
update Student set
S_FIRST_NAME = #FirstName#,
S_LAST_NAME = #LastName#,
S_BIRTH_DATE = #BirthDate#,
S_WEIGHT_KG = #WeightInKilograms#,
S_HEIGHT_M = #HeightInMeters#
where S_ID = #Id#
</update>
<delete id="Delete" parameterClass="int" resultClass="int">
delete from Student
where S_ID = #Id#
</delete>
</statements>
</sqlMap>
<?xml version="1.0" encoding="gb2312" ?>
<!--需要修改的地方
更改sqlMapConfig
xmlns="http://ibatis.apache.org/dataMapper"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-->
<sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<properties resource="properties.config"/>
<settings>
<setting useStatementNamespaces="false"/>
<setting cacheModelsEnabled="true"/>
</settings>
<!--增加providers节点-->
<providers resource="providers.config"/>
<database>
<provider name="${provider}"/>
<dataSource name="iBatisTutorial" connectionString="${connectionString}"/>
</database>
<sqlMaps>
<!--Example:文件夹/文件名-->
<sqlMap resource="Maps/Student.xml"/>
</sqlMaps>
</sqlMapConfig>
<?xml version="1.0" encoding="utf-8" ?>
<settings>
<!-- User application and configured property settings go here.-->
<!-- Example: <add key="settingName" value="settingValue"/> -->
<add key="provider" value="sqlServer1.1"/>
<add key="connectionString" value="packet size=4096;user id=zhangrenzhi;password = 12345670;data source=192.168.5.114;persist security info=False;initial catalog=test"/>
<add key="root" value="./"/>
</settings>
还有个配置文件providers.config可以直接从ibatis包里面拷出来,我用的包比较老了,所以需要更改个地方
增加
xmlns="http://ibatis.apache.org/providers"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
其他的地方不变OK好了