zoukankan      html  css  js  c++  java
  • 谈一下思考,关于mybatis中<foreach collection="list">中list得来的原因 没看到官方说明

    <foreach> 是在sql语句中进行多个id查询 时用到的,因为mybatis代替jdbc和hibernate, 使用 在xml文件中编写sql语句,这是一个标签文件.然后在 dao层?,用sqlSession.来调用这个写好的sql语句.

    有时候我想会不会jdbc更简单一些??

    然后,在xml中写sql语句,会碰到根据条件或者模糊查询,这个时候需要接收来自dao层的 查询条件参数.此时需要在xml文件中的sql语句中接收,并且应该没有接收,只是确定有几个占位符,等到预编译之后,再在dao层中为占位符传参数值??

    不是的,dao层在调用xml中的sql语句的同时就已经传过去条件参数,只不过只能传递一个参数,所以就要用到封装,所以就会产生collection属性 是一个单参数,或者一个集合.

    内部是不是预编译 ,不知道.但是反过来jdbc中为什么要预编译再传值呢,好处在哪里,然后再看这里是否内部也需要如此???

    DBAccess dbAccess = new DBAccess();
        SqlSession sqlSession = null;
        try {
            sqlSession = dbAccess.getSqlSession();
            //通过        sqlSession执行sql语句
             sqlSession.delete("Message.deleteBatch",ids);
             //为什么DAO层这样就可以
             sqlSession.commit();//jdbc是自动提交,但是mybatis中不是自动提交的
             
      <delete id="deleteBatch" parameterType="java.util.List">
        DELETE FROM message WHERE id in (
                <foreach collection="list" item="item" separator=",">
                #{item}
                </foreach>
            
        )
      </delete>

    所以此时要用到mybatis中的OGNL语言,也就是 <foreach>语句,接收条件参数放在sql语句中(在xml中)

    用在in后的括号里,其实括号都可以不写,看到过相关的文档,因为foreach中有开始和结束的属性,当然有括号简便.

    <delete id="deleteOne" parameterType="int">
        DELETE FROM message WHERE id = #{_parameter}
      </delete>
      
      <delete id="deleteBatch" parameterType="java.util.List">
        DELETE FROM message WHERE id in (
                <foreach collection="list" item="item" separator=",">
                #{item}
                </foreach>
            
        )
      </delete>

    但是对比只有一个参数的查询sql语句,可以看到<foreach>的作用只是在xml中实现遍历.

    但是可以看到,传参数的时候,xml中接收到的参数都是其类型,没有参数,由于只有一个参数,所以不需要写参数,就用默认的_parameter或者item 表示传入的虚参数.完全没有问题.

    最大的原因就是只有一个参数,简化所有....原来是一种简化.

    #{} 这个是OGNL表达式?,代表传入的参数,那么为什么要用这个表达式呢,表明它是一个参数变量吗,便于区分??

  • 相关阅读:
    EMIF接口的寻址问题
    C6000系类的内联函数
    C6000代码层面优化(一)
    RHCE学习笔记
    找出并关闭Ruby On Rails进程.
    Rails4添加bootstrap支持
    如何删除gnome3面板上的图标?
    出现 ruby cannot load such file -- zlib 问题的解决方法
    Debian安装软件时提示插入光盘
    Debian7桌面屏蔽图标和右键菜单的解决方法。
  • 原文地址:https://www.cnblogs.com/xuedexin/p/5665521.html
Copyright © 2011-2022 走看看