首页 > 移动平台 > 详细

高校手机签到系统——第一部分Authority权限系统(上)

时间:2014-02-14 22:54:17      阅读:657      评论:0      收藏:0      [点我收藏+]

  序:今天开始写一个算是我第一个系列的文章——高校手机签到系统。本系统结合我们学校自身的一些特点编写。这是我的毕业设计项目,写在这里算是给最后论文的时候一些点滴的记录。另外也想通过这个系列的文章找到一份工作,我知道许多大神都在博客园。我的邮箱:dugukuangshao@Gmail.com,在这个系列文章快完成的时候,我会将该项目开源并附上简历。

      基本思路:根据每堂课唯一的guid标识加上当前时间,生成每5秒刷新一次的图片,再用手机客户端连接到校园网wifi再去扫描这张图片来签到。手机客户端还能从校园网上获得课程表。最后通过签到的数据还能分析课程的到课率、班级出勤率等。

      由于教务处网站没有开放的接口,所以我自己实现了一个选课的系统,根据这个系统来查询课程表。选课网站构成了服务器端,采用.net平台,毕业设计自然要有些难度和挑战,所以手机客户端采用了android平台,也就是java。服务器端使用mvc4模式开发,mybatis.net作为orm的框架。

  第一部分是Authority权限系统。涉及到domain层的Membership和Organization。如图所示:bubuko.com,布布扣Membership下存在四个类:User用户、Profile详细资料、Role角色、UsersInRoles。Organization下存在三个类:Class班级、Institution机构、UsersInInstitutions。代码如下:

bubuko.com,布布扣
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; }
    }
}
User.cs
bubuko.com,布布扣
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
    }
}
Profile.cs
bubuko.com,布布扣
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; }
    }
}
Role.cs
bubuko.com,布布扣
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; }
    }
}
UsersInRoles.cs
bubuko.com,布布扣
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; }
    }
}
Institution.cs
bubuko.com,布布扣
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; }
    }
}
Class.cs
bubuko.com,布布扣
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; }
    }
}
UsersInInstitutions.cs

 

Profile继承自User,为什么是继承?Profile和User难道不是Has-A的关系,怎么是IS-A?从User的属性看,User只是一个Account,用户在这个网站上的账户。而,Profile具有完整的一个Person的属性,所以谁属于谁还不好说。这里采用继承,是因为我在查询User的sql语句中采用了联合查询,User和Profile一起返回,在Dao层的方法里使用了泛型,sqlMapper即可根据需要返回我要的User或者Profile。这样做在性能上有多大的影响我也不是太清楚,只是图省事儿,学校的学生老师也不是太多。下面是Mapper的代码:

bubuko.com,布布扣
<?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>
User.Xml
bubuko.com,布布扣
<?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>
Profile.xml
bubuko.com,布布扣
<?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>
Role.xml
bubuko.com,布布扣
<?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>
Institution.xml
bubuko.com,布布扣
<?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>
Class.xml

  Dao层,先说说Mybatis怎么回事儿。做Jsp的时候接触到了Mybatis,原来开发.net的时候orm都是自带的ef,后来知道了Mybatis也有.net的版本才开始使用。两者性能方面没有比较过,只是ef的linq查询个人觉得还是没sql方便。Mybatis配置:

bubuko.com,布布扣
<?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>
SqlMapper.config

MybatisUtil:

bubuko.com,布布扣
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);
            }
        }
    }
}
MybatisUtil.cs

各类对应的数据访问接口:

bubuko.com,布布扣
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
    }
} 
bubuko.com,布布扣

如上public T SelectById<T>(Guid userId) where T : User等查询方法使用了泛型来在我需要的时候返回User或者Profile。

bubuko.com,布布扣
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
    }
}
RoleDao.cs
bubuko.com,布布扣
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
    }
}
ProfileDao.cs
bubuko.com,布布扣
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
    }
}
InstitutionDao.cs
bubuko.com,布布扣
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
    }
}
ClassDao.cs

  

  限于时间和篇幅第一篇就在这里结束了,权限系统的后台部分就是如此。明天更新前台部分的内容。如前所述,完整的项目稍后才能开源,在这之前有需要的请邮箱联系,欢迎大家和我来一起完成这个签到系统。

高校手机签到系统——第一部分Authority权限系统(上)

原文:http://www.cnblogs.com/DKSL/p/3548869.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!