栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

每天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标签(不推荐)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/459616.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号