网站大量收购独家精品文档,联系QQ:2885784924

mybatis常见的面试题.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
mybatis常见的面试题 1、Mybatis基础: #{...} 和 ${...} 的区别 MyBatis将 #{…} 解释为JDBC prepared statement 的一个参数标记。而将 ${…} 解释为字符串替换。理解这两者的区别是很有用的, 因为在某些SQL语句中并不能使用参数标记(parameter markers)。 ? ? 比如,我们不能在表名(table name)的位置使用参数标记。 假设有下面的代码: ? ? 01.MapString, Object parms = new HashMapString, Object(); ? 02.parms.put(table, foo); // 表名 ? 03.parms.put(criteria, 37); // 查询过滤条件 ? 04.ListObject rows = mapper.generalSelect(parms); ? ? ? 01.select id=generalSelect parameterType=map ? 02. ?select * from ${table} where col1 = #{criteria} ? 03./select ? ? ? MyBatis生成的SQL语句(prepared statement)如下所示: 01.select * from foo where col1 = ? ? ? ? 重要提示: 请注意,使用$ {…} (字符串替换)时可能会有SQL注入攻击的风险。另外,字符串替换在处理复杂类型也可能常常发生问题,如日期类型。由于这些因素,我们建议您尽可能地使用 #{…} 这种方式。 要使用LIKE语句该怎么写? ? ? ? ? 2、有两种使用LIKE的方法。(推荐使用)第一种方法是,在 Java代码中添加SQL通配符。 示例一: 01.String wildcardName = %Smi%; ? 02.ListName names = mapper.selectLike(wildcardName); ? ? ? 01.select id=selectLike ? 02. ?select * from foo where bar like #{value} ? 03./select ? ? ? 第二种方式是在SQL语句中拼接通配符。这种方法相对来说安全性要低一些,因为可能会被SQL注入攻击。 示例二: 01.String wildcardName = Smi; ? 02.ListName names = mapper.selectLike(wildcardName);? ? ? 01.select id=selectLike ? 02. ?select * from foo where bar like % || ${value} || % ? 03./select ? ? 重要提示: 请注意两种方式中 $ 和 # 的使用! ? ? 3、如何执行批量插入? ? 首先,创建一个简单的insert语句: 01.insert id=insertName ? 02. ?insert into names (name) values (#{value}) ? 03./insert ? ? ? 然后在Java代码中像下面这样执行批处理插入: 01.ListString names = new ArrayListString(); ? 02.names.add(Fred); ? 03.names.add(Barney); ? 04.names.add(Betty); ? 05.names.add(Wilma); ? 06. ? 07.// 注意这里 ExecutorType.BATCH ? 08.SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); ? 09.try { ? 10. ?NameMapper mapper = sqlSession.getMapper(NameMapper.class); ? 11. ?for (String name : names) { ? 12. ? ?mapper.insertName(name); ? 13. ?} ? 14. ?sqlSmit(); ? 15.} finally { ? 16. ?sqlSession.close(); ? 17.} ? ? 4、如何获取自动生成的(主)键值? ? insert 方法总是返回一个int值 - 这个值代表的是插入的行数。而自动生成的键值在 insert 方法执行完后可以被设置到传入的参数对象中。 示例: 01.insert id=ins

文档评论(0)

cjp823 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7060131150000004

1亿VIP精品文档

相关文档