您的位置:首页 > 其它

mybatis(三) #{}和${} parameterType 和resultType selectOne和selectList mybatis和hibernate的本质 区别

2018-03-26 10:18 986 查看

1. #{}和${}

#{}:表示一个占位符号,很好去避免sql注入
原理:将占位符位置的整个参数和sql语句两部分提交给数据库,数据库去执行sql语句,去表中匹配所有的记录是否和整个参数是否一致。
#{}要获取输入参数的值:
如果输入参数是简单类型,#{}中可以写value或其它名称
如果是pojo对象类型,#{]通过OGNL方式去获取,表达式就是:属性.属性.属性。。。方式
 
${}表示一个sql 拼接符号
原理:是在向数据库发出sql之前去拼接好sql再提交给数据库执行。
${}要获取输入参数的值:
如果输入参数是简单类型,${}中只能写value
如果是pojo对象类型,${]通过OGNL方式去获取,表达式就是:属性.属性.属性。。。方式
一般情况下建议使用#{},特殊情况下必须要用${},比如:
动态拼接sql中动态组成排序字段, 要通过${}将排序字段传入sql中。
动态拼接sql中动态组成表名,要通过${}将表名传入sql中。

2. parameterType 和resultType

 
parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。
resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。

3. selectOne和selectList

 
selectOne查询一条记录,如果使用selectOne查询多条记录则抛出异常:
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:70
selectList可以查询一条或多条记录。

4.mybatis和hibernate的本质 区别

 
mybatis:学习成本低,入门门槛低,mybatis需要程序员自己写sql,对sql修改和优化就比较灵活。
mybatis是不完全的 ORM,mybatis需要程序员编写sql,但是mybatis也存在映射(输入映射、输出映射)
适用场景:需求变化较快的项目开发,比如:互联网项目、电商
  
hibernate:学习成本高,入门门槛高,hibernate是ORM框架,不需要程序员编写sql,自动根据对象映射生成sql。
适用场景:需求固定的中小型项目,OA系统、ERP系统。
 
企业在技术选型考虑各各技术框架的特点去进行选型 。
企业要根据人力、物力等资源去衡量,以节省成本利润最大化为目标进行选型。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息