ibatis插入数据是有返回值的好,还是没有的好.修改的呢,删除的呢?并说说原因!万分感谢!

解决方案 »

  1.   

    作者的意思是想当插入成功的时候,返回true,失败的话返回false,对不对,呵呵
    个人认为没有必要,因为永远都不会返回false,因为如果失败的话一就是一个异常,除非你在方法里捕获了这个方法。
    同样的道理,如果需要话,你写的所有返回值为void的方法,都应该变成返回值为boolean的,以表明你的方法成功运行。
    事实上从面向对象的角度来说,异常就表明了一种状况,我们的插入操作失败,也许是数据库链接有问题,sql语法问题以及其他原因导致了运行失败,这个时候抛出一个异常就客观描述了当时的状况,符合面向对象思想,并且异常对象也有足够的信息告诉我们,发生了什么,什么类型的异常,如果是运行失败,返回false的话,我们反而不知道具体原因,我们只有一个false值,也不符合面向对象思想。
    只要没有异常,就说明是运行正常,为什么偏偏要告诉他,我运行成功呢,这样一来java里所有的方法都该返回boolean值。 
     
     
     
      

  2.   

    nsert 返回的为插入的主键值,但必须在配置文件中加入 如果主键值为String <![CDATA[ select resource_id as resourceId from rentout where resource_id=#resourceId# ]]> 如果主键值为Int型 <![CDATA[ Select last_insert_id(); ]]> Update,和Delete返回为修改数据影响的条数; SQL注入 a.在关键字传入前加‘%’; 例:String keyword=”%”+keyword+”%”; b、过滤关键字中的非法字符 公共SQL提取的运用 在 中包含需要复用的SQL语句,在需要的地方 引入即可 ResultClass和ResultMap的区别 resultClass:可以把结果自动映射到相应的JAVA类中,但无法指定输出字段的类型,会对性能产生轻微的影响。 resultMap:可以预先定义resultMap元素,可以控制数据如何从结果集中取出,以及哪个属性匹配哪个字段, parameterClass和parameterMap的区别 parameterClass属性值是JAVA类的全限定名,目的是限制输入参数的类型为指定的JAVA类,如果不指定,任何带有合适属性(get/set方法)的JAVA BEAN都可以作为输入参数 parameterMap:预先定义parameterMap的属性值,用于有次序的参数匹配JDBC符号 “#”和“$”的区别 “#” 为占为符 “$”为直接替换,但为出现SQL引入问题和性能上的影响,like,limit和表名的引入必须使用“$” 分页功能的实现 a. 用ibatis自带的分页功能,但是自带分页是把所有数据读入内存再分页的,所以必须自己覆写LimitSqlExecutor方法, b. 直接使用limit实现 where 条件的组装 比较属性值和静态值或另一个属性值是否相等 比较属性值和静态值或另一个属性值是否不相等 比较属性值是否大于静态值或另一个属性值 比较属性值是否大于等于静态值或另一个属性值 比较属性值是否小于静态值或另一个属性值 比较属性值是否小于等于静态值或另一个属性值 检查属性是否为NULL 检查属性是否不为NULL 检查属性是否为NULL或空 检查属性是否不为NULL或不为空 检查是否存在该属性 检查是否不存在该属性 <![CDATA[ ]]>的含义 用了特殊字符的SQL语句不能直接使用。必须用<![CDATA[ ]]> ibatis自带缓存的运用 //可以用hours/minutes/second //需要缓存的方法,可以为多个 缓存策略: LRU:最近最少使用 MEMORY:适用于没有统一的对象重用模式,property的属性值必须是STRONG, SOFT,WEAK,这三个值分别对应于JVM不同内存reference类型。 WEAK,大多数情况下,WEAK是最佳选择,缺省值就是WEAK,它能大大提高常用查询的性能,对于当前不被使用的查询数据,将被清除 SOFT,在查询结果对象不被使用,可以减少内存不足的可能性 STRONG,对查询的结果一直保留在内存中,可以使用在数据量很少或者静态数据的时 FIFO:先进先出 OSCACHE:配置oscache.properties value的使用 假如没有必要写JAVA BEAN作为参数,可以直接使用基本类型,也可以直接传入参数值。如果是直接传入参数值就配置文件中必须写 #value#做为参数传入 iterate在ibatis里的运用 <![CDATA[ Username=#stringList[]# ]]> List参数名后面一定要加“[]”,防止解析器简单的把List解析成String 结果:username=(1 or 2 or 3) 事务的处理 startTransacton(); commitTransaction(); rollbackTransaction(); 批处理 如果有很多非查询的(insert/update/delete)语句要处理,为了减少网络通讯的流量,可以进行批处理 sqlMap.startBatch(); sqlMap.endBatch(); xmlResultName的运用 详细输出结果 直接把查存出来的结果映射成XML document   结果:返回的为XML格式的字符串(String) < person> 2 2222 xmlResultName属性值为根目录名
      

  3.   

    楼上的不知道说的什么呢,呵呵。2楼的那个说的不全对吧,比如,有些数据超长时,在mysql里,是不会抛出异常的,但实际上就是没插入进去。还有修改,删除呢?这个是有返回值好,还是没的好?
      

  4.   

    我理解
    insert不用
    update delete需要返回操作的记录条数所有操作都放在try里面,发生异常就出log,跳到错误页面。
    因为db操作发生异常,属于比较严重的错误了,系统应该不能继续往下运行了。
      

  5.   

    也遇到一个insert返回值的问题。如果用insert 和select组合的话,insert into table1 select ... from ... where...这样的,当select没返回值的话,insert不会插入数据。这种情况还是希望能根据返回值做不同的操作。