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系统。
企业在技术选型考虑各各技术框架的特点去进行选型 。
企业要根据人力、物力等资源去衡量,以节省成本利润最大化为目标进行选型。
相关文章推荐
- Mybatis与Hibernate的本质区别
- 【SpringMVC+mybatis】4.mybatis和hibernate的本质区别和应用场景
- MyBatis和Hibernate的本质区别和应用场景
- Mybatis和Hibernate的本质区别
- MyBatis和Hibernate的本质 区别
- mybatis和hibernate本质区别和应用场景
- mybatis和hibernate的本质区别和应用场景简介
- mybatis和hibernate本质区别和应用场景
- springMVC+Mybatis 学习笔记-【2】Mybatis和Hibernate的本质区别和应用场景
- 10Mybatis_mybatis和hibernate本质区别和应用场景
- mybatis和hibernate本质区别和应用场景
- mybatis和hibernate本质区别和应用场景
- MyBatis和hibernate本质区别与应用场景
- mybatis和hibernate本质区别
- mybatis和hibernate本质区别和应用场景
- mybatis和hibernate的本质区别和应用场景
- mybatis与hibernate本质的区别以及应用的场景
- MyBatis与Hibernate本质区别与运用场景
- mybatis学习笔记(三)mybatis和hibernate区别
- SSH(Struts,Spring,Hibernate)和SSM(SpringMVC,Spring,MyBatis)的区别