每天5道java面试题 -6(MyBatis)

1.MyBatis是什么?

        MyBatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态SQL,可以严格控制SQL执行性能,灵活度高。

        MyBatis可以使用XML或注解来配置和映射原生信息,将POJO映射成数据库中的记录,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。

2.JDBC编程有哪些不足之处?MyBatis是怎么解决的?

        1)数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。

        解决:在mybatis-confifig.xml中配置数据链接池,使用连接池管理数据库连接。

        2)SQL语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

        解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

        3)向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

        解决:Mybatis自动将java对象映射至sql语句。

        4)对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。

        解决:Mybatis自动将sql执行结果映射至java对象。

3.MyBatis的编程步骤是什么样的?

        1)创建SqlSessionFactory

        2)通过SqlSessionFactory创建SqlSession

        3)通过SqlSession之ing数据库操作

        4)调用session.commit()提交事务

        5)调用SqlSession.close()关闭会话

4.#{}和${}的区别

        #{}是占位符,预编译处理;${}是拼接符,字符串替换,没有预编译处理

       MyBatis在处理#{}时,#{}传入参数是以字符串传入,会将SQL中的#{}替换为?,调用PreparedStatement的set方法来赋值。

        #{}可以有效的防止SQL注入,提高系统安全性;${}不能防止SQL注入

        #{}的变量替换是在DBMS中;${}的变量是在DBMS外

4.模糊查询like语句该怎么写

        1)'%${question}%'可能引起SQL注入,(不推荐)

        2)"%"#{question}"%" 注意:因为#{…}解析成sql语句时候,会在变量外侧自动加单引号’ ',所以这里 % 需要使用双引号" ",不能使用单引号 ’ ',不然会查不到任何结果。

        3)CONCAT('%',#{question},'%')使用CONCAT()函数  (推荐)

        4)使用bind标签(不推荐)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

差点资深程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值