java面试(mybatis)

1.JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?

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

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

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

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

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

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

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

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

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

    1.创建SqlSessionFactory对象

    2.通过SqlSessionFactory创建SqlSession

    3.通过SqlSession执行数据库操作

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

    5.session.close()关闭会话

3.使用MyBatis的mapper接口调用时有哪些要求?

    1.Mapper接口方法名和mapper.xml中定义的每个sql的id相同

    2.Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同

    3.Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

    4.mapper.xml文件中的namespace是mapper接口的类路径

4.mybaits中 #{…} 和 ${…} 的区别

    1.#将传入的数据都当成一个字符串,会对自动传入的数据加上一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111",如果传入的值是id,则解析成的sql为order by "id"。

    2.¥将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql是的值为order by user_id,如果传入的值是id,则解析成的sql为order by id。

    3.#方式能够很大程度放在sql注入。

    4.$方式无法防止sql注入。

    5.$方式一般用于传入数据库对象,例如表名。

    6.一般能用#的就别用$。

 

 

转载于:https://my.oschina.net/u/3591016/blog/1363052

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值