zoukankan      html  css  js  c++  java
  • mybatis

    mybatis ORM框架
    和hibernate相比
    1.hibernate功能完善 , mybatis稍欠缺,例如在缓存方面
    2.hibernate hql方言的支持,可以在任意数据库上生成对应的sql语句,移植性更强
    mybatis因为是编写sql语句,所以移植性较差
    3.hibernate全自动化面向对象的编程,mybatis半自动化,面向sql编程
    4.mybatis开发效率较高

    在mybatis中 ${}和#{}的区别在于,$用来直接拼接内容,而#号会使用预编译的方式
    更加安全,防止sql的注入

    在mapper.xml文件中编写sql语句,同时让mapper的namespace映射接口的路径
    1.DAO层接口中定义方法,但是不写具体注解来实现
    2.定义Maaper文件,文件中的语句的数量对应着接口的方法的个数,并且语句的id和
    方法名相同
    3.Mapper文件的namespace指向接口的路径
    4.在核心配置中注册Mapper文件路径就可以
    5.使用的时候还是getMapper(接口.class) 还是使用接口,符合开发的思想

    mybatis调用时传递多个参数怎么办?
    dao层的方法带有参数在语句标签中可以不用指定parameterType
    1.可以直接使用下标访问或者#{arg0} #{param1}
    arg开头从第0个元素访问,param从第一个开始
    2.Map方式 在sql语句的#{map的key}来得到mapper的值

    解决属性和表字段不同名的办法有
    1.查询的时候使用as给别名
    2.使用ResultMap来解决,通过配置result property=属性名 column=列名来让查询
    的结果列和java对象的属性映射调用set方法来注入值

    resultMap还能解决对象关系映射的问题
    多对一:在多的一端放1的一端的对象
    一对多:在1的一端放多的一端的集合

    mybatis的缓存策略
    1.一级缓存是sqlSession级的缓存,指在session未关闭之前查询相同的对象会命中缓冲
    2.二级缓存是Mapper级别的缓存,指同一个sqlSessionFactory中多个sqlSession访问
    同一个对象时,如果在mapper文件中添加了<cache/> 就会默认打开这个mapper的二级缓存
    所有一级缓存的数据都会存一份到二级缓存,所以如果一级缓存没有命中会去二级缓存
    中寻找(要等sqlSession关闭时才会把一级缓存中的数据存入到二级缓存中)

    动态sql语句
    创建

  • 相关阅读:
    [ Talk is Cheap Show me the CODE ] : jQuery Mobile工具栏
    Html 表格
    概率论机器学习的先验知识(上)
    ODPS 下一个map / reduce 准备
    Zygote过程【3】——SystemServer诞生
    Java获取的一天、本星期、这个月、本季度、一年等 开始和结束时间
    中国国家干部级别、职称级别、事业单位级别
    Multivariate Adaptive Regression Splines (MARSplines)
    在Visual Studio中开发Matlab mex文件,生成mexw64/mexw32
    Windows删除文件时出现,“正在准备 再循环”
  • 原文地址:https://www.cnblogs.com/beiluoL/p/10668540.html
Copyright © 2011-2022 走看看