关于在IBatis中返回DataSet

本文介绍了在IBatis.NET中返回DataSet的方法,并提供了相应的代码示例。同时探讨了这种方法可能带来的设计问题及其对IBatis初衷的影响。

在一个邮件列表的讨论中,了解了如何在IBatis.Net中返回DataSet以及一些相关的内容

在这个过程中,我们还可以顺便得出获得SQL语句的方法

         public  static  string  GetSql( string  statementName,  object  paramObject)
        {
            ISqlMapper mapper 
=  GetMapper();
            IMappedStatement statement 
=  mapper.GetMappedStatement(statementName);
            
if  ( ! mapper.IsSessionStarted)
            {
                mapper.OpenConnection();
            }
            RequestScope scope 
=  statement.Statement.Sql.GetRequestScope(statement, paramObject, mapper.LocalSession);

            
return  scope.PreparedStatement.PreparedSql;
        }

下面是我对文中内容的理解:
并不是所有地方都要OO,在IBatis的Java和.NET实现中都支持Dictionary类型的对象.DataTable因为有了DataView的支持而较IDictionary具有一些优势.如果我们需要对数据进行额外的排序或者过滤操作,那么DataTable会更方便一些.因此像这种返回DataSet的方法会使得IBatis更加易用.
但同时感觉,这种方法将IBatis打开了一个缺口,似乎背离了IBatis的设计初衷——创建一个优秀的“Persistence Ignorance” domain model。比如现在,我们进行一次查询,获得“Plain Old CLR Objects”,看起来输入是与数据持久化相关的,而输出则完全集中在了领域模型上。
因此,返回DataSet的方法可能会导致不好的设计,从长远来看,也模糊了IBatis的初衷和意图。
 

         public  static  DataSet QueryForDataSet( string  statementName,  object  paramObject)
        {
            DataSet ds 
=  new  DataSet();
            ISqlMapper mapper 
=  GetMapper();
            IMappedStatement statement 
=  mapper.GetMappedStatement(statementName);
            
if  ( ! mapper.IsSessionStarted)
            {
                mapper.OpenConnection();
            }
            RequestScope scope 
=  statement.Statement.Sql.GetRequestScope(statement, paramObject, mapper.LocalSession);
            statement.PreparedCommand.Create(scope, mapper.LocalSession, statement.Statement, paramObject);
            mapper.LocalSession.CreateDataAdapter(scope.IDbCommand).Fill(ds);

            
return  ds;
        }


const util = require("../../utils/util") const app = getApp() Page({ data: { // 定义变量 api: app.globalData.api, status: '', activities: [], uid: 0, aid: 0, joinActivities: [], }, // 当我们退出登录时,所有页面都会关闭,本质上并不会让页面消失 onLoad() { // 页面主函数 this.data.uid = wx.getStorageSync('uid') this.data.status = wx.getStorageSync('status') util.http('/activity/jlist?uid='+this.data.uid, resp=>{ this.data.joinActivities = resp this.setData(this.data) // 更新页面数据 }) }, onShow() { // 每次看到这个页面,都会执行1次onShow this.onLoad() // 用代码主动调用主函数 }, onPullDownRefresh() { // 当下拉时,会触发这个函数 util.http('/activity/jlist?uid='+this.data.uid, resp=>{ this.data.joinActivities = resp util.stopPullSetData(this) // 结束下拉并且设置数据 }) }, cancelActivity(e) { this.data.aid = e.currentTarget.dataset.id util.http('/join/cancel',this.data, resp=>{ util.alert(resp) // 弹出返回的提示语 this.onLoad() // 重新调用主函数,实现页面列表数据更新 }) }, }) package com.qtc.club.pojo; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.util.Date; @Data @TableName("tbl_activity") public class Activity { @TableId(type = IdType.AUTO) public Integer id; public String activity; public Integer price; public String start; public String logo; public Date ctime; public Integer uid; @TableField(exist = false) // 作用:告诉一下:视图中有,表中没有 public String username; @TableField(exist = false) public Integer juid; } package com.qtc.club.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.qtc.club.pojo.Activity; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper public interface ActivityMapper extends BaseMapper<Activity> { @Select("SELECT tpv_activity.*,t_join.aid,t_join.uid juid FROM tpv_activity LEFT JOIN (SELECT * FROM tbl_join WHERE uid=#{uid}) t_join ON tpv_activity.id = t_join.aid ORDER BY id desc") List<Activity> getActivities(@Param("uid")int uid); @Select("SELECT * FROM v_activity WHERE juid=#{juid}") List<Activity> cancelActivities(@Param("juid")int juid); } package com.qtc.club.controller; import com.qtc.club.mapper.ActivityMapper; import com.qtc.club.pojo.Activity; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/activity") public class ActivityController extends HttpController<ActivityMapper,Activity> { @Autowired ActivityMapper activityMapper; @RequestMapping("/list") public List<Activity> list(int uid) { return activityMapper.getActivities(uid); } @RequestMapping("/jlist") public List<Activity> jlist(Integer juid) { if (juid != null) { return activityMapper.cancelActivities(juid); } return java.util.Collections.emptyList(); } @RequestMapping("/add") public Object add(Activity activity) { return super.insert(activity); } } 帮我修改代码,使微信小程序页面中显示juid=#{juid}的数据
最新发布
09-30
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值