序:今天开始写一个算是我第一个系列的文章——高校手机签到系统。本系统结合我们学校自身的一些特点编写。这是我的毕业设计项目,写在这里算是给最后论文的时候一些点滴的记录。另外也想通过这个系列的文章找到一份工作,我知道许多大神都在博客园。我的邮箱:dugukuangshao@Gmail.com,在这个系列文章快完成的时候,我会将该项目开源并附上简历。
基本思路:根据每堂课唯一的guid标识加上当前时间,生成每5秒刷新一次的图片,再用手机客户端连接到校园网wifi再去扫描这张图片来签到。手机客户端还能从校园网上获得课程表。最后通过签到的数据还能分析课程的到课率、班级出勤率等。
由于教务处网站没有开放的接口,所以我自己实现了一个选课的系统,根据这个系统来查询课程表。选课网站构成了服务器端,采用.net平台,毕业设计自然要有些难度和挑战,所以手机客户端采用了android平台,也就是java。服务器端使用mvc4模式开发,mybatis.net作为orm的框架。
第一部分是Authority权限系统。涉及到domain层的Membership和Organization。如图所示:Membership下存在四个类:User用户、Profile详细资料、Role角色、UsersInRoles。Organization下存在三个类:Class班级、Institution机构、UsersInInstitutions。代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace signin.domain.Membership { public partial class User { public Guid UserId { get; set; } //创建时插入 public String UserName { get; set; } //创建时插入 public DateTime LastActivityDate { get; set; } //关闭窗口时插入 public String Password { get; set; } //创建时插入 public String PasswordSalt { get; set; } //创建时插入 public String Email { get; set; } //创建时插入 public String PasswordQuestion { get; set; } //创建时插入 public String PasswordAnswer { get; set; } //创建时插入 public bool IsApproved { get; set; } public bool IsIsLockedOut { get; set; } //密码错误次数超过限度时锁定 public DateTime CreateDate { get; set; } public DateTime LastLoginDate { get; set; } //关闭窗口时插入 public DateTime LastPasswordChangedDate { get; set; } //修改密码时更新 public DateTime LastLockoutDate { get; set; } //密码错误次数超过限度时锁定 public int FailedPasswordAttemptCount { get; set; } public DateTime FailedPasswordAttemptWindowStart { get; set; } public int FailedPasswordAnswerAttemptCount { get; set; } public DateTime FailedPasswordAnswerAttemptWindowStart { get; set; } public String Comment { get; set; } public bool IsOnline { get; set; } } public partial class User { public string ConfirmPassword { get; set; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using signin.domain.Common; namespace signin.domain.Membership { public class Profile : User,IPager { public string No { get; set; } // 创建时插入 public string Nickname { get; set; } // 创建时插入 public bool Gender { get; set; } // 创建时插入 public int Age { get; set; } // 非数据库字段 public DateTime Birthday { get; set; } //生日 创建时插入 public bool Calendar { get; set; } //历法 创建时插入 public string Nation { get; set; } //民族 创建时插入 public string Address { get; set; } public string PoliticalStatus { get; set; } //政治面貌 创建时插入 public string CellPhoneNumber { get; set; } //手机号码 创建时插入 public string IMSI { get; set; } //国际移动用户识别码 public string ImgLink { get; set; } public bool IsBound { get; set; } public bool IsUpdated { get; set; } #region Pager private int pageSize = 20; private int pageCount; public int CurrentPage { get; set; } public int PageSize { get { return pageSize; } set { pageSize = value; } } public int RecordCount { get; set; } public int PageCount { get { if (pageSize == 0) { return 0; } pageCount = RecordCount / pageSize; return (RecordCount % pageSize == 0) ? pageCount : ++pageCount; } } public int PageIndex { get; set; } #endregion } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace signin.domain.Membership { public class Role { public Guid RoleId { get; set; } public string RoleName { get; set; } public string Description { get; set; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace signin.domain.Membership { public class UsersInRoles { public Guid UserId { get; set; } public Guid RoleId { get; set; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace signin.domain.Organization { public class Institution { public Guid Id { get; set; } public string Name { get; set; } public string Type { get; set; } public Guid SuperiorId { get; set; } //上级机构Id public bool IsUpdated { get; set; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace signin.domain.Organization { public class Class:Institution { public string ClassCode { get; set; } public string Grade { get; set; } //年级 public int ClassNo { get; set; } //班号 public DateTime StartDate { get; set; } public DateTime GraduationDate { get; set; } public string Semesters { get; set; } public IList<Semester> Sems { get; set; } public int getSemesterNo(DateTime date) { foreach (Semester semester in Sems) { if (DateTime.Compare(date, semester.StartDate) > 0 && DateTime.Compare(date,semester.EndDate)<0) return semester.No; } return -1; } } public class Semester { public int No { get; set; } public DateTime StartDate { get; set; } //开学时间 public DateTime EndDate { get; set; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace signin.domain.Organization { public class UsersInInstitutions { public Guid UserId { get; set; } public Guid InstitutionId { get; set; } } }
Profile继承自User,为什么是继承?Profile和User难道不是Has-A的关系,怎么是IS-A?从User的属性看,User只是一个Account,用户在这个网站上的账户。而,Profile具有完整的一个Person的属性,所以谁属于谁还不好说。这里采用继承,是因为我在查询User的sql语句中采用了联合查询,User和Profile一起返回,在Dao层的方法里使用了泛型,sqlMapper即可根据需要返回我要的User或者Profile。这样做在性能上有多大的影响我也不是太清楚,只是图省事儿,学校的学生老师也不是太多。下面是Mapper的代码:
<?xml version="1.0" encoding="utf-8" ?> <sqlMap namespace="signin.domain" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <alias> <typeAlias alias="User" type="signin.domain.Membership.User,signin.domain"/> </alias> <statements> <insert id="InsertUser" parameterClass="User"> INSERT INTO [signin].[dbo].[User] ([User].[UserId],[UserName],[LastActivityDate],[Password],[PasswordSalt],[Email],[PasswordQuestion],[PasswordAnswer],[IsApproved],[IsLockedOut],[CreateDate],[LastLoginDate],[LastPasswordChangedDate],[LastLockoutDate],[FailedPasswordAttemptCount],[FailedPasswordAttemptWindowStart],[FailedPasswordAnswerAttemptCount],[FailedPasswordAnswerAttemptWindowStart],[Comment]) VALUES (#UserId#,#UserName#,getdate(),#Password#,#PasswordSalt#,#Email#,#PasswordQuestion#,#PasswordAnswer#,1,0,getdate(),getdate(),getdate(),CONVERT( datetime, ‘17540101‘, 112 ),0,CONVERT( datetime, ‘17540101‘, 112 ),0,CONVERT( datetime, ‘17540101‘, 112 ),#Comment#) </insert> <delete id="DeleteUser" parameterClass="User" resultClass="Int"> DELETE FROM [signin].[dbo].[User] WHERE [UserId] LIKE ‘%$UserId$%‘ <isNotEmpty prepend="OR" property="UserName">[UserName] = #UserName#</isNotEmpty> </delete> <select id="SelectUserById" patameterClass="String" resultClass="signin.domain.Membership.Profile"> SELECT [User].[UserId],[UserName],[LastActivityDate],[Password],[PasswordSalt],[Email],[PasswordQuestion],[PasswordAnswer],[IsApproved],[IsLockedOut],[CreateDate],[LastLoginDate],[LastPasswordChangedDate],[LastLockoutDate],[FailedPasswordAttemptCount],[FailedPasswordAttemptWindowStart],[FailedPasswordAnswerAttemptCount],[FailedPasswordAnswerAttemptWindowStart],[Comment],[IsOnline],[No],[Nickname],[Gender],[Birthday],[Calendar],[Nation],[Address],[PoliticalStatus],[CellPhoneNumber],[IMSI],[ImgLink],[IsBound] FROM [signin].[dbo].[User] LEFT JOIN [signin].[dbo].[Profile] ON [Profile].[UserId] = [User].[UserId] WHERE [User].[UserId] LIKE ‘%$UserId$%‘ </select> <select id="SelectUserByNo" patameterClass="String" resultClass="signin.domain.Membership.Profile"> SELECT [User].[UserId],[UserName],[LastActivityDate],[Password],[PasswordSalt],[Email],[PasswordQuestion],[PasswordAnswer],[IsApproved],[IsLockedOut],[CreateDate],[LastLoginDate],[LastPasswordChangedDate],[LastLockoutDate],[FailedPasswordAttemptCount],[FailedPasswordAttemptWindowStart],[FailedPasswordAnswerAttemptCount],[FailedPasswordAnswerAttemptWindowStart],[Comment],[IsOnline],[No],[Nickname],[Gender],[Birthday],[Calendar],[Nation],[Address],[PoliticalStatus],[CellPhoneNumber],[IMSI],[ImgLink],[IsBound] FROM [signin].[dbo].[User] LEFT JOIN [signin].[dbo].[Profile] ON [Profile].[UserId] = [User].[UserId] WHERE [User].[No] = #No# </select> <select id="SelectUserByUserName" patameterClass="String" resultClass="signin.domain.Membership.Profile"> SELECT [User].[UserId],[UserName],[LastActivityDate],[Password],[PasswordSalt],[Email],[PasswordQuestion],[PasswordAnswer],[IsApproved],[IsLockedOut],[CreateDate],[LastLoginDate],[LastPasswordChangedDate],[LastLockoutDate],[FailedPasswordAttemptCount],[FailedPasswordAttemptWindowStart],[FailedPasswordAnswerAttemptCount],[FailedPasswordAnswerAttemptWindowStart],[Comment],[IsOnline],[No],[Nickname],[Gender],[Birthday],[Calendar],[Nation],[Address],[PoliticalStatus],[CellPhoneNumber],[IMSI],[ImgLink],[IsBound] FROM [signin].[dbo].[User] LEFT JOIN [signin].[dbo].[Profile] ON [Profile].[UserId] = [User].[UserId] WHERE [User].[UserName] LIKE ‘%‘+#UserName#+‘%‘ </select> <select id="SelectUserByNickname" patameterClass="String" resultClass="signin.domain.Membership.Profile"> SELECT [User].[UserId],[UserName],[LastActivityDate],[Password],[PasswordSalt],[Email],[PasswordQuestion],[PasswordAnswer],[IsApproved],[IsLockedOut],[CreateDate],[LastLoginDate],[LastPasswordChangedDate],[LastLockoutDate],[FailedPasswordAttemptCount],[FailedPasswordAttemptWindowStart],[FailedPasswordAnswerAttemptCount],[FailedPasswordAnswerAttemptWindowStart],[Comment],[IsOnline],[No],[Nickname],[Gender],[Birthday],[Calendar],[Nation],[Address],[PoliticalStatus],[CellPhoneNumber],[IMSI],[ImgLink],[IsBound] FROM [signin].[dbo].[User] LEFT JOIN [signin].[dbo].[Profile] ON [Profile].[UserId] = [User].[UserId] WHERE [Profile].[Nickname] LIKE ‘%‘+#Nickname#+‘%‘ </select> <select id="SelectAllUsers" patameterClass="String" resultClass="signin.domain.Membership.Profile"> SELECT [User].[UserId],[UserName],[LastActivityDate],[Password],[PasswordSalt],[Email],[PasswordQuestion],[PasswordAnswer],[IsApproved],[IsLockedOut],[CreateDate],[LastLoginDate],[LastPasswordChangedDate],[LastLockoutDate],[FailedPasswordAttemptCount],[FailedPasswordAttemptWindowStart],[FailedPasswordAnswerAttemptCount],[FailedPasswordAnswerAttemptWindowStart],[Comment],[IsOnline],[No],[Nickname],[Gender],[Birthday],[Calendar],[Nation],[Address],[PoliticalStatus],[CellPhoneNumber],[IMSI],[ImgLink],[IsBound] FROM [signin].[dbo].[User] LEFT JOIN [signin].[dbo].[Profile] ON [Profile].[UserId] = [User].[UserId] </select> <select id="SelectAllStuffs" patameterClass="String" resultClass="signin.domain.Membership.Profile"> SELECT [User].[UserId],[UserName],[LastActivityDate],[Password],[PasswordSalt],[Email],[PasswordQuestion],[PasswordAnswer],[IsApproved],[IsLockedOut],[CreateDate],[LastLoginDate],[LastPasswordChangedDate],[LastLockoutDate],[FailedPasswordAttemptCount],[FailedPasswordAttemptWindowStart],[FailedPasswordAnswerAttemptCount],[FailedPasswordAnswerAttemptWindowStart],[Comment],[IsOnline],[No],[Nickname],[Gender],[Birthday],[Calendar],[Nation],[Address],[PoliticalStatus],[CellPhoneNumber],[IMSI],[ImgLink],[IsBound] FROM [signin].[dbo].[User] LEFT JOIN [signin].[dbo].[Profile] ON [Profile].[UserId] = [User].[UserId] WHERE [User].[UserId] IN (SELECT [UserId] FROM [signin].[dbo].[UsersInRoles] JOIN [signin].[dbo].[Role] ON [UsersInRoles].[RoleId]=[Role].[RoleId] WHERE [Role].[RoleName]=‘教职工‘) </select> <select id="SelectStuffsByPage" parameterClass="Profile" resultClass="signin.domain.Membership.Profile"> WITH LIST AS (SELECT [User].[UserId],[UserName],[LastActivityDate],[Password],[PasswordSalt],[Email],[PasswordQuestion],[PasswordAnswer],[IsApproved],[IsLockedOut],[CreateDate],[LastLoginDate],[LastPasswordChangedDate],[LastLockoutDate],[FailedPasswordAttemptCount],[FailedPasswordAttemptWindowStart],[FailedPasswordAnswerAttemptCount],[FailedPasswordAnswerAttemptWindowStart],[Comment],[IsOnline],[No],[Nickname],[Gender],[Birthday],[Calendar],[Nation],[Address],[PoliticalStatus],[CellPhoneNumber],[IMSI],[ImgLink],[IsBound],ROW_NUMBER() OVER(ORDER BY [No] asc) AS PageIndex,RecordCount = count(1) over() FROM [signin].[dbo].[User] LEFT JOIN [signin].[dbo].[Profile] ON [Profile].[UserId] = [User].[UserId] WHERE [User].[UserId] IN (SELECT [UserId] FROM [signin].[dbo].[UsersInRoles] JOIN [signin].[dbo].[Role] ON [UsersInRoles].[RoleId]=[Role].[RoleId] WHERE [Role].[RoleName]=‘教职工‘)) SELECT [UserId],[UserName],[LastActivityDate],[Password],[PasswordSalt],[Email],[PasswordQuestion],[PasswordAnswer],[IsApproved],[IsLockedOut],[CreateDate],[LastLoginDate],[LastPasswordChangedDate],[LastLockoutDate],[FailedPasswordAttemptCount],[FailedPasswordAttemptWindowStart],[FailedPasswordAnswerAttemptCount],[FailedPasswordAnswerAttemptWindowStart],[Comment],[IsOnline],[No],[Nickname],[Gender],[Birthday],[Calendar],[Nation],[Address],[PoliticalStatus],[CellPhoneNumber],[IMSI],[ImgLink],[IsBound],[PageIndex],[RecordCount] FROM LIST WHERE PageIndex BETWEEN (#CurrentPage#-1)*#PageSize#+1 AND #CurrentPage#*#PageSize# </select> <select id="SelectAllStudents" patameterClass="String" resultClass="signin.domain.Membership.Profile"> SELECT [User].[UserId],[UserName],[LastActivityDate],[Password],[PasswordSalt],[Email],[PasswordQuestion],[PasswordAnswer],[IsApproved],[IsLockedOut],[CreateDate],[LastLoginDate],[LastPasswordChangedDate],[LastLockoutDate],[FailedPasswordAttemptCount],[FailedPasswordAttemptWindowStart],[FailedPasswordAnswerAttemptCount],[FailedPasswordAnswerAttemptWindowStart],[Comment],[IsOnline],[No],[Nickname],[Gender],[Birthday],[Calendar],[Nation],[Address],[PoliticalStatus],[CellPhoneNumber],[IMSI],[ImgLink],[IsBound] FROM [signin].[dbo].[User] LEFT JOIN [signin].[dbo].[Profile] ON [Profile].[UserId] = [User].[UserId] WHERE [User].[UserId] IN (SELECT [UserId] FROM [signin].[dbo].[UsersInRoles] JOIN [signin].[dbo].[Role] ON [UsersInRoles].[RoleId]=[Role].[RoleId] WHERE [Role].[RoleName]=‘学生‘) </select> <select id="SelectStudentsByPage" parameterClass="Profile" resultClass="signin.domain.Membership.Profile"> WITH LIST AS (SELECT [User].[UserId],[UserName],[LastActivityDate],[Password],[PasswordSalt],[Email],[PasswordQuestion],[PasswordAnswer],[IsApproved],[IsLockedOut],[CreateDate],[LastLoginDate],[LastPasswordChangedDate],[LastLockoutDate],[FailedPasswordAttemptCount],[FailedPasswordAttemptWindowStart],[FailedPasswordAnswerAttemptCount],[FailedPasswordAnswerAttemptWindowStart],[Comment],[IsOnline],[No],[Nickname],[Gender],[Birthday],[Calendar],[Nation],[Address],[PoliticalStatus],[CellPhoneNumber],[IMSI],[ImgLink],[IsBound],ROW_NUMBER() OVER(ORDER BY [No] asc) AS PageIndex,RecordCount = count(1) over() FROM [signin].[dbo].[User] LEFT JOIN [signin].[dbo].[Profile] ON [Profile].[UserId] = [User].[UserId] WHERE [User].[UserId] IN (SELECT [UserId] FROM [signin].[dbo].[UsersInRoles] JOIN [signin].[dbo].[Role] ON [UsersInRoles].[RoleId]=[Role].[RoleId] WHERE [Role].[RoleName]=‘学生‘)) SELECT [UserId],[UserName],[LastActivityDate],[Password],[PasswordSalt],[Email],[PasswordQuestion],[PasswordAnswer],[IsApproved],[IsLockedOut],[CreateDate],[LastLoginDate],[LastPasswordChangedDate],[LastLockoutDate],[FailedPasswordAttemptCount],[FailedPasswordAttemptWindowStart],[FailedPasswordAnswerAttemptCount],[FailedPasswordAnswerAttemptWindowStart],[Comment],[IsOnline],[No],[Nickname],[Gender],[Birthday],[Calendar],[Nation],[Address],[PoliticalStatus],[CellPhoneNumber],[IMSI],[ImgLink],[IsBound],[PageIndex],[RecordCount] FROM LIST WHERE PageIndex BETWEEN (#CurrentPage#-1)*#PageSize#+1 AND #CurrentPage#*#PageSize# </select> <update id="ChangePassword" parameterClass="User" resultClass="Int"> UPDATE [signin].[dbo].[User] SET [Password] = #Password#,[PasswordSalt] = #PasswordSalt#,[LastPasswordChangedDate] = getdate() WHERE [UserId] LIKE ‘%$UserId$%‘ <isNotEmpty prepend="OR" property="UserName">[UserName] = #UserName#</isNotEmpty> </update> <update id="UpdateLoginRecord" parameterClass="User" resultClass="Int"> UPDATE [signin].[dbo].[User] SET [LastActivityDate] = getdate(),[LastLoginDate] = getdate() WHERE [UserId] LIKE ‘%$UserId$%‘ <isNotEmpty prepend="OR" property="UserName">[UserName] = #UserName#</isNotEmpty> </update> <update id="UpdateFailedPasswordRecord" parameterClass="User" resultClass="Int"> UPDATE [signin].[dbo].[User] SET [FailedPasswordAttemptCount] = [FailedPasswordAttemptCount]+1,[FailedPasswordAttemptWindowStart] = getdate() WHERE [UserId] LIKE ‘%$UserId$%‘ <isNotEmpty prepend="OR" property="UserName">[UserName] = #UserName#</isNotEmpty> </update> <update id="UpdateFailedPasswordAnswerRecord" parameterClass="User" resultClass="Int"> UPDATE [signin].[dbo].[User] SET [FailedPasswordAnswerAttemptCount] = [FailedPasswordAnswerAttemptCount]+1,[FailedPasswordAnswerAttemptWindowStart] = getdate() WHERE [UserId] LIKE ‘%$UserId$%‘ <isNotEmpty prepend="OR" property="UserName">[UserName] = #UserName#</isNotEmpty> </update> <select id="IsUserNameExists" patameterClass="String" resultClass="Int"> SELECT COUNT([UserName]) FROM [signin].[dbo].[User] WHERE [UserName] = #UserName# </select> <select id="IsEmailExists" patameterClass="String" resultClass="Int"> SELECT COUNT([Email]) FROM [signin].[dbo].[User] WHERE [Email] LIKE ‘%‘+#Email#+‘%‘ </select> <select id="GetInstitutionsForUser" parameterClass="String" resultClass="signin.domain.Organization.Institution"> SELECT Institution.* FROM [Signin].[dbo].[Institution] JOIN [Signin].[dbo].[PeopleInInstitutions] ON [PeopleInInstitutions].InstitutionId = [Institution].Id JOIN [Signin].[dbo].[User] ON [User].UserId = [PeopleInInstitutions].UserId WHERE [User].UserName = #UserName# </select> <select id="GetClassesForUser" parameterClass="String" resultClass="signin.domain.Organization.Institution"> SELECT [Institution].[Id],[ClassCode],[Nickname],[SuperiorId],[Grade],[ClassNo],[StartDate],[GraduationDate],[Semesters] FROM [signin].[dbo].[Class] JOIN [signin].[dbo].[Institution] ON [Institution].Id = [Class].Id JOIN [Signin].[dbo].[PeopleInInstitutions] ON [PeopleInInstitutions].InstitutionId = [Institution].Id JOIN [Signin].[dbo].[User] ON [User].UserId = [PeopleInInstitutions].UserId WHERE [User].UserName = #UserName# </select> </statements> </sqlMap>
<?xml version="1.0" encoding="utf-8" ?> <sqlMap namespace="signin.domain" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <alias> <typeAlias alias="Profile" type="signin.domain.Membership.Profile,signin.domain"/> </alias> <statements> <insert id="AddProfileToUser" parameterClass="Profile"> INSERT IntO [signin].[dbo].[Profile] ([UserId],[No],[Nickname],[Gender],[Birthday],[Calendar],[Nation],[Address],[PoliticalStatus],[CellPhoneNumber],[IMSI],[ImgLink],[IsBound]) VALUES (#UserId#,#No#,#Nickname#,#Gender#,#Birthday#,#Calendar#,#Nation#,#Address#,#PoliticalStatus#,#CellPhoneNumber#,#IMSI#,#ImgLink#,0) </insert> <delete id="RemoveProfileForUser" parameterClass="Profile" resultClass="Int"> DELETE FROM [signin].[dbo].[Profile] WHERE [UserId] LIKE ‘%$UserId$%‘ <isNotEmpty prepend="OR" property="No">[No] = #No#</isNotEmpty> </delete> <update id="UpdateProfileForUser" parameterClass="Profile" resultClass="Int"> UPDATE [signin].[dbo].[Profile] SET [IsUpdated] = 1 <isNotEmpty prepend="," property="No">[No] = #No# </isNotEmpty> <isNotEmpty prepend="," property="Nickname">[Nickname] = #Nickname# </isNotEmpty> <isEqual prepend="," property="Gender" compareValue="true">[Gender] = #Gender#</isEqual> <isEqual prepend="," property="Gender" compareValue="false">[Gender] = #Gender#</isEqual> <isNotNull prepend="," property="Birthday">[Birthday] = #Birthday#</isNotNull> <isEqual prepend="," property="Calendar" compareValue="true">[Calendar] = #Calendar#</isEqual> <isEqual prepend="," property="Calendar" compareValue="false">[Calendar] = #Calendar#</isEqual> <isNotEmpty prepend="," property="Nation">[Nation] = #Nation#</isNotEmpty> <isNotEmpty prepend="," property="Address">[Address] = #Address#</isNotEmpty> <isNotEmpty prepend="," property="PoliticalStatus">[PoliticalStatus] = #PoliticalStatus#</isNotEmpty> <isNotEmpty prepend="," property="CellPhoneNumber">[CellPhoneNumber] = #CellPhoneNumber#</isNotEmpty> <isNotEmpty prepend="," property="IMSI">[IMSI] = #IMSI#</isNotEmpty> <isNotEmpty prepend="," property="ImgLink">[ImgLink] = #ImgLink#</isNotEmpty> <isEqual prepend="," property="IsBound" compareValue="true">[IsBound] = #IsBound#</isEqual> <isEqual prepend="," property="IsBound" compareValue="false">[IsBound] = #IsBound#</isEqual> WHERE [UserId] LIKE ‘%$UserId$%‘ </update> <select id="IsProfileNoExists" patameterClass="String" resultClass="Boolean"> SELECT COUNT([No]) FROM [signin].[dbo].[Profile] WHERE [No] = #No# </select> <select id="IsProfileIMSIExists" patameterClass="String" resultClass="Boolean"> SELECT COUNT([IMSI]) FROM [signin].[dbo].[Profile] WHERE [IMSI] LIKE = #IMSI# </select> </statements> </sqlMap>
<?xml version="1.0" encoding="utf-8" ?> <sqlMap namespace="signin.domain" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <alias> <typeAlias alias="Role" type="signin.domain.Membership.Role,signin.domain"/> </alias> <statements> <insert id="CreateRole" parameterClass="Role"> INSERT IntO [signin].[dbo].[Role] ([RoleId],[RoleName],[Description]) VALUES (#RoleId#,#RoleName#,#Description#) </insert> <delete id="DeleteRole" parameterClass="Role" resultClass="Int"> DELETE FROM [signin].[dbo].[Role] WHERE [RoleId] LIKE ‘%$RoleId$%‘ <isNotEmpty prepend="OR" property="RoleName">[RoleName] = #RoleName#</isNotEmpty> </delete> <insert id="AddUserToRole" parameterClass="System.Collections.IDictionary"> INSERT IntO [signin].[dbo].[UsersInRoles] ([UserId],[RoleId]) SELECT [UserId],[RoleId] FROM [signin].[dbo].[User],[signin].[dbo].[Role] WHERE [UserName] = #UserName# AND [RoleName] = #RoleName# </insert> <select id="GetUsersInRole" parameterClass="String" resultClass="signin.domain.Membership.User"> SELECT [signin].[dbo].[User].* FROM [signin].[dbo].[Role] JOIN [signin].[dbo].[UsersInRoles] ON [Role].RoleId = [UsersInRoles].RoleId JOIN [signin].[dbo].[User] ON [UsersInRoles].UserId = [User].UserId WHERE [Role].RoleName = #RoleName# </select> <select id="GetRolesForUser" parameterClass="String" resultClass="Role"> SELECT [signin].[dbo].[Role].* FROM [signin].[dbo].[Role] JOIN [signin].[dbo].[UsersInRoles] ON [Role].RoleId = [UsersInRoles].RoleId JOIN [signin].[dbo].[User] ON [UsersInRoles].UserId = [User].UserId WHERE [User].UserName = #UserName# </select> <select id="IsUserInRole" parameterClass="System.Collections.IDictionary" resultClass="Boolean"> SELECT COUNT([UserName]) FROM [signin].[dbo].[Role] JOIN [signin].[dbo].[UsersInRoles] ON [Role].RoleId = [UsersInRoles].RoleId JOIN [signin].[dbo].[User] ON [UsersInRoles].UserId = [User].UserId WHERE [Role].RoleName = #RoleName# AND [User].[UserName] = #UserName# </select> <delete id="RemoveUserFromRole" parameterClass="System.Collections.IDictionary" resultClass="Int"> DELETE FROM [signin].[dbo].[UsersInRoles] FROM [signin].[dbo].[Role] JOIN [signin].[dbo].[UsersInRoles] ON [Role].RoleId = [UsersInRoles].RoleId JOIN [signin].[dbo].[User] ON [UsersInRoles].UserId = [User].UserId WHERE [Role].RoleName = #RoleName# AND [User].[UserName] = #UserName# </delete> <select id="RoleExists" parameterClass="String" resultClass="Int"> SELECT COUNT([RoleName]) FROM [signin].[dbo].[Role] WHERE [RoleName] = #RoleName# </select> <select id="GetAllRoles" resultClass="Role"> SELECT * FROM [signin].[dbo].[Role] </select> </statements> </sqlMap>
<?xml version="1.0" encoding="utf-8" ?> <sqlMap namespace="signin.domain" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <alias> <typeAlias alias="Institution" type="signin.domain.Organization.Institution,signin.domain"/> <typeAlias alias="UsersInInstitutions" type="signin.domain.Organization.UsersInInstitutions,signin.domain"/> </alias> <statements> <insert id="InsertInstitution" parameterClass="Institution"> INSERT INTO [signin].[dbo].[Institution] ([Id],[Name],[Type] <isNotEqual prepend="," property="SuperiorId" compareValue="00000000-0000-0000-0000-000000000000">[SuperiorId]</isNotEqual>) VALUES (#Id#,#Name#,#Type# <isNotEqual prepend="," property="SuperiorId" compareValue="00000000-0000-0000-0000-000000000000">#SuperiorId#</isNotEqual>) </insert> <delete id="DeleteInstitution" parameterClass="Institution" resultClass="Int"> DELETE FROM [signin].[dbo].[Institution] WHERE [Id] LIKE ‘%$Id$%‘ <isNotEmpty prepend="OR" property="Name">[Name] = #Name#</isNotEmpty> </delete> <update id="UpdateInstitution" parameterClass="Institution" resultClass="Int"> UPDATE [signin].[dbo].[Institution] SET [IsUpdated] = 1 <isNotEmpty prepend="," property="Name">[Name] = #Name#</isNotEmpty> <isNotEmpty prepend="," property="Type">[Type] = #Type#</isNotEmpty> <isNotEqual prepend="," property="SuperiorId" compareValue="00000000-0000-0000-0000-000000000000">SuperiorId = #SuperiorId#</isNotEqual>WHERE [Id] LIKE ‘%$Id$%‘ </update> <select id="SelectInstitutionById" parameterClass="string" resultClass="Institution"> SELECT [Id],[Name],[Type],[SuperiorId] FROM [signin].[dbo].[Institution] WHERE [Id] LIKE ‘%$Id$%‘ </select> <select id="SelectInstitutionByName" parameterClass="string" resultClass="Institution"> SELECT [Id],[Name],[Type],[SuperiorId] FROM [signin].[dbo].[Institution] WHERE [Name] LIKE ‘%‘+#Name#+‘%‘ </select> <select id="SelectInstitutionsByType" parameterClass="string" resultClass="Institution"> SELECT [Id],[Name],[Type],[SuperiorId] FROM [signin].[dbo].[Institution] WHERE [Type] LIKE ‘%‘+#Type#+‘%‘ </select> <select id="SelectInstitutionsBySuperiorId" parameterClass="string" resultClass="Institution"> SELECT [Id],[Name],[Type],[SuperiorId] FROM [signin].[dbo].[Institution] WHERE [SuperiorId] LIKE ‘%$SuperiorId$%‘ </select> <select id="SelectAllInstitutions" resultClass="Institution"> SELECT [Id],[Name],[Type],[SuperiorId] FROM [signin].[dbo].[Institution] </select> <select id="IsInstitutionNameExists" parameterClass="string" resultClass="Int"> SELECT COUNT([Name]) FROM [signin].[dbo].[Institution] WHERE [Name] = #Name# </select> <insert id="AddUserToInstitution" parameterClass="System.Collections.IDictionary"> INSERT INTO [signin].[dbo].[UsersInInstitutions] ([UserId],[InstitutionId]) SELECT [UserId],[Id] FROM [signin].[dbo].[Profile],[signin].[dbo].[Institution] WHERE [signin].[dbo].[Profile].[No] = #UserNo# AND [signin].[dbo].[Institution].[Name] = #InstitutionName# </insert> <select id="GetStuffsInInstitution" parameterClass="string" resultClass="signin.domain.Membership.Profile"> SELECT [signin].[dbo].[Profile].* FROM [signin].[dbo].[Institution] JOIN [signin].[dbo].[UsersInInstitutions] ON [UsersInInstitutions].[InstitutionId] = [Institution].[Id] JOIN [signin].[dbo].[Profile] ON [Profile].[UserId] =[UsersInInstitutions].[UserId] JOIN [signin].[dbo].[UsersInRoles] ON [UsersInRoles].[UserId] = [Profile].[UserId] JOIN [signin].[dbo].[Role] ON [Role].[RoleId] = [UsersInRoles].[RoleId] WHERE [Institution].[Name] = #Name# AND [Role].[RoleName] = ‘教职工‘ </select> <select id="GetStudentsInClass" parameterClass="String" resultClass="signin.domain.Membership.Profile"> SELECT [signin].[dbo].[Profile].* FROM [signin].[dbo].[Institution] JOIN [signin].[dbo].[UsersInInstitutions] ON [UsersInInstitutions].[InstitutionId] = [Institution].[Id] JOIN [signin].[dbo].[Profile] ON [Profile].[UserId] =[UsersInInstitutions].[UserId] JOIN [signin].[dbo].[UsersInRoles] ON [UsersInRoles].[UserId] = [Profile].[UserId] JOIN [signin].[dbo].[Role] ON [Role].[RoleId] = [UsersInRoles].[RoleId] WHERE [Institution].[Name] = #Name# AND [Role].[RoleName] = ‘学生‘ </select> <select id="IsUserInInstitution" parameterClass="System.Collections.IDictionary" resultClass="Boolean"> SELECT COUNT([signin].[dbo].[Profile].[Nickname]) FROM [signin].[dbo].[Institution] JOIN [signin].[dbo].[StuffsInInstitutions] ON [Institution].Id = [StuffsInInstitutions].InstitutionId JOIN [signin].[dbo].[Profile] ON [StuffsInInstitutions].UserId = [Profile].UserId WHERE [Institution].Name = #InstitutionName# AND [Profile].[No] = #UserNo# </select> <delete id="RemoveUserFromInstitution" parameterClass="System.Collections.IDictionary" resultClass="Int"> DELETE FROM [signin].[dbo].[StuffsInInstitutions] FROM [signin].[dbo].[Institution] JOIN [signin].[dbo].[StuffsInInstitutions] ON [Institution].Id = [StuffsInInstitutions].InstitutionId JOIN [signin].[dbo].[Profile] ON [StuffsInInstitutions].UserId = [Profile].UserId WHERE [Institution].Name = #InstitutionName# AND [Profile].[No] = #UserNo# </delete> </statements> </sqlMap>
<?xml version="1.0" encoding="utf-8" ?> <sqlMap namespace="signin.domain" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <alias> <typeAlias alias="Class" type="signin.domain.Organization.Class,signin.domain"/> </alias> <statements> <insert id="InsertClass" parameterClass="Class"> INSERT INTO [signin].[dbo].[Institution] ([Id],[Name],[Type] <isNotEqual prepend="," property="SuperiorId" compareValue="00000000-0000-0000-0000-000000000000">[SuperiorId]</isNotEqual>) VALUES (#Id#,#Name#,‘班级‘ <isNotEqual prepend="," property="SuperiorId" compareValue="00000000-0000-0000-0000-000000000000">#SuperiorId#</isNotEqual>) INSERT INTO [signin].[dbo].[Class] ([Id],[ClassCode],[Grade],[ClassNo] <isNotEqual prepend="," property="StartDate" compareValue="0001/1/1 0:00:00">[StartDate]</isNotEqual> <isNotEqual prepend="," property="GraduationDate" compareValue="0001/1/1 0:00:00">[GraduationDate]</isNotEqual> <isNotEmpty prepend="," property="Semester">[Semesters]</isNotEmpty>) VALUES (#Id#,#ClassCode#,#Grade#,#ClassNo# <isNotEqual prepend="," property="StartDate" compareValue="0001/1/1 0:00:00">#StartDate#</isNotEqual> <isNotEqual prepend="," property="GraduationDate" compareValue="0001/1/1 0:00:00">#GraduationDate#</isNotEqual> <isNotEmpty prepend="," property="Semester">#Semesters#</isNotEmpty>) </insert> <delete id="DeleteClass" parameterClass="Class" resultClass="Int"> DELETE FROM [signin].[dbo].[Institution],[signin].[dbo].[Class] JOIN [signin].[dbo].[Class] ON [Institution].Id = [Class].Id WHERE [Institution].Id LIKE ‘%$Id$%‘ <isNotEmpty prepend="OR" property="Name">[Institution].[Name] = #Name#</isNotEmpty> <isNotEmpty prepend="OR" property="No">[Class].[ClassCode] = #ClassCode#</isNotEmpty> </delete> <update id="UpdateClass" parameterClass="Class" resultClass="Int"> UPDATE [signin].[dbo].[Institution] SET [IsUpdated] = 1 <isNotEmpty prepend="," property="Name">[Name] = #Name#</isNotEmpty> <isNotEmpty prepend="," property="Type">[Type] = #Type#</isNotEmpty> <isNotEqual prepend="," property="SuperiorId" compareValue="00000000-0000-0000-0000-000000000000">SuperiorId = #SuperiorId#</isNotEqual>WHERE [Id] LIKE ‘%$Id$%‘ UPDATE [signin].[dbo].[Class] SET [IsUpdated] = 1 <isNotEmpty prepend="," property="No">[ClassCode] = #ClassCode#</isNotEmpty> <isNotEmpty prepend="," property="Grade">[Grade] = #Grade#</isNotEmpty> <isNotNull prepend="," property="ClassNo">[ClassNo] = #ClassNo#</isNotNull> <isNotEqual prepend="," property="StartDate" compareValue="0001/1/1 0:00:00">[StartDate] = #StartDate#</isNotEqual> <isNotEqual prepend="," property="GraduationDate" compareValue="0001/1/1 0:00:00">[GraduationDate] = #GraduationDate#</isNotEqual> <isNotEmpty prepend="," property="Semester">[Semesters] = #Semesters#</isNotEmpty> WHERE [Id] LIKE ‘%$Id$%‘ </update> <select id="SelectClassById" parameterClass="string" resultClass="Class"> SELECT [Institution].[Id],[ClassCode],[Name],[SuperiorId],[Grade],[ClassNo],[StartDate],[GraduationDate],[Semesters] FROM [signin].[dbo].[Class] JOIN [signin].[dbo].[Institution] ON [Institution].Id = [Class].Id WHERE [Institution].[Id] LIKE ‘%$Id$%‘ </select> <select id="SelectClassByNo" parameterClass="string" resultClass="Class"> SELECT [Institution].[Id],[ClassCode],[Name],[SuperiorId],[Grade],[ClassNo],[StartDate],[GraduationDate],[Semesters] FROM [signin].[dbo].[Class] JOIN [signin].[dbo].[Institution] ON [Institution].Id = [Class].Id WHERE [Class].[ClassCode] = #ClassCode# </select> <select id="SelectClassByName" parameterClass="string" resultClass="Class"> SELECT [Institution].[Id],[ClassCode],[Name],[SuperiorId],[Grade],[ClassNo],[StartDate],[GraduationDate],[Semesters] FROM [signin].[dbo].[Class] JOIN [signin].[dbo].[Institution] ON [Institution].Id = [Class].Id WHERE [Institution].[Name] LIKE ‘%‘+#Name#+‘%‘ </select> <select id="SelectClassesBySuperiorId" parameterClass="string" resultClass="Class"> SELECT [Institution].[Id],[ClassCode],[Name],[SuperiorId],[Grade],[ClassNo],[StartDate],[GraduationDate],[Semesters] FROM [signin].[dbo].[Class] JOIN [signin].[dbo].[Institution] ON [Institution].Id = [Class].Id WHERE [Institution].[SuperiorId] LIKE ‘%$SuperiorId$%‘ </select> <select id="SelectAllClasses" resultClass="Class"> SELECT [Id],[ClassCode],[Name],[SuperiorId],[Grade],[ClassNo],[StartDate],[GraduationDate],[Semesters] FROM [signin].[dbo].[Class] JOIN [signin].[dbo].[Institution] ON [Institution].Id = [Class].Id </select> <select id="IsClassCodeExists" parameterClass="string" resultClass="Int"> SELECT COUNT([ClassCode]) FROM [signin].[dbo].[Class] WHERE [ClassCode] = #ClassCode# </select> <select id="IsClassNameExists" parameterClass="string" resultClass="Int"> SELECT COUNT([Name]) FROM [signin].[dbo].[Institution] WHERE [Name] = #Name# </select> </statements> </sqlMap>
Dao层,先说说Mybatis怎么回事儿。做Jsp的时候接触到了Mybatis,原来开发.net的时候orm都是自带的ef,后来知道了Mybatis也有.net的版本才开始使用。两者性能方面没有比较过,只是ef的linq查询个人觉得还是没sql方便。Mybatis配置:
<?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"/> </settings> <providers embedded="signin.dao.providers.config,signin.dao"/> <!-- Database connection information --> <database> <provider name="sqlServer2008"/> <dataSource name="iBatisNet" connectionString="data source=.;database=signin;user id=root;password=123456;Connect Timeout=2000"/> </database> <sqlMaps> <sqlMap embedded="signin.domain.Membership.Mapper.Profile.xml,signin.domain" /> <sqlMap embedded="signin.domain.Membership.Mapper.Role.xml,signin.domain" /> <sqlMap embedded="signin.domain.Membership.Mapper.User.xml,signin.domain" /> <sqlMap embedded="signin.domain.Organization.Mapper.Class.xml,signin.domain" /> <sqlMap embedded="signin.domain.Organization.Mapper.Institution.xml,signin.domain" /> <sqlMap embedded="signin.domain.CurriculumSchedule.Mapper.Course.xml,signin.domain" /> <sqlMap embedded="signin.domain.CurriculumSchedule.Mapper.Selection.xml,signin.domain" /> <sqlMap embedded="signin.domain.CurriculumSchedule.Mapper.Schedule.xml,signin.domain" /> <sqlMap embedded="signin.domain.Signin.Mapper.Sign.xml,signin.domain" /> </sqlMaps> </sqlMapConfig>
MybatisUtil:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using IBatisNet.DataMapper; using IBatisNet.DataMapper.Configuration; namespace signin.dao { public abstract class MybatisUtil { private static ISqlMapper sqlMapper; public static ISqlMapper SqlMapper { get { return MybatisUtil.sqlMapper; } set { MybatisUtil.sqlMapper = value; } } static MybatisUtil() { string path = ""; String AssemblyPath = System.Reflection.Assembly.GetExecutingAssembly().CodeBase; String AssemblyDir = System.IO.Path.GetDirectoryName(AssemblyPath); AssemblyDir = AssemblyDir.Replace("file:\\", ""); path = AssemblyDir + "\\"; try { DomSqlMapBuilder builder = new DomSqlMapBuilder(); String filePath=path+ @"SqlMap.config"; sqlMapper = builder.Configure(filePath); } catch (Exception ex) { throw new Exception("SqlMap.config文件错误", ex); } } } }
各类对应的数据访问接口:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using signin.domain.Membership; using Web.Util; using signin.domain.Organization; using System.Web.Script.Serialization; namespace signin.dao.Membership { public class UserDao:MybatisUtil { #region 增 /// <summary> /// 添加一个用户 /// </summary> /// <param name="user">用户实例</param> /// <returns>返回用户Id</returns> public Guid Insert(User user) { user.UserId = Guid.NewGuid(); string userName = user.UserName; SecUtility.CheckParameter(ref userName, true, true, true, 0, "user.UserName"); if (IsUserNameExists(userName)) throw new Exception("there is a user named " + userName); if (IsEmailExists(user.Email)) throw new Exception("there is a user whose email is:" + user.Email); SqlMapper.Insert("InsertUser", user); return user.UserId; } #endregion #region 删 /// <summary> /// 删除一个用户 /// </summary> /// <param name="user">用户实例</param> /// <returns>返回受影响行数</returns> public int Delete(User user) { if (user.UserId == Guid.Empty) { if (user.UserName == null) { throw new ArgumentNullException("user.UserId"); throw new ArgumentNullException("user.UserName"); } else { user.UserName = user.UserName.Trim(); if (user.UserName.Length < 1) { throw new ArgumentNullException("user.UserId"); throw new ArgumentException("user.UserName_can_not_be_empty"); } } } return (int)SqlMapper.Delete("DeleteUser", user); } /// <summary> /// 删除一个用户 /// </summary> /// <param name="userId">用户Id</param> /// <returns>返回受影响行数</returns> public int Delete(Guid userId) { if (userId == Guid.Empty) throw new ArgumentNullException("userId"); User user = new User { UserId = userId }; return Delete(user); } /// <summary> /// 删除一个用户 /// </summary> /// <param name="userName">用户名</param> /// <returns>返回受影响行数</returns> public int Delete(string userName) { SecUtility.CheckParameter(ref userName, true, true, true, 0, "userName"); User user = new User { UserName = userName }; return Delete(user); } #endregion #region 查 /// <summary> /// 通过用户Id得到一个用户实例 /// </summary> /// <param name="userId">用户Id</param> /// <returns>User</returns> public T SelectById<T>(Guid userId) where T : User { if (userId == Guid.Empty) throw new ArgumentNullException("userId"); return SqlMapper.QueryForObject<T>("SelectUserById", userId.ToString()); } /// <summary> /// 通过编号获得用户实例 /// </summary> /// <param name="no">编号</param> /// <returns></returns> public IList<T> SelectByNo<T>(string no) where T : User { SecUtility.CheckParameter(ref no, true, true, true, 0, "no"); return SqlMapper.QueryForList<T>("SelectUserByUserNo", no); } /// <summary> /// 通过用户名获得用户实例 /// </summary> /// <param name="userName">用户名</param> /// <returns></returns> public IList<T> SelectByName<T>(string userName) where T : User { SecUtility.CheckParameter(ref userName, true, true, true, 0, "userName"); return SqlMapper.QueryForList<T>("SelectUserByUserName", userName); } /// <summary> /// 通过昵称获得用户实例 /// </summary> /// <param name="nickname">昵称</param> /// <returns></returns> public IList<T> SelectByNickname<T>(string nickname) where T : User { SecUtility.CheckParameter(ref nickname, true, true, true, 0, "nickname"); return SqlMapper.QueryForList<T>("SelectUserByNickname", nickname); } /// <summary> /// 得到所用的用户实例 /// </summary> /// <returns></returns> public IList<T> SelectAll<T>() where T : User { return SqlMapper.QueryForList<T>("SelectAllUsers", null); } /// <summary> /// SelectAllStuffs /// </summary> /// <returns></returns> public IList<T> SelectAllStuffs<T>() where T : User { return SqlMapper.QueryForList<T>("SelectAllStuffs", null); } /// <summary> /// SelectStuffsByPage /// </summary> /// <returns></returns> public IList<T> SelectStuffsByPage<T>(Profile profile) where T : User { return SqlMapper.QueryForList<T>("SelectStuffsByPage", profile); } /// <summary> /// SelectAllStudents /// </summary> /// <returns></returns> public IList<T> SelectAllStudents<T>() where T : User { return SqlMapper.QueryForList<T>("SelectAllStudents", null); } /// <summary> /// SelectStudentsByPage /// </summary> /// <returns></returns> public IList<T> SelectStudentsByPage<T>(Profile profile) where T : User { return SqlMapper.QueryForList<T>("SelectStudentsByPage", profile); } #endregion #region 改 /// <summary> /// 修改密码 /// </summary> /// <param name="user">用户实例</param> /// <returns>返回受影响行数</returns> public int ChangePassword(User user) { if (user.UserId == Guid.Empty) { if (user.UserName == null) { throw new ArgumentNullException("user.UserId"); throw new ArgumentNullException("user.UserName"); } else { user.UserName = user.UserName.Trim(); if (user.UserName.Length < 1) { throw new ArgumentNullException("user.UserId"); throw new ArgumentException("user.UserName_can_not_be_empty"); } } } return (int)SqlMapper.Update("ChangePassword", user); } /// <summary> /// 修改密码 /// </summary> /// <param name="userId">用户Id</param> /// <param name="password">密码</param> /// <param name="passwordSalt">密钥</param> /// <returns>返回受影响行数</returns> public int ChangePassword(Guid userId,string password,string passwordSalt) { if (userId == Guid.Empty) throw new ArgumentNullException("userId"); SecUtility.CheckPasswordParameter(ref password, 0, "password"); SecUtility.CheckPasswordParameter(ref passwordSalt, 0, "passwordSalt"); User user = new User { UserId = userId, Password = password, PasswordSalt = passwordSalt }; return ChangePassword(user); } /// <summary> /// 修改密码 /// </summary> /// <param name="userName">用户名</param> /// <param name="password">密码</param> /// <param name="passwordSalt">密钥</param> /// <returns>返回受影响行数</returns> public int ChangePassword(string userName, string password, string passwordSalt) { SecUtility.CheckParameter(ref userName, true, true, true, 0, "userName"); SecUtility.CheckPasswordParameter(ref password, 0, "password"); SecUtility.CheckPasswordParameter(ref passwordSalt, 0, "passwordSalt"); User user = new User { UserName=userName, Password = password, PasswordSalt = passwordSalt }; return ChangePassword(user); } /// <summary> /// 登录记录 /// </summary> /// <param name="user">用户实例</param> /// <returns>返回受影响行数</returns> public int UpdateLoginRecord(User user) { if (user.UserId == Guid.Empty) { if (user.UserName == null) { throw new ArgumentNullException("user.UserId"); throw new ArgumentNullException("user.UserName"); } else { user.UserName = user.UserName.Trim(); if (user.UserName.Length < 1) { throw new ArgumentNullException("user.UserId"); throw new ArgumentException("user.UserName_can_not_be_empty"); } } } return (int)SqlMapper.Update("UpdateLoginRecord", user); } /// <summary> /// 登录记录 /// </summary> /// <param name="userId">用户Id</param> /// <returns>返回受影响行数</returns> public int UpdateLoginRecord(Guid userId) { if (userId == Guid.Empty) throw new ArgumentNullException("userId"); User user = new User { UserId = userId }; return UpdateLoginRecord(user); } /// <summary> /// 登录记录 /// </summary> /// <param name="userName">用户名</param> /// <returns>返回受影响行数</returns> public int UpdateLoginRecord(string userName) { SecUtility.CheckParameter(ref userName, true, true, true, 0, "userName"); User user = new User { UserName=userName }; return UpdateLoginRecord(user); } /// <summary> /// 密码错误记录 /// </summary> /// <param name="user">用户实例</param> /// <returns>返回受影响行数</returns> public int UpdateFailedPasswordRecord(User user) { if (user.UserId == Guid.Empty) { if (user.UserName == null) { throw new ArgumentNullException("user.UserId"); throw new ArgumentNullException("user.UserName"); } else { user.UserName = user.UserName.Trim(); if (user.UserName.Length < 1) { throw new ArgumentNullException("user.UserId"); throw new ArgumentException("user.UserName_can_not_be_empty"); } } } return (int)SqlMapper.Update("UpdateFailedPasswordRecord", user); } /// <summary> /// 密码错误记录 /// </summary> /// <param name="userId">用户Id</param> /// <returns>返回受影响行数</returns> public int UpdateFailedPasswordRecord(Guid userId) { if (userId == Guid.Empty) throw new ArgumentNullException("userId"); User user = new User { UserId = userId }; return (int)UpdateFailedPasswordRecord(user); } /// <summary> /// 密码错误记录 /// </summary> /// <param name="userId">用户名</param> /// <returns>返回受影响行数</returns> public int UpdateFailedPasswordRecord(string userName) { SecUtility.CheckParameter(ref userName, true, true, true, 0, "userName"); User user = new User { UserName=userName }; return (int)UpdateFailedPasswordRecord(user); } /// <summary> /// 密保答案错误记录 /// </summary> /// <param name="user">用户实例</param> /// <returns>返回受影响行数</returns> public int UpdateFailedPasswordAnswerRecord(User user) { if (user.UserId == Guid.Empty) { if (user.UserName == null) { throw new ArgumentNullException("user.UserId"); throw new ArgumentNullException("user.UserName"); } else { user.UserName = user.UserName.Trim(); if (user.UserName.Length < 1) { throw new ArgumentNullException("user.UserId"); throw new ArgumentException("user.UserName_can_not_be_empty"); } } } return (int)SqlMapper.Update("UpdateFailedPasswordAnswerRecord", user); } /// <summary> /// 密保答案错误记录 /// </summary> /// <param name="userId">用户Id</param> /// <returns>返回受影响行数</returns> public int UpdateFailedPasswordAnswerRecord(Guid userId) { if (userId == Guid.Empty) throw new ArgumentNullException("userId"); User user = new User { UserId = userId }; return (int)UpdateFailedPasswordAnswerRecord(user); } /// <summary> /// 密保答案错误记录 /// </summary> /// <param name="userId">用户名</param> /// <returns>返回受影响行数</returns> public int UpdateFailedPasswordAnswerRecord(string userName) { SecUtility.CheckParameter(ref userName, true, true, true, 0, "userName"); User user = new User { UserName=userName }; return (int)UpdateFailedPasswordAnswerRecord(user); } #endregion #region 唯一性判断 /// <summary> /// 用户名是否存在 /// </summary> /// <param name="userName">用户名</param> /// <returns>存在返回true,否则返回false</returns> public bool IsUserNameExists(string userName) { SecUtility.CheckParameter(ref userName, true, true, true, 0, "userName"); if (SqlMapper.QueryForObject<int>("IsUserNameExists", userName) > 0) return true; else return false; } /// <summary> /// 电子邮箱是否存在 /// </summary> /// <param name="userName">电子邮箱</param> /// <returns>存在返回true,否则返回false</returns> public bool IsEmailExists(string email) { SecUtility.CheckParameter(ref email, true, true, true, 0, "email"); if (SqlMapper.QueryForObject<int>("IsEmailExists", email) > 0) return true; else return false; } #endregion #region 机构查询 public IList<Institution> GetInstitutionsForUser(string userName) { SecUtility.CheckParameter(ref userName, true, true, true, 0, "userName"); return SqlMapper.QueryForList<Institution>("GetInstitutionsForUser", userName); } public IList<Class> GetClassesForUser(string userName) { SecUtility.CheckParameter(ref userName, true, true, true, 0, "userName"); IList<Class> classes = SqlMapper.QueryForList<Class>("GetClassesForUser", userName); JavaScriptSerializer ser = new JavaScriptSerializer(); foreach (Class cls in classes) { if (cls.Semesters != null) cls.Sems = ser.Deserialize<IList<Semester>>(cls.Semesters); else { cls.Sems = new List<Semester>(); for (int i = 0; i < 8; i++) { Semester semester = new Semester(); semester.No = i + 1; cls.Sems.Add(semester); } } } return classes; } #endregion } }
如上public T SelectById<T>(Guid userId) where T : User等查询方法使用了泛型来在我需要的时候返回User或者Profile。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using signin.domain.Membership; using System.Collections; using Web.Util; namespace signin.dao.Membership { public class RoleDao:MybatisUtil { #region 增 /// <summary> /// 创建一个角色 /// </summary> /// <param name="role">角色实例</param> public Guid CreateRole(Role role) { role.RoleId = Guid.NewGuid(); string roleName = role.RoleName; SecUtility.CheckParameter(ref roleName, true, true, true, 0, "role.RoleName"); if (RoleExists(roleName)) throw new Exception("there is a role named " + roleName); SqlMapper.Insert("CreateRole", role); return role.RoleId; } /// <summary> /// 创建一个角色 /// </summary> /// <param name="roleName">角色名</param> public Guid CreateRole(string roleName) { SecUtility.CheckParameter(ref roleName, true, true, true, 0, "roleName"); Role role = new Role { RoleName = roleName }; return CreateRole(role); } #endregion #region 删 /// <summary> /// 删除角色 /// </summary> /// <param name="role">角色实例</param> /// <returns>返回受影响行数</returns> public int DeleteRole(Role role) { if (role.RoleId == Guid.Empty) { if (role.RoleName == null) { throw new ArgumentNullException("role.RoleId"); throw new ArgumentNullException("role.RoleName"); } else { role.RoleName = role.RoleName.Trim(); if (role.RoleName.Length < 1) { throw new ArgumentNullException("role.RoleId"); throw new ArgumentException("role.RoleName_can_not_be_empty"); } } } return (int)SqlMapper.Delete("DeleteRole", role); } /// <summary> /// 删除角色 /// </summary> /// <param name="roleId">角色Id</param> /// <returns>返回受影响行数</returns> public int DeleteRole(Guid roleId) { if (roleId == Guid.Empty) throw new ArgumentNullException("roleId"); Role role = new Role { RoleId = roleId }; return DeleteRole(role); } /// <summary> /// 删除角色 /// </summary> /// <param name="roleName">角色名</param> /// <returns>返回受影响行数</returns> public int DeleteRole(string roleName) { SecUtility.CheckParameter(ref roleName, true, true, true, 0, "roleName"); Role role = new Role { RoleName = roleName }; return DeleteRole(role); } #endregion #region 查 /// <summary> /// 获得所有角色实例 /// </summary> /// <returns></returns> public IList<Role> GetAllRoles() { return SqlMapper.QueryForList<Role>("GetAllRoles", null); } #endregion #region 唯一性判断 /// <summary> /// 某角色是否包含某用户 /// </summary> /// <param name="userName">用户名</param> /// <param name="roleName">角色名</param> /// <returns></returns> public bool IsUserInRole(string userName, string roleName) { SecUtility.CheckParameter(ref userName, true, true, true, 0, "userName"); SecUtility.CheckParameter(ref roleName, true, true, true, 0, "roleName"); IDictionary<string, object> dict = new Dictionary<string, object>(); dict.Add("UserName", userName); dict.Add("RoleName", roleName); if (SqlMapper.QueryForObject<int>("IsUserInRole", dict) > 0) return true; else return false; } /// <summary> /// 某角色是否存在 /// </summary> /// <param name="roleName">用户名</param> /// <returns></returns> public bool RoleExists(string roleName) { SecUtility.CheckParameter(ref roleName, true, true, true, 0, "roleName"); if (SqlMapper.QueryForObject<int>("RoleExists", roleName) > 0) return true; else return false; } #endregion #region 角色中的用户 /// <summary> /// 添加一个用户到角色 /// </summary> /// <param name="userName">用户名</param> /// <param name="roleName">角色名</param> public void AddUserToRole(string userName, string roleName) { SecUtility.CheckParameter(ref userName, true, true, true, 0, "userName"); SecUtility.CheckParameter(ref roleName, true, true, true, 0, "roleName"); IDictionary<string, object> dict = new Dictionary<string,object>(); dict.Add("UserName", userName); dict.Add("RoleName", roleName); SqlMapper.Insert("AddUserToRole", dict); } /// <summary> /// 从某角色中移出某用户 /// </summary> /// <param name="userName">用户名</param> /// <param name="roleName">角色名</param> /// <returns>返回受影响行数</returns> public int RemoveUserFromRole(string userName, string roleName) { SecUtility.CheckParameter(ref userName, true, true, true, 0, "userName"); SecUtility.CheckParameter(ref roleName, true, true, true, 0, "roleName"); IDictionary<string, object> dict = new Dictionary<string, object>(); dict.Add("UserName", userName); dict.Add("RoleName", roleName); return (int)SqlMapper.Delete("RemoveUserFromRole", dict); } /// <summary> /// 获得某角色包含的用户 /// </summary> /// <param name="roleName">角色名</param> /// <returns></returns> public IList<User> GetUsersInRole(string roleName) { SecUtility.CheckParameter(ref roleName, true, true, true, 0, "roleName"); return SqlMapper.QueryForList<User>("GetUsersInRole", roleName); } /// <summary> /// 获得某角色包含的用户 /// </summary> /// <param name="roleName">角色名</param> /// <returns></returns> public string[] GetUserNamesInRole(string roleName) { SecUtility.CheckParameter(ref roleName, true, true, true, 0, "roleName"); return (from model in SqlMapper.QueryForList<User>("GetUsersInRole", roleName) select model.UserName).ToArray(); } /// <summary> /// 获得某用户拥有的角色 /// </summary> /// <param name="userName">用户名</param> /// <returns></returns> public IList<Role> GetRolesForUser(string userName) { SecUtility.CheckParameter(ref userName, true, true, true, 0, "userName"); return SqlMapper.QueryForList<Role>("GetRolesForUser", userName); } /// <summary> /// 获得某用户拥有的角色 /// </summary> /// <param name="userName">用户名</param> /// <returns></returns> public string[] GetRoleNamesForUser(string userName) { SecUtility.CheckParameter(ref userName, true, true, true, 0, "userName"); return (from model in SqlMapper.QueryForList<Role>("GetRolesForUser", userName) select model.RoleName).ToArray(); } #endregion } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using signin.domain.Membership; using Web.Util; namespace signin.dao.Membership { public class ProfileDao:MybatisUtil { #region 增 /// <summary> /// AddProfileToUser /// </summary> /// <param name="profile">Profile</param> /// <returns>返回UserId</returns> public Guid AddProfileToUser(Profile profile) { string no = profile.No; SecUtility.CheckParameter(ref no, true, true, true, 0, "profile.No"); if (IsNoExists(no)) throw new Exception("there is a User whose No is:" + no); SqlMapper.Insert("AddProfileToUser", profile); return profile.UserId; } #endregion #region 删 /// <summary> /// RemoveProfileForUser /// </summary> /// <param name="person">Profile</param> /// <returns>返回受影响行数</returns> public int RemoveProfileForUser(Profile profile) { if (profile.UserId == Guid.Empty) { if (profile.No == null) { throw new ArgumentNullException("profile.UserId"); throw new ArgumentNullException("profile.No"); } else { profile.No = profile.No.Trim(); if (profile.No.Length < 1) { throw new ArgumentNullException("profile.UserId"); throw new ArgumentException("profile.No_can_not_be_empty"); } } } return (int)SqlMapper.Delete("RemoveProfileForUser", profile); } /// <summary> /// RemoveProfileForUser /// </summary> /// <param name="userId">用户Id</param> /// <returns>返回受影响行数</returns> public int RemoveProfileForUser(Guid userId) { if (userId == Guid.Empty) throw new ArgumentNullException("userId"); Profile profile = new Profile { UserId = userId }; return RemoveProfileForUser(profile); } /// <summary> /// RemoveProfileForUser /// </summary> /// <param name="no">no</param> /// <returns>返回受影响行数</returns> public int RemoveProfileForUser(string no) { SecUtility.CheckParameter(ref no, true, true, true, 0, "no"); Profile profile = new Profile { No = no }; return RemoveProfileForUser(profile); } #endregion #region 改 /// <summary> /// UpdateProfileForUser /// </summary> /// <param name="profile">Profile</param> /// <returns>返回受影响行数</returns> public int UpdateProfileForUser(Profile profile) { if (profile.UserId == Guid.Empty) throw new ArgumentNullException("profile.UserId"); return (int)SqlMapper.Update("UpdateProfileForUser", profile); } #endregion #region 唯一性判断 /// <summary> /// 编号是否存在 /// </summary> /// <param name="no">编号</param> /// <returns>存在返回true,否则返回false</returns> public bool IsNoExists(string no) { SecUtility.CheckParameter(ref no, true, true, true, 0, "no"); if (SqlMapper.QueryForObject<int>("IsProfileNoExists", no) > 0) return true; else return false; } /// <summary> /// IMSI是否存在 /// </summary> /// <param name="imsi">IMSI</param> /// <returns>存在返回true,否则返回false</returns> public bool IsIMSIExists(string imsi) { SecUtility.CheckParameter(ref imsi, true, true, true, 0, "imsi"); if (SqlMapper.QueryForObject<int>("IsProfileNoExists", imsi) > 0) return true; else return false; } #endregion } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using signin.domain.Organization; using signin.domain.Membership; using Web.Util; namespace signin.dao.Organization { public class InstitutionDao:MybatisUtil { #region 增 /// <summary> /// 插入一个Institution实例 /// </summary> /// <param name="institution">Institution实例</param> /// <returns>返回Id</returns> public Guid Insert(Institution institution) { institution.Id = Guid.NewGuid(); string institutionName = institution.Name; SecUtility.CheckParameter(ref institutionName, true, true, true, 0, "institution.Name"); if (IsNameExists(institutionName)) throw new Exception("there is a institution named " + institutionName); SqlMapper.Insert("InsertInstitution", institution); return institution.Id; } #endregion #region 删 /// <summary> /// 删除一个Institution实例 /// </summary> /// <param name="institution">Institution实例</param> /// <returns>返回受影响的行数</returns> public int Delete(Institution institution) { if (institution.Id == Guid.Empty) { if (institution.Name == null) { throw new ArgumentNullException("institution.Id"); throw new ArgumentNullException("institution.Name"); } else { institution.Name = institution.Name.Trim(); if (institution.Name.Length < 1) { throw new ArgumentNullException("institution.Id"); throw new ArgumentException("institution.Name_can_not_be_empty"); } } } return (int)SqlMapper.Delete("DeleteInstitution", institution); } /// <summary> /// 删除一个Institution实例 /// </summary> /// <param name="id">InstitutionId</param> /// <returns>返回受影响的行数</returns> public int Delete(Guid id) { if (id == Guid.Empty) throw new ArgumentNullException("id"); Institution institution = new Institution { Id=id }; return Delete(institution); } /// <summary> /// 删除一个Institution实例 /// </summary> /// <param name="name">InstitutionName</param> /// <returns>返回受影响的行数</returns> public int Delete(string name) { SecUtility.CheckParameter(ref name, true, true, true, 0, "name"); Institution institution = new Institution { Name=name }; return Delete(institution); } #endregion #region 改 /// <summary> /// 更新一个Institution实例 /// </summary> /// <param name="institution">Institution实例</param> /// <returns>返回受影响的行数</returns> public int Update(Institution institution) { if (institution.Id == Guid.Empty) throw new ArgumentNullException("institution.Id"); return (int)SqlMapper.Update("UpdateInstitution", institution); } #endregion #region 查 /// <summary> /// 通过Id获得一个Institution实例 /// </summary> /// <param name="id">InstitutionId</param> /// <returns>Institution实例</returns> public Institution SelectById(Guid id) { if (id == Guid.Empty) throw new ArgumentNullException("id"); return SqlMapper.QueryForObject<Institution>("SelectInstitutionById", id.ToString()); } /// <summary> /// 通过Name获得Institution实例 /// </summary> /// <param name="name">InstitutionName</param> /// <returns></returns> public IList<Institution> SelectByName(string name) { SecUtility.CheckParameter(ref name, true, true, true, 0, "name"); return SqlMapper.QueryForList<Institution>("SelectInstitutionByName", name); } /// <summary> /// 通过SuperiorId获得Institution实例 /// </summary> /// <param name="superiorId"></param> /// <returns></returns> public IList<Institution> SelectBySuperiorId(Guid superiorId) { if (superiorId == Guid.Empty) throw new ArgumentNullException("SuperiorId"); return SqlMapper.QueryForList<Institution>("SelectInstitutionsBySuperiorId", superiorId.ToString()); } /// <summary> /// 根据类型获得Institution实例 /// </summary> /// <returns></returns> public IList<Institution> SelectByType(string type) { SecUtility.CheckParameter(ref type, true, true, true, 0, "type"); return SqlMapper.QueryForList<Institution>("SelectInstitutionsByType", type); } /// <summary> /// 获得所有Institution实例 /// </summary> /// <returns></returns> public IList<Institution> SelectAll() { return SqlMapper.QueryForList<Institution>("SelectAllInstitutions", null); } #endregion #region 唯一性查询 /// <summary> /// InstitutionName是否存在 /// </summary> /// <param name="name">InstitutionName</param> /// <returns></returns> public bool IsNameExists(string name) { SecUtility.CheckParameter(ref name, true, true, true, 0, "name"); if (SqlMapper.QueryForObject<int>("IsInstitutionNameExists", name) > 0) return true; else return false; } #endregion #region 机构中的用户 /// <summary> /// 添加一个User到机构 /// </summary> /// <param name="userNo">编号</param> /// <param name="institutionName">机构名字</param> public void AddUserToInstitution(string userNo, string institutionName) { SecUtility.CheckParameter(ref userNo, true, true, true, 0, "userNo"); SecUtility.CheckParameter(ref institutionName, true, true, true, 0, "institutionName"); IDictionary<string, object> dict = new Dictionary<string, object>(); dict.Add("UserNo", userNo); dict.Add("InstitutionName", institutionName); SqlMapper.Insert("AddUserToInstitution", dict); } /// <summary> /// 获得机构中的职工 /// </summary> /// <param name="institutionName">机构名字</param> /// <returns></returns> public IList<Profile> GetStuffsInInstitution(string institutionName) { SecUtility.CheckParameter(ref institutionName, true, true, true, 0, "institutionName"); return SqlMapper.QueryForList<Profile>("GetStuffsInInstitution", institutionName); } /// <summary> /// 获得班级中的学生 /// </summary> /// <param name="institutionName">班级名字</param> /// <returns></returns> public IList<Profile> GetStudentsInClass(string institutionName) { SecUtility.CheckParameter(ref institutionName, true, true, true, 0, "institutionName"); return SqlMapper.QueryForList<Profile>("GetStudentsInClass", institutionName); } /// <summary> /// 机构中是否存在某User /// </summary> /// <param name="institutionName">机构名字</param> /// <param name="userNo">编号</param> /// <returns></returns> public bool IsUserInInstitution(string institutionName, string userNo) { SecUtility.CheckParameter(ref institutionName, true, true, true, 0, "institutionName"); SecUtility.CheckParameter(ref userNo, true, true, true, 0, "userNo"); IDictionary<string, object> dict = new Dictionary<string, object>(); dict.Add("InstitutionName", institutionName); dict.Add("UserNo", userNo); if (SqlMapper.QueryForObject<int>("IsStuffInInstitution", dict) > 0) return true; else return false; } /// <summary> /// 从机构中移出某User /// </summary> /// <param name="institutionName">机构名字</param> /// <param name="userNo">编号</param> /// <returns></returns> public int RemoveUserFromInstitution(string institutionName, string userNo) { SecUtility.CheckParameter(ref institutionName, true, true, true, 0, "institutionName"); SecUtility.CheckParameter(ref userNo, true, true, true, 0, "userNo"); IDictionary<string, object> dict = new Dictionary<string, object>(); dict.Add("InstitutionName", institutionName); dict.Add("UserNo", userNo); return (int)SqlMapper.Delete("RemovePersonFromInstitution", dict); } #endregion } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using signin.domain.Organization; using Web.Util; using System.Web.Script.Serialization; using signin.domain.Membership; namespace signin.dao.Organization { public class ClassDao:MybatisUtil { #region 增 /// <summary> /// 插入一个Class /// </summary> /// <param name="cls">Class实例</param> /// <returns>返回Id</returns> public Guid Insert(Class cls) { cls.Id = Guid.NewGuid(); string classNo = cls.ClassCode; SecUtility.CheckParameter(ref classNo, true, true, true, 0, "cls.ClassCode"); if (IsClassCodeExists(classNo)) throw new Exception("there is a class whose No is:" + classNo); string className = cls.Name; SecUtility.CheckParameter(ref className, true, true, true, 0, "cls.Name"); if (IsNameExists(className)) throw new Exception("there is a class named " + className); SqlMapper.Insert("InsertClass", cls); return cls.Id; } #endregion #region 删 /// <summary> /// 删除一个Class /// </summary> /// <param name="cls">Class实例</param> /// <returns>返回受影响行数</returns> public int Delete(Class cls) { if (cls.Id == Guid.Empty) { if (cls.ClassCode == null) { if (cls.Name == null) { throw new ArgumentNullException("cls.Id"); throw new ArgumentNullException("cls.ClassCode"); throw new ArgumentNullException("cls.Name"); } else { cls.Name = cls.Name.Trim(); if (cls.Name.Length < 1) { throw new ArgumentNullException("cls.Id"); throw new ArgumentNullException("cls.ClassCode"); throw new ArgumentException("cls.Name_can_not_be_empty"); } } } else { cls.ClassCode = cls.ClassCode.Trim(); if (cls.ClassCode.Length < 1) { if (cls.Name == null) { throw new ArgumentNullException("cls.Id"); throw new ArgumentException("cls.ClassCode_can_not_be_empty"); throw new ArgumentNullException("cls.Name"); } else { cls.Name = cls.Name.Trim(); if (cls.Name.Length < 1) { throw new ArgumentNullException("cls.Id"); throw new ArgumentException("cls.ClassCode_can_not_be_empty"); throw new ArgumentException("cls.Name_can_not_be_empty"); } } } } } return (int)SqlMapper.Delete("DeleteClass", cls); } /// <summary> /// 删除一个Class /// </summary> /// <param name="id">ClassId</param> /// <returns>返回受影响行数</returns> public int Delete(Guid id) { if (id == Guid.Empty) throw new ArgumentNullException("id"); Class cls = new Class { Id = id }; return Delete(cls); } /// <summary> /// 删除一个Class /// </summary> /// <param name="name">Class编号</param> /// <returns>返回受影响行数</returns> public int Delete(string classCode) { SecUtility.CheckParameter(ref classCode, true, true, true, 0, "ClassCode"); Class cls = new Class { ClassCode = classCode }; return Delete(cls); } #endregion #region 改 /// <summary> /// 更新一个Class /// </summary> /// <param name="cls">Class实例</param> /// <returns>返回受影响行数</returns> public int Update(Class cls) { if (cls.Id == Guid.Empty) throw new ArgumentNullException("cls.Id"); return (int)SqlMapper.Update("UpdateClass", cls); } #endregion #region 查 /// <summary> /// 通过ClassId获得一个Class实例 /// </summary> /// <param name="id">ClassId</param> /// <returns>Class实例</returns> public Class SelectById(Guid id) { if (id == Guid.Empty) throw new ArgumentNullException("id"); Class cls = SqlMapper.QueryForObject<Class>("SelectClassById", id.ToString()); JavaScriptSerializer ser = new JavaScriptSerializer(); if (cls.Semesters != null) cls.Sems = ser.Deserialize<IList<Semester>>(cls.Semesters); else { cls.Sems = new List<Semester>(); for (int i = 0; i < 8; i++) { Semester semester = new Semester(); semester.No = i + 1; cls.Sems.Add(semester); } } return cls; } /// <summary> /// 通过Class编号获得一个Class实例 /// </summary> /// <param name="no">Class编号</param> /// <returns>Class实例</returns> public Class SelectByNo(string no) { SecUtility.CheckParameter(ref no, true, true, true, 0, "no"); Class cls = SqlMapper.QueryForObject<Class>("SelectClassByNo", no); JavaScriptSerializer ser = new JavaScriptSerializer(); if (cls.Semesters != null) cls.Sems = ser.Deserialize<IList<Semester>>(cls.Semesters); else { cls.Sems = new List<Semester>(); for (int i = 0; i < 8; i++) { Semester semester = new Semester(); semester.No = i + 1; cls.Sems.Add(semester); } } return cls; } /// <summary> /// 通过ClassName获得Class实例 /// </summary> /// <param name="name">ClassName</param> /// <returns></returns> public IList<Class> SelectByName(string name) { SecUtility.CheckParameter(ref name, true, true, true, 0, "name"); IList<Class> classes = SqlMapper.QueryForList<Class>("SelectClassByName", name); JavaScriptSerializer ser = new JavaScriptSerializer(); foreach (Class cls in classes) { if (cls.Semesters != null) cls.Sems = ser.Deserialize<IList<Semester>>(cls.Semesters); else { cls.Sems = new List<Semester>(); for (int i = 0; i < 8; i++) { Semester semester = new Semester(); semester.No = i + 1; cls.Sems.Add(semester); } } } return classes; } /// <summary> /// 通过majorId获得Class实例 /// </summary> /// <param name="majorId">majorId</param> /// <returns></returns> public IList<Class> SelectByMajorId(Guid majorId) { if (majorId == Guid.Empty) throw new ArgumentNullException("majorId"); IList<Class> classes = SqlMapper.QueryForList<Class>("SelectClassesBySuperiorId", majorId.ToString()); JavaScriptSerializer ser = new JavaScriptSerializer(); foreach (Class cls in classes) { if (cls.Semesters != null) cls.Sems = ser.Deserialize<IList<Semester>>(cls.Semesters); else { cls.Sems = new List<Semester>(); for (int i = 0; i < 8; i++) { Semester semester = new Semester(); semester.No = i + 1; cls.Sems.Add(semester); } } } return classes; } /// <summary> /// 获得所有Class实例 /// </summary> /// <returns></returns> public IList<Class> SelectAll() { IList<Class> classes = SqlMapper.QueryForList<Class>("SelectAllClasses", null); JavaScriptSerializer ser = new JavaScriptSerializer(); foreach (Class cls in classes) { if (cls.Semesters != null) cls.Sems = ser.Deserialize<IList<Semester>>(cls.Semesters); else { cls.Sems = new List<Semester>(); for (int i = 0; i < 8; i++) { Semester semester = new Semester(); semester.No = i + 1; cls.Sems.Add(semester); } } } return classes; } #endregion #region 唯一性查询 /// <summary> /// Class编号是否存在 /// </summary> /// <param name="no">Class编号</param> /// <returns></returns> public bool IsClassCodeExists(string no) { SecUtility.CheckParameter(ref no, true, true, true, 0, "no"); if (SqlMapper.QueryForObject<int>("IsClassCodeExists", no) > 0) return true; else return false; } /// <summary> /// ClassName是否存在 /// </summary> /// <param name="name">ClassName</param> /// <returns></returns> public bool IsNameExists(string name) { SecUtility.CheckParameter(ref name, true, true, true, 0, "name"); if (SqlMapper.QueryForObject<int>("IsClassNameExists", name) > 0) return true; else return false; } #endregion #region 班级中的用户 /// <summary> /// 添加一个User到机构 /// </summary> /// <param name="userNo">User号</param> /// <param name="className">班级名字</param> public void AddUserToClass(string userNo, string className) { SecUtility.CheckParameter(ref userNo, true, true, true, 0, "userNo"); SecUtility.CheckParameter(ref className, true, true, true, 0, "className"); IDictionary<string, object> dict = new Dictionary<string, object>(); dict.Add("UserNo", userNo); dict.Add("InstitutionName", className); SqlMapper.Insert("AddUserToInstitution", dict); } /// <summary> /// 获得班级中所有的学生 /// </summary> /// <param name="className">班级名</param> /// <returns></returns> public IList<Profile> GetStudentsInClass(string className) { SecUtility.CheckParameter(ref className, true, true, true, 0, "className"); return SqlMapper.QueryForList<Profile>("GetStudentsInClass", className); } /// <summary> /// 机构中是否存在某User /// </summary> /// <param name="className">班级名字</param> /// <param name="userNo">User号</param> /// <returns></returns> public bool IsUserInClass(string className, string userNo) { SecUtility.CheckParameter(ref className, true, true, true, 0, "className"); SecUtility.CheckParameter(ref userNo, true, true, true, 0, "userNo"); IDictionary<string, object> dict = new Dictionary<string, object>(); dict.Add("InstitutionName", className); dict.Add("UserNo", userNo); if (SqlMapper.QueryForObject<int>("IsStuffInInstitution", dict) > 0) return true; else return false; } /// <summary> /// 从机构中移出某User /// </summary> /// <param name="className">班级名字</param> /// <param name="userNo">User号</param> /// <returns></returns> public int RemoveUserFromClass(string className, string userNo) { SecUtility.CheckParameter(ref className, true, true, true, 0, "className"); SecUtility.CheckParameter(ref userNo, true, true, true, 0, "userNo"); IDictionary<string, object> dict = new Dictionary<string, object>(); dict.Add("InstitutionName", className); dict.Add("UserNo", userNo); return (int)SqlMapper.Delete("RemoveProfileFromInstitution", dict); } #endregion } }
限于时间和篇幅第一篇就在这里结束了,权限系统的后台部分就是如此。明天更新前台部分的内容。如前所述,完整的项目稍后才能开源,在这之前有需要的请邮箱联系,欢迎大家和我来一起完成这个签到系统。
高校手机签到系统——第一部分Authority权限系统(上)
原文:http://www.cnblogs.com/DKSL/p/3548869.html