分享

Mybatis笔记

 邵飞翔 2016-07-22

1.Mybatis解决jdbc编程的问题

  

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

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

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

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

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

解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

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

解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

 

 

2 与hibernate不同

Orm:mybatis不是一个完全的orm框架,hibernate是一个完全的orm框架。Mybatis需要程序员自己写sql,但是也存在映射(输入参数映射,输出结果映射)

学习门槛:mybatis比hibernate低。

应用的领域:

对于中小型项目,且需求固定,关系模型相对固定建议使用hibernate。适用传统项目,比如ERP。

对于需求不固定的项目,比如:互联网项目,建议使用mybatis,可以灵活去编写sql语句。

 

 

3    #{}${}

#{}:表示占位符,如果获取简单类型,#{}中可以使用value或其它名称 。有效防止sql注入。使用#{}设置参数无需考虑参数的类型。

如果使用#{}比较日期字段,select * from tablename where birthday >=#{birthday}

 

${}:表示sql拼接,如果获取简单类型,#{}中只能使用value 。无法防止sql注入。使用${}设置参数必须考虑参数的类型,比如:使用oracle查询条件

是日期类型,如果使用${},必须人为将${}两边加单引号通过to_date转日期。

Select * from table where birthday >=to_date(‘${birthday}’,’yyyy-MM-dd’)

 

在没有特殊要求的情况下,建议使用#{}占位符

有些情况必须使用${},

比如:需要动态拼接表名,Select * from ${tablename}

动态拼接排序字段:select * from tablename order by ${username} desc

 

parameterType指定 hashmap传递输入参数,#{}和${}中引用map的key。

Sql映射文件定义如下:

<!-- 传递hashmap综合查询用户信息 -->

    <select id="selectUserByHashmap" parameterType="hashmap" resultType="user">

       select * from user where id=#{id} and username like '%${username}%'

    </select>

 

 

4     动态 sql(重要)

Mybatis提供了很多标签,用于拼接sql语句。

5     resultMap(重要)

resultMap:如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系

resultType和resultMap区别

resultType:sql查询结果集使用resultType映射,要求sql查询字段名和pojo的属性名一致,才能映射成功。

resultMap: 如果sql查询结果集的字段名和pojo的属性名不一致,使用resultMap将sql查询字段名和pojo的属性作一个对应关系 ,首先需要定义resultMap,最终要使用pojo作为结果集映射对象。

建议:一般情况下建议使用resultType,因为简单方便。

针对一对多查询或要使用延迟加载 ,必须使用resultMap。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多