selectKey 这个标签主要用于Insert数据时不支持主键自动生成的问题

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper  
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  <!--    
  如果使用xml的方式进行接口映射  namespace的值必须是接口的全路径 
  -->  
 <mapper namespace="com.et.mybatis.selectKey.SqlKeyMapper">
	 <insert id="insertUser" parameterType="User">
	  <!-- selectKey 这个标签主要用于Insert数据时不支持主键自动生成的问题 
		如果在oracle中 应该写的SQL语句是  select 序列.nextval from dual  
		如果在mysql 中应该写的SQL语句是    select max(主键列)+1 from 对应表
		☆  ☆  ☆  SelectKey需要注意order属性。
   		MySQL一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。
   		Oracle这样取序列的情况,需要设置为before,否则会报错。          
   	-->  
	 <selectKey keyProperty="id" order="BEFORE" resultType="int">
              select id.nextval from dual
              select max(id)+1 from arcticle  
    </selectKey>  
    insert into arcticle(id,title,content,userid) values(#{id},#{title},#{content},#{userid})  
    </insert>  
</mapper>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
概况: 1、 适用于.net项目,基于MVC架构模式 2、 按照数据库结构生成基础开发类库 3、 数据支持SQL2000和SQL2005两个版本 4、 类库为分层框架工厂模式,依次分为:数据库交互层(SqlHelper)、业务实体层(Model)、数据处理层(DAL)、数据接口层(IDAL)、数据工厂层(DALFactory)、业务层(BLL)6层 5、 业务实体层与业务层直接与UI交互 6、 生成类库的同系统自动生成相应的存储过程脚本(Proc文件夹)。 一、配置 打开SQLHelper.cs文件,将相应的数据库连接配置信息添加到配置文件中即可。 二、存储过程 打开Proc文件夹,将Proc.sql在相应SQL命令执行窗口中打开,然后执行即可。 二、业务实体层 实体类名为数据表名称(首字母大写)加上Model后缀组成,类属性为相应字段名称(首字母大写),包含相应构造函数。 三、业务层 以下介绍以CalendarNotes表为例,主键字段为id。 1、插入数据 public string Insert(CalendarNotesModel model) 插入单条数据,即业务实体对象 public string Insert(List list) 插入多条数据,即泛型集合(集合元素为业务实体对象) public string Insert(CalendarNotesModel model, object objTrans) 在指定事务控制中插入单条数据 public string Insert(List list, object objTrans) 在指定事务控制中插入多条数据 2、插入并返回所插入的记录的自增ID 适用范围为相应数据表中存在标识字段,可同步获取到新插入数据的标识字段值。 public string Insert_Identity(CalendarNotesModel model) 插入单条数据 public string Insert_Identity(CalendarNotesModel model, object objTrans) 在指定事务控制中插入单条数据 3、更新数据 public string Update(CalendarNotesModel model) 更新单条数据,使用过程是:先取出相应业务实体,然后修改字段值(非主键字段),然后调用此方法更新数据库。 public string Update(CalendarNotesModel model, object objTrans) 在指定事务控制中更新单条数据,调用过程同上。 4、删除数据 public string Delete(string id) 根据主键删除单条数据。 public string Delete(CalendarNotesModel model) 根据指定条件批量删除数据,调用过程:先实例化一个CalendarNotesModel对象,然后设置删除条件(即给相应属性字段赋值),然后调用此方法。 public string Delete(string id, object objTrans) 在指定事务中删除单条数据。 public string Delete(CalendarNotesModel model, object objTrans) 在指定事务中批量删除数据。 5、查询数据 public List SelectAll() 查询出当前数据表所有数据。 public CalendarNotesModel Select(string id) 根据主键查询单条数据。 public List Select(CalendarNotesModel model, string querytype) 根据指定条件查询数据集合,调用过程:先实例化一个CalendarNotesModel对象,然后设置筛选条件(即给相应属性字段赋值),然后调用此方法,可通过querytype参数设置筛选出的数据集的排序,如” UpdateTime DESC”,默认可为空(””)。 public CalendarNotesModel Select(string id, object objTrans) 在指定事务控制中根据主键查询单条数据。 public List Select(CalendarNotesModel model, string querytype, object objTrans) 在指定事务控制中根据指定条件查询数据集合。
压缩包内有最近修改说明。以下为使用方法: 1、 适用于.net项目,基于MVC架构模式 2、 按照数据库结构生成基础开发类库 3、 数据支持SQL2000和SQL2005两个版本 4、 类库为分层框架工厂模式,依次分为:数据库交互层(SqlHelper)、业务实体层(Model)、数据处理层(DAL)、数据接口层(IDAL)、数据工厂层(DALFactory)、业务层(BLL)6层 5、 业务实体层与业务层直接与UI交互 6、 生成类库的同系统自动生成相应的存储过程脚本(Proc文件夹)。 一、配置 打开SQLHelper.cs文件,将相应的数据库连接配置信息添加到配置文件中即可。 二、存储过程 打开Proc文件夹,将Proc.sql在相应SQL命令执行窗口中打开,然后执行即可。 二、业务实体层 实体类名为数据表名称(首字母大写)加上Model后缀组成,类属性为相应字段名称(首字母大写),包含相应构造函数。 三、业务层 以下介绍以CalendarNotes表为例,主键字段为id。 1、插入数据 public string Insert(CalendarNotesModel model) 插入单条数据,即业务实体对象 public string Insert(List<CalendarNotesModel> list) 插入多条数据,即泛型集合(集合元素为业务实体对象) public string Insert(CalendarNotesModel model, object objTrans) 在指定事务控制中插入单条数据 public string Insert(List<CalendarNotesModel> list, object objTrans) 在指定事务控制中插入多条数据 2、插入并返回所插入的记录的自增ID 适用范围为相应数据表中存在标识字段,可同步获取到新插入数据的标识字段值。 public string Insert_Identity(CalendarNotesModel model) 插入单条数据 public string Insert_Identity(CalendarNotesModel model, object objTrans) 在指定事务控制中插入单条数据 3、更新数据 public string Update(CalendarNotesModel model) 更新单条数据,使用过程是:先取出相应业务实体,然后修改字段值(非主键字段),然后调用此方法更新数据库。 public string Update(CalendarNotesModel model, object objTrans) 在指定事务控制中更新单条数据,调用过程同上。 4、删除数据 public string Delete(string id) 根据主键删除单条数据。 public string Delete(CalendarNotesModel model) 根据指定条件批量删除数据,调用过程:先实例化一个CalendarNotesModel对象,然后设置删除条件(即给相应属性字段赋值),然后调用此方法。 public string Delete(string id, object objTrans) 在指定事务中删除单条数据。 public string Delete(CalendarNotesModel model, object objTrans) 在指定事务中批量删除数据。 5、查询数据 public List<CalendarNotesModel> SelectAll() 查询出当前数据表所有数据。 public CalendarNotesModel Select(string id) 根据主键查询单条数据。 public List<CalendarNotesModel> Select(CalendarNotesModel model, string querytype) 根据指定条件查询数据集合,调用过程:先实例化一个CalendarNotesModel对象,然后设置筛选条件(即给相应属性字段赋值),然后调用此方法,可通过querytype参数设置筛选出的数据集的排序,如” UpdateTime DESC”,默认可为空(””)。 public CalendarNotesModel Select(string id, object objTrans) 在指定事务控制中根据主键查询单条数据。 public List<CalendarNotesModel> Select(CalendarNotesModel model, string querytype, object objTrans) 在指定事务控制中根据指定条件查询数据集合。 6、分页查询 /// <summary> /// 分页查询,返回List数据集合 /// </summary> /// /// <param name="model">查询条件</param> /// /// <param name="querytype">排序条件</param> /// /// <param name="PageIndex">查询页码</param> /// /// <param name="PageSize">每页记录条数</param> /// /// <param name="TotalNumber">输出参数:总记录数</param> /// <returns>当前页数据集合</returns> public List<CalendarNotesModel> Select_Page(CalendarNotesModel model, string querytype, int PageIndex, int PageSize, out int TotalNumber) 按照指定条件分页查询数据集合,返回List集合,查询指定页。具体参数参照BLL层注释。 /// <summary> /// 分页查询,返回Json数据源 /// </summary> /// /// <param name="model">查询条件</param> /// /// <param name="querytype">排序条件</param> /// /// <param name="PageIndex">查询页码</param> /// /// <param name="PageSize">每页记录条数</param> /// <returns>当前页数据的JSON数据源(JSON格式参考Json转换方法)</returns> public string Select_Page(CalendarNotesModel model, string querytype, int PageIndex, int PageSize) 按照指定条件分页查询数据集合,返回JSON数据源,查询指定页。具体参数参照BLL层注释。 7、范围分页查询 /// <summary> /// 范围分页查询,查询介于model_min与model_max之间的实体集合,两个model中都有值的属性为范围筛选,仅model_min中有值的属性为等于筛选 /// </summary> /// /// <param name="model_min">起始model</param> /// /// <param name="model_max">结束model</param> /// /// <param name="queryflag">比较标识:1为小于等于;默认为小于</param> /// /// <param name="querytype">排序条件,如:field1 desc</param> /// <returns>符合条件的实体集合</returns> public List<CalendarNotesModel> Select_Range_Page(CalendarNotesModel model_min, CalendarNotesModel model_max, string queryflag, string querytype, int PageIndex, int PageSize, out int TotalNumber) 按指定范围条件查询符合条件的数据集合,返回指定页的数据集合。 8、范围查询 /// <summary> /// 范围查询,查询介于model_min与model_max之间的实体集合,两个model中都有值的属性为范围筛选,仅model_min中有值的属性为等于筛选 /// </summary> /// /// <param name="model_min">起始model</param> /// /// <param name="model_max">结束model</param> /// /// <param name="queryflag">比较标识:1为小于等于;默认为小于</param> /// /// <param name="querytype">排序条件,如:field1 desc</param> /// <returns>符合条件的实体集合</returns> public List<CalendarNotesModel> Select_Range(CalendarNotesModel model_min, CalendarNotesModel model_max, string queryflag, string querytype) 9、获取记录数 public int GetRowCount(CalendarNotesModel model) 获取符合条件的记录条数,没有符合条件的返回0。 10、判断是否存在符合条件的记录 public bool IsExists(string id) 根据主键判断是否存在符合条件的记录。 public bool IsExists(CalendarNotesModel model) 根据指定条件判断是否存在符合条件的记录。 11、格式化model对象(私有方法,不对外调用) private CalendarNotesModel InitModel_DefaultValue(CalendarNotesModel model) 按照数据库中数据表字段的默认值设置初始化业务实体。 private CalendarNotesModel InitModel_NullValue(CalendarNotesModel model) 按照空值字符串(生成代码指定,默认为-1)初始化业务实体。 12、XML数据源相关 注:XML数据源中元素标签为小写数据表名称,各属性key为相应小写字段名称。 public CalendarNotesModel GetModelByXML(string xml) 解析xml数据源为业务实体对象。 public string GetXMLByModel(CalendarNotesModel model) 解析业务实体对象为xml数据源。 public List<CalendarNotesModel> GetListByXML(string xml) 解析xml数据源为List数据集合。 public string GetXMLByList(List<CalendarNotesModel> list) 解析List数据集合为xml数据源。 public string Insert(string xml) 将单条记录xml数据插入数据库 public string Update(string xml) 将单条记录xml数据更新到数据库 13、JSON数据源相关 注:json数据源中totalProperty属性为数据源总记录条数,root属性下是具体数据表记录信息,数据表记录信息中各key为小写字段名称,值均为字符串类型。 示例: { 'totalProperty':10, 'root':[ {'id':'001','name':'user1'}, {'id':'002','name':'user2'} ] } json字符串传至客户端后在javascript脚本下需将字符串转换为json数据对象,示例如下: var objJson = eval('('+strJson+')'); public string GetJsonByModel(CalendarNotesModel model) 解析业务实体对象为json数据源。 public string GetJsonByList(List<CalendarNotesModel> list) 解析List数据集合为json数据源,json数据源记录总条数即为List集合的元素个数。 public string GetJsonByList(List<CalendarNotesModel> list, int count) 解析List数据集合为json数据源,json数据源记录总条数为传入count参数值,用于取分页数据。 四、事务控制 事务控制调用示例: CauCWareLibrary.BLL.BLLCalendarNotes objBLL = new CauCWareLibrary.BLL.BLLCalendarNotes(); try { //发起事务 object trans1 = CauCWareLibrary.SqlHelper.SQLHelper.StartTransaction("trans1"); //业务操作 CalendarNotesModel model1 = CauCWareLibrary.BLL.BLLCalendarNotes.Select("184", trans1); //提交事务 CauCWareLibrary.SqlHelper.SQLHelper.CommitTrancaction(trans1); } catch { //回滚事务 CauCWareLibrary.SqlHelper.SQLHelper.RollbackTrancaction(trans1); } 五、其他说明 1、各类文件均为分布类 易于扩展,避免项目开发过程中数据库结构调整所引起大量的基础类库代码维护工作,避免多个人维护同一个类引起代码紊乱。 2、扩展存储过程说明 步骤如下: 1) 在数据库中新建存储过程; 2) 在DAL文件夹下新建分布类文件,添加相应using信息,类声明如下: public partial class DALCalendarNotes : IDALCalendarNotes 3) 添加public方法,调用存储过程,具体参考其他自动生成的代码; 4) 在IDAL文件夹下新建分布类文件,添加相应using信息,接口声明如下: public partial interface IDALCalendarNotes 5) 添加新增方法的接口声明; 6) 在BLL文件夹下新建分布类文件,添加相应using信息,类声明如下: public partial class BLLCalendarNotes 7) 添加新增业务方法即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值