我这里主要分成了两个xml来进行spring.net管理实际情况中可自己根据需要进行分类
Dao2.xml
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
xmlns:db="http://www.springframework.net/database"
xmlns:tx="http://www.springframework.net/tx"> <description>Data Access Objects.</description> <object id="ClassicDao" type="Framework.Impl.Dao.ClassicDao, Framework.Impl">
<property name="HibernateTemplate" ref="CHibernateTemplate"/>
<property name="AdoTemplate" ref="CAdoTemplate"/>
</object> <object id="AccessBatcher" type="Framework.Impl.Service.OracleAccessBatcher, Framework.Impl">
<property name="HibernateTemplate" ref="CHibernateTemplate"/>
<property name="AdoTemplate" ref="CAdoTemplate"/>
</object> <!-- placeholder configurer-->
<object type="Spring.Objects.Factory.Config.PropertyPlaceholderConfigurer, Spring.Core">
<property name="ConfigSections" value="databaseSettings"/>
</object> <!-- Database and NHibernate Configuration -->
<!--<db:provider id="DbProvider" provider="OracleClient-2.0"
connectionString="Data Source=(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ${db.datasource})(PORT = ${db.port}))
(ADDRESS = (PROTOCOL = TCP)(HOST = ${db.datasource2})(PORT = ${db.port}))
(load_balance=yes)
)(CONNECT_DATA = (SERVICE_NAME = ${db.database})(server = dedicated))
);
User Id=${db.user};Password=${db.password};"/>-->
<db:provider id="DbProvider" provider="OracleODP-11-3.0"
connectionString="Data Source=(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ${db.datasource})(PORT =${db.port}))
(ADDRESS = (PROTOCOL = TCP)(HOST = ${db.datasource2})(PORT =${db.port}))
(load_balance=yes)
)(CONNECT_DATA = (SERVICE_NAME = ${db.database})(server = dedicated))
);
User Id=${db.user};Password=${db.password};"/>
<object id="SessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject">
<property name="DbProvider" ref="DbProvider"/> <property name="MappingAssemblies">
<list>
<value>HRAModel</value>
<value>BASModel</value>
<value>RSKModel</value>
<value>MKTModel</value>
<value>TRANModel</value>
<value>ImportModel</value>
<value>ETLModel</value>
<value>CCRModel</value>
<value>ALMModel</value>
<value>HraUtility</value>
<value>POSModel</value>
</list>
</property>
<property name="HibernateProperties"> <dictionary>
<entry key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
<entry key="dialect" value="NHibernate.Dialect.Oracle10gDialect"/>
<!--<entry key="connection.driver_class" value="NHibernate.Driver.OracleClientDriver"/>-->
<entry key="connection.driver_class" value="NHibernate.Driver.OracleDataClientDriver"/>
<!--<entry key="use_outer_join" value="true"/>-->
<entry key="show_sql" value="true"/>
<entry key="use_proxy_validator" value="true"/>
<!--<entry key="hbm2ddl.auto" value="update"/>-->
<!--<entry key="hibernate.current_session_context_class"
value="Spring.Data.NHibernate.SpringSessionContext, Spring.Data.NHibernate30"/>-->
<entry key="hibernate.current_session_context_class"
value="thread"/>
</dictionary> </property>
<!-- 必须增加此项说明,与 Spring 的声明式事务集成 -->
<property name="ExposeTransactionAwareSessionFactory" value="true" /> </object>
<!--事务切面 kexb修改与2016.5.14-->
<tx:attribute-driven transaction-manager="TxManager" />
<!-- Classic Template -->
<object id="CHibernateTemplate" type="Spring.Data.NHibernate.HibernateTemplate">
<property name="SessionFactory" ref="SessionFactory" />
<property name="TemplateFlushMode" value="Auto" />
<property name="CacheQueries" value="true" />
</object>
<object id="CAdoTemplate" type="Spring.Data.Core.AdoTemplate, Spring.Data">
<property name="DbProvider" ref="DbProvider"/>
<property name="DataReaderWrapperType" value="Spring.Data.Support.NullMappingDataReader, Spring.Data"/>
</object>
</objects>
Service.xml
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"> <object id="CommonService" type="Framework.Impl.Service.CommonService, Framework.Impl">
<property name="Dao" ref="ClassicDao"/>
<property name="Cache" ref="AspNetCache"/>
<property name="Scheduler" ref="QuartzScheduler"/>
</object> <object id="AspNetCache" type="Spring.Caching.AspNetCache, Spring.Web">
<property name="SlidingExpiration" value="true"/>
<property name="TimeToLive" value="00:22:00"/>
</object> <object id="QuartzWeeklyCalendar" type="Framework.Impl.Quartz.WorkHourCalendar, Framework.Impl">
<property name="WorkingHoursUtcExp" value="0:00-4:00,5:00-10:00"/>
<property name="IncludedDatesOfMonthService" value="@(WorkDateService).FindWorkDays(#iYear,#iMonth)"/>
</object>
<object id="QuartzScheduler" type="Spring.Scheduling.Quartz.SchedulerFactoryObject, Spring.Scheduling.Quartz">
<property name="Calendars">
<dictionary>
<entry key="default" value-ref="QuartzWeeklyCalendar" />
</dictionary>
</property>
<property name="QuartzProperties">
<dictionary>
<entry key="quartz.threadPool.threadCount" value="2" />
</dictionary>
</property>
</object>
<!--Wcf ServiceModel Extensions 仅处理此列表登记的类型-->
<object id="WcfInterceptor" lazy-init="true" type="System.Collections.ArrayList,mscorlib">
<constructor-arg>
<list>
<object type="Framework.Integration.WCF.NHibernate.HibernateDataContractSurrogate, Framework.Integration"/>
<object type="Framework.Integration.WCF.FaultErrorHandler, Framework.Integration"/>
<ref object="WcfMsgLog"/>
</list>
</constructor-arg>
</object>
<object id="WcfOsiv" lazy-init="true" type="Spring.Data.NHibernate.Support.SessionScope"/>
<object id="WcfMsgLog" lazy-init="true" type="Framework.Integration.WCF.DispatchMessageInspector, Framework.Integration">
<constructor-arg name="enableLog" value="false"/>
<constructor-arg name="osiv" ref="WcfOsiv"/>
</object> <!--事务自动AOP控制-->
<object name="autoProxyCreator" type="Spring.Aop.Framework.AutoProxy.ObjectNameAutoProxyCreator, Spring.Aop">
<property name="InterceptorNames" value="transactionInterceptor"/>
<property name="ObjectNames">
<list>
<value>*Service</value>
<value>*BLL</value>
<!--拦截目标对象-->
</list>
</property>
</object> <object id="transactionInterceptor" type="Spring.Transaction.Interceptor.TransactionInterceptor">
<property name="TransactionManager" ref="TxManager"/>
<property name="TransactionAttributes">
<name-values>
<add key="Save*" value="PROPAGATION_REQUIRED"/>
<!--拦截方法名-->
<add key="Find*" value="PROPAGATION_SUPPORTS,readOnly"/> <add key="LimitControl" value="PROPAGATION_REQUIRED"/>
</name-values>
</property>
</object> <object id="TxManager" type="Spring.Data.NHibernate.HibernateTransactionManager">
<property name="DbProvider" ref="DbProvider"/>
<property name="SessionFactory" ref="SessionFactory"/>
</object>
</objects>
Dao层封装 这里我是hibernatetemplate模板做的,因为spring.net事务管理里面已经对session进行了管理,而我比较任性想要既可以配置管理,也可以手动管理(方法中请注意 GetSession的[Transaction(ReadOnly=true)])特性注解 classicdao.cs
using System;
using System.Data;
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions; #if NHIBERNATE
//NHibernate Template
using NHibernate;
#endif #if ADO_NET
//Ado Template
using Spring.Data.Core;
using Spring.Data.Common;
#endif //Query Info
using Framework.IDao;
using Framework.Domain;
using Framework;
using Spring.Data;
using Spring.Data.NHibernate.Generic;
using System.Diagnostics;
using System.Reflection;
using Oracle.DataAccess.Client;
using System.Runtime.Remoting.Messaging;
using NHibernate.Type;
using NHibernate.Context;
using Spring.Transaction.Interceptor;
using Spring.Stereotype; namespace Framework.Impl.Dao
{ public class ClassicDao : IClassicDao
{ #if NHIBERNATE private Spring.Data.NHibernate.HibernateTemplate hibernateTemplate;
public Spring.Data.NHibernate.HibernateTemplate HibernateTemplate
{
get
{
return hibernateTemplate;
}
set
{
hibernateTemplate = value;
}
} public object FindById(Type type, object id)
{ return HibernateTemplate.Load(type, id);
} public IList FindAll(Type type)
{
return HibernateTemplate.LoadAll(type);
}
public object FindOne(QueryInfo info)
{
return HibernateTemplate.Execute(delegate (ISession session)
{ IQuery q = null;
if (info.NamedQuery == null)
{
info.QueryObject = info.ToHQLString();
foreach (System.Collections.Generic.KeyValuePair<string, string> filter in info.Filters)//Enable Filter
session.EnableFilter(filter.Value).SetParameter(filter.Key, info.Parameters[filter.Key]); q = session.CreateQuery(info.QueryObject + info.ToOrderBy());
}
else
q = session.GetNamedQuery(info.NamedQuery); SetParameters(q, info, HibernateTemplate); return q.UniqueResult();
});
} int CurrentCapacity = -1;
public IList FindList(QueryInfo info)
{
return (IList)HibernateTemplate.Execute(delegate (ISession session)
{
IQuery q = null;
if (info.NamedQuery == null)
{
info.QueryObject = info.ToHQLString();
foreach (System.Collections.Generic.KeyValuePair<string, string> filter in info.Filters)//Enable Filter
session.EnableFilter(filter.Value).SetParameter(filter.Key, info.Parameters[filter.Key]); q = session.CreateQuery(info.QueryObject + info.ToOrderBy());
}
else
q = session.GetNamedQuery(info.NamedQuery); SetParameters(q, info, HibernateTemplate); #region Check License Capacity
//if (CurrentCapacity == -1)//每次初始化运行
//{
// if (LicenseValidator.Capacity > 0)
// {
// int i = GetUserCount();
// if (i > LicenseValidator.Capacity + 1)
// throw new UnauthorizedAccessException(string.Format("当前用户数'{0}'已超过授权最大用户数'{1}',系统已转为试用模式.\r\n请确认License文件有效,且正确放在bin目录.", i, LicenseValidator.Capacity));
// else
// CurrentCapacity = i;//成功初始化
// }
// else
// CurrentCapacity = 0;//成功初始化
//}
#endregion if (info.NamedQuery == null && info.TotalCount > 0)//进行分页过滤?
{
if (info.TotalCount == 1)//取总条数,分页
info.TotalCount = GetTotalCount(info);
q.SetFirstResult(info.StartRecord);
q.SetMaxResults(info.PageSize);
}
return q.List();
});
}
public int GetTotalCount(QueryInfo info)//统计总条数
{
long i = (long)HibernateTemplate.Execute(delegate (ISession session)
{
if (info.QueryObject == null)
throw new ArgumentNullException("QueryObject", "info.QueryObject can't not be null in GetTotalCount.");
if (info.QueryObject.IndexOf("from") < 0)//Get Count directly?
info.QueryObject = info.ToHQLString(); string sCountHQL = string.Format("SELECT COUNT({0}) {1}", info.CountField
, info.QueryObject.Substring(info.QueryObject.IndexOf("from")));//from ...
if (info.Parameters.ContainsKey("NO_COUNT"))//分页时移除此条件、此参数
{
sCountHQL = sCountHQL.Replace(info.Where["NO_COUNT"], string.Empty);
info.Parameters.Remove("NO_COUNT");
}
foreach (System.Collections.Generic.KeyValuePair<string, string> filter in info.Filters)//Enable Filter
session.EnableFilter(filter.Value).SetParameter(filter.Key, info.Parameters[filter.Key]); IQuery q = session.CreateQuery(sCountHQL); SetParameters(q, info, HibernateTemplate);
q.SetResultTransformer(null);//Important
return q.UniqueResult();
});
return Convert.ToInt32(i);
} public static void SetParameters(IQuery q, QueryInfo info, Spring.Data.NHibernate.HibernateAccessor accessor)
{
// LicenseValidator.Validate();
if (info.Transformer != null)
{
Type transType;
transType = info.Transformer as Type;
if (transType == null && info.Transformer is string)
transType = Type.GetType((string)info.Transformer); if (transType == null)
throw new ArgumentException("Resultset 'Transformer' type could not be found.");
q.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(transType));
}
if (info.NamedQuery != null)
{
System.Text.StringBuilder sb = null;
bool bQueryReplaced = false;
IDictionary namedParams = null;
string sNullExp = " is null";//prop=:prop => prop is null
int iWhere = q.QueryString.IndexOf("where", StringComparison.InvariantCultureIgnoreCase);
foreach (System.Collections.Generic.KeyValuePair<string, object> p in info.Parameters)//if (!info.Filters.ContainsKey(p.Key))//bypass filter params
{
#region 更新Where后语句支持参数NULL值:NamedSQL请不要使同一参数在where前后同时出现!
//select Col = :FormType from A where FormType=:FormType => select Col = from A Where FormType is null.
//其中where之前的参数为NHibernate替换.NamedSQL请不要使同一参数在where前后同时出现!
if (iWhere > 0 && p.Value == null)
{
bool bReplaced = false;//重置
if (sb == null)
sb = new System.Text.StringBuilder(q.QueryString); Regex regex = new Regex(string.Format(@"([=><]+)(\s*):{0}", p.Key));
MatchCollection mc = regex.Matches(sb.ToString());
for (int i = mc.Count - 1; i > -1; i--)
{
Match mt = mc[i];
if (mt.Index > iWhere)//仅更新Where后语句
{
sb.Replace(mt.Value, sNullExp, mt.Index, mt.Length);
bQueryReplaced = true;
bReplaced = true;
}
} if (bReplaced)//where 后更新成功
{
if (namedParams == null)
namedParams = NHibernateHack.GetNamedParameterMap(q);
NHibernateHack.AddTypedValue(namedParams, p.Key);
continue;//参数不再需要了
}
}
#endregion
accessor.ApplyNamedParameterToQuery(q, p.Key, p.Value, ((p.Value == null || p.Value is string) ? NHibernate.NHibernateUtil.AnsiString : null));
}
if (bQueryReplaced)//更新QueryString
NHibernateHack.SetQueryString(q, sb.ToString());
}
else
foreach (System.Collections.Generic.KeyValuePair<string, object> p in info.Parameters)
if (!info.Filters.ContainsKey(p.Key))//bypass filter params
accessor.ApplyNamedParameterToQuery(q, p.Key, p.Value, ((p.Value == null || p.Value is string) ? NHibernate.NHibernateUtil.AnsiString : null));
} #region Misc
public object SaveOrUpdate(object obj)
{
Entity o = obj as Entity;
if (o == null)
throw new ArgumentException("Obj should be inherit from class [Entity]!"); if (o.State.New)
Save(obj);
else if (o.State.Deleted)
Delete(obj);
else if (o.State.Dirty)
Update(obj); if (o.State.Deleted)//删除时不返回
return null;
else
return obj;
} public void Flush()
{
HibernateTemplate.Flush();
}
public void Evict(object obj)
{
HibernateTemplate.Evict(obj);
} private int GetUserCount()
{
int i = 0;
if (this.AdoTemplate != null)
{
QueryInfo info = new QueryInfo();
info.CustomSQL = "select count(1) from SYS_USER";
i = Convert.ToInt32(this.ExecuteScalar(info));
}
return i;
}
public void Save(object obj)
{ HibernateTemplate.Execute(delegate (ISession session)
{
session.Save(obj);
if (session.Transaction.IsActive)
{
session.Flush();
}
return null; }); } public void Update(object obj)
{
HibernateTemplate.Execute(delegate (ISession session)
{
session.Merge(obj);
if (session.Transaction.IsActive)
{
session.Flush();
}
return null; }); } public void Delete(object obj)
{
HibernateTemplate.Execute(delegate (ISession session)
{
session.Delete(obj);
if (session.Transaction.IsActive)
{
session.Flush();
}
return null; });
} /// <summary>
/// 请不要使同一参数在where前后同时出现!
/// </summary>
public int ExecuteUpdate(QueryInfo info)
{
int i = (int)HibernateTemplate.Execute(delegate (ISession session)
{
IQuery q = null;
if (info.NamedQuery == null)
{
info.QueryObject = info.ToHQLString();
foreach (System.Collections.Generic.KeyValuePair<string, string> filter in info.Filters)//Enable Filter
session.EnableFilter(filter.Value).SetParameter(filter.Key, info.Parameters[filter.Key]); q = session.CreateQuery(info.QueryObject + info.ToOrderBy());
}
else
q = session.GetNamedQuery(info.NamedQuery); SetParameters(q, info, HibernateTemplate);
int ii = q.ExecuteUpdate();
if (session.Transaction.IsActive)
{
session.Flush();
}
return ii;
}); return i;
}
#endregion
#endif #if ADO_NET
public object ExecuteScalar(QueryInfo info)
{
IDbParameters ps = AdoAccessorHelper.PrepareCommand(AdoTemplate, info);
object o = AdoTemplate.ExecuteScalar(info.NamedQuery == null ? CommandType.Text : CommandType.StoredProcedure
, info.QueryObject, ps); if (info.TotalCount == 1)
AdoAccessorHelper.FetchOutputParameters(ps, info);
return o;
} public IList<T> ExecuteRowMapper<T>(QueryInfo info, IRowMapper mapper) where T : new()
{
ISession session = GetSession();
{
IDbParameters ps = AdoAccessorHelper.PrepareCommand(AdoTemplate, info);
bool bOutput = false;
int i;
if (info.TotalCount == 1)//进行分页?
{
bOutput = true;
if (info.NamedQuery == null)
{
i = info.QueryObject.IndexOf("from", StringComparison.InvariantCultureIgnoreCase); string sCountSQL = string.Format("SELECT COUNT({0}) {1}", info.CountField
, info.QueryObject.Substring(i));//from ...
info.TotalCount = Convert.ToInt32(AdoTemplate.ExecuteScalar(CommandType.Text, sCountSQL, ps));
AdoAccessorHelper.BuildPagingSQL(AdoTemplate, info);
}
} IDbCommand command = session.Connection.CreateCommand();
for (int j = 0; j < ps.Count; j++)
{
var p = command.CreateParameter();
p.ParameterName = ps[j].ParameterName;
p.Value = ps[j].Value;
command.Parameters.Add(p);
}
command.CommandText = info.QueryObject + info.ToOrderBy(); IDataReader reader = command.ExecuteReader();
IList<T> li = new List<T>();
Type mapperType = mapper.GetType();
MethodInfo[] mis = mapperType.GetMethods();
while (reader.Read())
{
foreach (MethodInfo mi in mis)
{
if (mi.Name == "MapRow")
{ li.Add((T)mi.Invoke(mapper, new object[] { reader, 0 }));
} }
}
reader.Close(); //IList li = AdoTemplate.QueryWithRowMapper(info.NamedQuery == null ? CommandType.Text : CommandType.StoredProcedure
// , info.QueryObject + info.ToOrderBy(), mapper, ps);
if (bOutput)
AdoAccessorHelper.FetchOutputParameters(ps, info); return li;
} }
public IList ExecuteRowMapper(QueryInfo info, IRowMapper mapper)
{
IDbParameters ps = AdoAccessorHelper.PrepareCommand(AdoTemplate, info);
bool bOutput = false;
int i;
if (info.TotalCount == 1)//进行分页?
{
bOutput = true;
if (info.NamedQuery == null)
{
i = info.QueryObject.IndexOf("from", StringComparison.InvariantCultureIgnoreCase); string sCountSQL = string.Format("SELECT COUNT({0}) {1}", info.CountField
, info.QueryObject.Substring(i));//from ...
info.TotalCount = Convert.ToInt32(AdoTemplate.ExecuteScalar(CommandType.Text, sCountSQL, ps));
AdoAccessorHelper.BuildPagingSQL(AdoTemplate, info);
//if (AdoTemplate.DbProvider.DbMetadata.ParameterNamePrefix == "?")
//{
// mapper.Start = info.StartRecord;
// mapper.Limit = info.PageSize;
//}
}
}
IList li = AdoTemplate.QueryWithRowMapper(info.NamedQuery == null ? CommandType.Text : CommandType.StoredProcedure
, info.QueryObject + info.ToOrderBy(), mapper, ps);
if (bOutput)
AdoAccessorHelper.FetchOutputParameters(ps, info);
return li; }
[Obsolete]
public IList ExecuteRowMapper(QueryInfo info, Type type)
{
IDbParameters ps = AdoAccessorHelper.PrepareCommand(AdoTemplate, info);
ClassicRowMapper mapper = new ClassicRowMapper(type);
bool bOutput = false;
int i;
if (info.TotalCount == 1)//进行分页?
{
bOutput = true;
if (info.NamedQuery == null)
{
i = info.QueryObject.IndexOf("from", StringComparison.InvariantCultureIgnoreCase); string sCountSQL = string.Format("SELECT COUNT({0}) {1}", info.CountField
, info.QueryObject.Substring(i));//from ... info.TotalCount = Convert.ToInt32(AdoTemplate.ExecuteScalar(CommandType.Text, sCountSQL, ps)); AdoAccessorHelper.BuildPagingSQL(AdoTemplate, info);
if (AdoTemplate.DbProvider.DbMetadata.ParameterNamePrefix == "?")
{
mapper.Start = info.StartRecord;
mapper.Limit = info.PageSize;
}
}
} IList li = AdoTemplate.QueryWithRowMapper(info.NamedQuery == null ? CommandType.Text : CommandType.StoredProcedure
, info.QueryObject + info.ToOrderBy(), mapper, ps);
if (bOutput)
AdoAccessorHelper.FetchOutputParameters(ps, info);
return li;
} public int ExecuteNonQuery(QueryInfo info)
{
IDbParameters ps = AdoAccessorHelper.PrepareCommand(AdoTemplate, info);
int i = AdoTemplate.ExecuteNonQuery(info.NamedQuery == null ? CommandType.Text : CommandType.StoredProcedure
, info.QueryObject, ps);
if (info.TotalCount == 1)
AdoAccessorHelper.FetchOutputParameters(ps, info);
return i;
} public DataSet ExecuteDataSet(QueryInfo info, bool closeSession = true)
{
IDbParameters ps = AdoAccessorHelper.PrepareCommand(AdoTemplate, info); DataSet ds = new DataSet();
bool bOutput = false;
int i;
if (info.TotalCount == 1)//进行分页?
{
bOutput = true;
if (info.NamedQuery == null)
{
i = info.QueryObject.IndexOf("from", StringComparison.InvariantCultureIgnoreCase);
if (i < 0)
throw new ArgumentException("'from' clause is not found in 'CustomSQL'."); string sCountSQL = string.Format("SELECT COUNT({0}) {1}", info.CountField
, info.QueryObject.Substring(i));//from ... info.TotalCount = Convert.ToInt32(adoTemplate.ExecuteScalar(CommandType.Text, sCountSQL, ps)); AdoAccessorHelper.BuildPagingSQL(AdoTemplate, info);
}
}
i = AdoTemplate.DataSetFillWithParameters(ds, info.NamedQuery == null ? CommandType.Text : CommandType.StoredProcedure
, info.QueryObject + info.ToOrderBy(), ps);
if (bOutput)
AdoAccessorHelper.FetchOutputParameters(ps, info);
return ds;
//IDbParameters ps = AdoAccessorHelper.PrepareCommand(AdoTemplate, info); //DataSet ds = new DataSet();
//bool bOutput = false;
//int i;
//if (info.TotalCount == 1)//进行分页?
//{
// bOutput = true;
// if (info.NamedQuery == null)
// {
// i = info.QueryObject.IndexOf("from", StringComparison.InvariantCultureIgnoreCase);
// if (i < 0)
// throw new ArgumentException("'from' clause is not found in 'CustomSQL'."); // string sCountSQL = string.Format("SELECT COUNT({0}) {1}", info.CountField
// , info.QueryObject.Substring(i));//from ... // info.TotalCount = Convert.ToInt32(adoTemplate.ExecuteScalar(CommandType.Text, sCountSQL, ps)); // AdoAccessorHelper.BuildPagingSQL(AdoTemplate, info);
// }
//}
//i = AdoTemplate.DataSetFillWithParameters(ds, info.NamedQuery == null ? CommandType.Text : CommandType.StoredProcedure
// , info.QueryObject + info.ToOrderBy(), ps);
//if (bOutput)
// AdoAccessorHelper.FetchOutputParameters(ps, info);
//return ds;
} private AdoTemplate adoTemplate;
public AdoTemplate AdoTemplate
{
get
{
if (adoTemplate == null)
throw new Exception("'ClassicDAO'未被注入AdoTemplate属性,请检查Spring配置.");
return adoTemplate;
}
set
{
adoTemplate = value;
}
}
#endif #region IClassicDao 成员 public void SaveOrUpdateAll<T>(IList<T> list) where T : Framework.Domain.Entity
{ HibernateTemplate.Execute(delegate (ISession session)
{
if (session.Transaction.IsActive)
{
for (int i = 0; i < list.Count; i++)
{
Entity a = list[i] as Entity;
if (a.State.New || string.IsNullOrEmpty(a.Id))
{ session.Save(a);
}
else if (a.State.Deleted)
{
session.Delete(a);
}
else
{ session.Merge(a);
} }
session.Flush();
}
else
{
using (var tx = session.BeginTransaction())
{
try
{
int i = 0;
foreach (Framework.Domain.Entity a in list)
{
if (a.State.New || string.IsNullOrEmpty(a.Id))
{
session.Save(list[i]);
}
else if (a.State.Deleted)
{
session.Delete(list[i]);
}
else
{
session.Merge(list[i]);
}
i++;
}
tx.Commit();
}
catch (Exception ex)
{
tx.Rollback();
throw ex;
}
finally
{
session.Close();
}
}
}
return null;
}); } public void SaveOrUpdateAll(IList list)
{
HibernateTemplate.Execute(delegate (ISession session)
{
if (session.Transaction.IsActive)
{
for (int i = 0; i < list.Count; i++)
{
Entity a = list[i] as Entity;
if (a.State.New || string.IsNullOrEmpty(a.Id))
{ session.Save(a);
}
else if (a.State.Deleted)
{
session.Delete(a);
}
else
{ session.Merge(a);
} }
session.Flush();
}
else
{
using (var tx = session.BeginTransaction())
{
try
{
int i = 0;
foreach (Framework.Domain.Entity a in list)
{
if (a.State.New || string.IsNullOrEmpty(a.Id))
{
session.Save(list[i]);
}
else if (a.State.Deleted)
{
session.Delete(list[i]);
}
else
{
session.Merge(list[i]);
}
i++;
}
tx.Commit();
}
catch (Exception ex)
{
tx.Rollback();
throw ex;
}
finally
{
session.Close();
}
}
}
return null;
});
} public IStatelessSession GetStatelessSession()
{
_IStatelessSession = this.HibernateTemplate.SessionFactory.OpenStatelessSession();
return _IStatelessSession;
}
[Transaction(ReadOnly =true)]
public ISession GetSession()
{
var sessionFactory = HibernateTemplate.SessionFactory; var session=sessionFactory.GetCurrentSession();
session.FlushMode=FlushMode.Auto;
return session; } public ISession GetPerSession()
{
return this.HibernateTemplate.SessionFactory.OpenSession();
} private ISession _session = null;
private IStatelessSession _IStatelessSession = null; #endregion
}
} web层配置文件,里面也涉及了sessionfactor currentsession在web层的调用需要指明sessionfactory 以及opensessioninview的配置请认真注意这两点 <configuration>
<configSections>
<sectionGroup name="elmah">
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah"/>
<section name="security" type="Elmah.SecuritySectionHandler, Elmah"/>
<!--<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah"/>
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah"/>-->
</sectionGroup>
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.WebContextHandler, Spring.Web"/>
<section name="parsers" type="Spring.Context.Support.NamespaceParsersSectionHandler, Spring.Core"/>
</sectionGroup>
<sectionGroup name="common">
<section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging"/>
</sectionGroup>
<section name="databaseSettings" type="System.Configuration.NameValueSectionHandler, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<sectionGroup name="devExpress">
<section name="themes" type="DevExpress.Web.ThemesConfigurationSection, DevExpress.Web.v15.1" requirePermission="false"/>
<section name="compression" type="DevExpress.Web.CompressionConfigurationSection, DevExpress.Web.v15.1" requirePermission="false"/>
<section name="settings" type="DevExpress.Web.SettingsConfigurationSection, DevExpress.Web.v15.1" requirePermission="false"/>
<section name="errors" type="DevExpress.Web.ErrorsConfigurationSection, DevExpress.Web.v15.1" requirePermission="false"/>
</sectionGroup>
</configSections>
<elmah>
<!--<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="sql" />-->
<errorLog type="Elmah.OracleErrorLog, Elmah" connectionStringName="ConnectionString"/>
<security allowRemoteAccess="yes"/>
</elmah>
<common>
<logging>
<factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
<arg key="configType" value="FILE-WATCH"/>
<arg key="configFile" value="~/Config/Log4Net.xml"/>
</factoryAdapter>
</logging>
</common>
<spring>
<parsers>
<parser type="Spring.Data.Config.DatabaseNamespaceParser, Spring.Data"/>
<parser type="Spring.Transaction.Config.TxNamespaceParser, Spring.Data"/>
</parsers>
<context>
<resource uri="~/Config/Dao2.xml"/>
<resource uri="~/Config/Service.xml"/>
<resource uri="~/Config/BLL.xml"/>
<resource uri="~/Config/Log4Net.xml"/>
<!-- <resource uri="~/Config/Dao.xml"/>-->
</context>
</spring>
<databaseSettings>
<add key="db.datasource" value="192.168.100.100"/>
<add key="db.user" value="nethra"/>
<add key="db.datasource2" value="192.168.100.100"/>
<add key="db.password" value="nethra"/>
<add key="db.database" value="hra"/>
<add key="db.port" value="1521"/>
<!--<add key="db.datasource" value="117.29.168.106"/>
<add key="db.user" value="nethra"/>
<add key="db.datasource2" value="117.29.168.106"/>
<add key="db.password" value="nethra"/>
<add key="db.database" value="hrarelease"/>
<add key="db.port" value="1541"/>-->
<!--<add key="db.datasource" value="192.168.140.128" />
<add key="db.user" value="nethra" />
<add key="db.datasource2" value="192.168.140.128" />
<add key="db.password" value="nethra" />
<add key="db.database" value="XE" />
<add key="db.port" value="1521" />-->
<!--<add key="db.datasource" value="192.168.2.106" />
<add key="db.user" value="nethra" />
<add key="db.datasource2" value="192.168.2.106" />
<add key="db.password" value="nethra" />
<add key="db.database" value="XE" />
<add key="db.port" value="1521" />-->
<!--<add key="db.datasource" value="192.168.1.10" />
<add key="db.user" value="nethra" />
<add key="db.datasource2" value="192.168.1.106" />
<add key="db.password" value="nethra" />
<add key="db.database" value="hrarelease" />
<add key="db.port" value="1521" />-->
<!--<add key="db.datasourceSql" value="117.29.168.106"/>
<add key="db.userSql" value="sa"/>
<add key="db.passwordSql" value="haihui2013"/>
<add key="db.databaseSql" value="Holworth_SC"/>-->
</databaseSettings>
<system.web>
<globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8"/>
<pages theme="default" enableSessionState="true" validateRequest="false">
<controls>
<add tagPrefix="asp" namespace="WebControls.Web.UI" assembly="WebControls"/>
<add tagPrefix="asp" namespace="Trirand.Web.UI.WebControls" assembly="Trirand.Web"/>
<!--<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />-->
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</controls>
</pages>
<authentication mode="Forms">
<forms name=".ADUAUTH" loginUrl="Login.aspx" protection="All"/>
</authentication>
<httpModules>
<add name="Spring" type="Spring.Context.Support.WebSupportModule, Spring.Web"/>
<remove name="FormsAuthentication"/>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
<add type="DevExpress.Web.ASPxHttpHandlerModule, DevExpress.Web.v15.1, Version=15.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" name="ASPxHttpHandlerModule"/>
</httpModules>
<trace enabled="false" requestLimit="10" pageOutput="true" traceMode="SortByTime" localOnly="true"/>
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" timeout="20"/>
<compilation debug="true">
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="DevExpress.Printing.v15.1.Core"/>
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="DevExpress.Web.ASPxThemes.v15.1"/>
<add assembly="DevExpress.XtraReports.v15.1.Web"/>
<add assembly="DevExpress.Web.v15.1"/>
<add assembly="DevExpress.Data.v15.1"/>
<add assembly="System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="Microsoft.Build.Utilities.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.DirectoryServices.Protocols, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web.RegularExpressions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/></assemblies>
<buildProviders>
<add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.WebForms, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
</buildProviders>
</compilation>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="POST,GET,HEAD" path="error.axd" type="Elmah.ErrorLogPageFactory, Elmah"/>
<add verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
<add type="DevExpress.Web.ASPxHttpHandlerModule, DevExpress.Web.v15.1" verb="GET" path="DX.ashx" validate="false"/>
</httpHandlers>
</system.web>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
<appSettings>
<add key="Spring.Data.NHibernate.Support.OpenSessionInViewModule.SessionFactoryObjectName" value="SessionFactory"/>
<add key="COMMON_CFG" value="Config\App.config"/>
<add key="NO_AUTO_CONFIG" value="1"/>
<add key="DataBase" value="1"/>
<add key="pageSize" value="30"/>
</appSettings>
<connectionStrings>
<!--<add name="sql" connectionString="Integrated Security=false; Data Source=PANTECH-PC\WINDSHADOWSS;Database=simpleframework;User ID=sa;Password=123;"/>-->
<add name="ConnectionString" connectionString="Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.2.252)(PORT = 1521))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME =hrarelease)));User Id=nethra;Password=nethra;" providerName="Oracle.DataAccess"/>
</connectionStrings>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compilers>
</system.codedom>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
<remove name="ScriptModule"/>
<add name="Spring" type="Spring.Context.Support.WebSupportModule, Spring.Web"/>
<add name="OpenSessionInView" type="Spring.Data.NHibernate.Support.OpenSessionInViewModule, Spring.Data.NHibernate30"/>
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add type="DevExpress.Web.ASPxHttpHandlerModule, DevExpress.Web.v15.1" name="ASPxHttpHandlerModule"/>
</modules>
<handlers>
<remove name="WebServiceHandlerFactory-Integrated"/>
<remove name="ScriptHandlerFactory"/>
<remove name="ScriptHandlerFactoryAppServices"/>
<remove name="ScriptResource"/>
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd" preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
<add type="DevExpress.Web.ASPxHttpHandlerModule, DevExpress.Web.v15.1" verb="GET" path="DX.ashx" name="ASPxHttpHandlerModule" preCondition="integratedMode"/>
</handlers>
</system.webServer>
<runtime>
<assemblyBinding appliesTo="v2.0.50727" xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.web>
<!--<httpRuntime targetFramework="4.0" requestValidationMode="2.0"/>-->
<httpRuntime maxRequestLength="2147483647" requestValidationMode="2.0"/>
</system.web>
<devExpress>
<themes enableThemesAssembly="true" styleSheetTheme="" theme="" customThemeAssemblies=""/>
<compression enableHtmlCompression="false" enableCallbackCompression="true" enableResourceCompression="true" enableResourceMerging="true"/>
<settings doctypeMode="Xhtml" rightToLeft="false" embedRequiredClientLibraries="false" ieCompatibilityVersion="edge"/>
<errors callbackErrorRedirectUrl=""/>
</devExpress>
</configuration>   

  

spring.net 集成nhibernate配置文件(这里暴露了GetCurrentSession 对于 CurrentSession unbond thread这里给出了解决方法)的更多相关文章

  1. Spring如何加载XSD文件(org.xml.sax.SAXParseException: Failed to read schema document错误的解决方法)

    今天配置Spring的xml出现了错误 Multiple annotations found at this line: - schema_reference.4: Failed to read sc ...

  2. PhpMyAdmin 配置文件现在需要一个短语密码的解决方法

    新版本的PhpMyAdmin 增强了安全性,需要在配置文件设置一个短语密码.否则进入之后会有“配置文件现在需要一个短语密码.”的红色警叹提示. 解决方法: 1.将 phpMyAdmin/librari ...

  3. Spring.NET 与 NHibernate

    回到 Spring.NET & NHibernate of C#.NET 技术论坛 实战C#.NET编程----Spring.NET & NHibernate从入门到精通 您可以从以下 ...

  4. 玩转Spring Boot 集成Dubbo

    玩转Spring Boot 集成Dubbo 使用Spring Boot 与Dubbo集成,这里我之前尝试了使用注解的方式,简单的使用注解注册服务其实是没有问题的,但是当你涉及到使用注解的时候在服务里面 ...

  5. Spring boot 集成Dubbox(山东数漫江湖)

    前言 因为工作原因,需要在项目中集成dubbo,所以去查询dubbo相关文档,发现dubbo目前已经不更新了,所以把目光投向了dubbox,dubbox是当当网基于dubbo二次开发的一个项目,dub ...

  6. Spring Boot 集成 Elasticsearch 实战

    最近有读者问我能不能写下如何使用 Spring Boot 开发 Elasticsearch(以下简称 ES) 相关应用,今天就讲解下如何使用 Spring Boot 结合 ES. 可以在 ES 官方文 ...

  7. Spring配置文件集成Hibernate配置文件

      Spring对hibernate配置文件hibernate.cfg.xml的集成,来取代hibernate.cfg.xml的配置.  spring对hibernate配置文件hibernate.c ...

  8. 在Spring下集成ActiveMQ

    1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spr ...

  9. Spring Boot集成Jasypt安全框架

    Jasypt安全框架提供了Spring的集成,主要是实现 PlaceholderConfigurerSupport类或者其子类. 在Sring 3.1之后,则推荐使用PropertySourcesPl ...

随机推荐

  1. AtCoder Grand Contest 017 题解

    A - Biscuits 题目: 给出 \(n\) 个物品,每个物品有一个权值. 问有多少种选取方式使得物品权值之和 \(\bmod\space 2\) 为 \(p\). \(n \leq 50\) ...

  2. 【Swift】 - 函数(Functions)总结 - 比较 与 C# 的异同

    1.0 函数的定义与调用( Defining and Calling Functions ) 习惯了C#了语法,看到下面的这样定义输入参数实在感到非常别扭,func 有点 Javascript的感觉, ...

  3. Python脚本MAC上双击执行,如何设置?

    1.在文件首行添加如下代码: 如果你想使用默认python版本执行当前的脚本,即python2,则需要添加 #!/usr/bin/env python # -*- coding: utf-8 -*- ...

  4. yield关键字用法与解析(C# 参考)

    yield 关键字向编译器指示它所在的方法是迭代器块. 编译器生成一个类来实现迭代器块中表示的行为. 在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值. 这是一个返 ...

  5. 微软发布WCF教程及大量示例

    继前面 微软公司发布Windows Communication Foundation (WCF)和Windows CardSpace的示例程序之后,微软今天又发布了WF的教程和大量示例,对于学习WF的 ...

  6. ubantu 虚拟机无法查看windows共享目录

    初学linux,安装好虚拟机,安装好ubantu系统,启动系统后无法查看windows共享目录. 原因是没有安装 vmware tools 教程地址:http://www.linuxidc.com/L ...

  7. [Client] looks like we got no XML document in....

    无wsdl方式应用webservice时,服务端包含了 include_once'inc/utility_all.php '一直报[Client] looks like we got no XML d ...

  8. bzoj 2784 时间流逝 —— 树上高斯消元

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2784 其实转移是一棵树,从根到一个点表示一种能量圈状态,当能量值大于 T 是停止,也就是成为 ...

  9. 集群/分布式环境下,Session处理策略

    前言 在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理.如果不做任何处理的话,用户将出现频繁登录的现象.比如集中中存在A.B两台服务器,用户在第一次访问网站是,Ngin ...

  10. TXT

    ANDRIOD: 192.168.199.119 data50803360 zc_3floor kk4836kk kahuna  kk1626kk