栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mybatis学习总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mybatis学习总结

参考文章:
Mybatis中文网

1.基础知识
  1. 每个maper接口对应一个XML文件,它们之间联系的桥梁是mapper接口中的方法名,在XML中是标签的id属性
  2. mybatis的工作流:执行时对参数进行处理,执行完之后还对结果集进行处理,最后可能有缓存结果集的处理
  3. XML中写CRUD标签来将标签id对应的方法映射为其具体实现
  4. 标签属性用来配置每条语句的行为细节,标签内容是sql语句,sql语句的入参格式为**#{参数名}**
  5. 标签必不可少的的属性是id,特别对于select标签还要指明resultType(resultMap)
  6. resultType必须是类的全限定名(可以在配置中映射一个短的类型别名)
  7. mybatis为常用的 Java 类型内建了类型别名。
  8. 参数映射一般可以省略,MyBatis的类型处理器可以自动将参数以合适的方式转换成 Java 类型
  9. resultMap的作用是将数据库中的字段映射为Java中的对象属性或者HashMap 的键上
  10. resultMap一般不需要显示配置,除非字段名与属性名不匹配,否则只需要指定resultType,名字相同的自动匹配
  11. MyBatis 是通过配置中的映射器(mappers)找到映射文件的,再根据标签id找到其要实现的mapper接口中的方法
  12. 保证mapper接口与它对应的XML在同一目录结构下以及文件名相同,就可以使他们自动匹配起来
  13. 处理字段名与实体属性名不匹配的两种方法:1.改resultType为resultMap;2.sql的as语法:字段名 as 别名
  14. 结果映射说白了就是把一个实体类中的属性(构造方法的参数也可以,不过我的实体都是无参构造)和数据库中的字段一一对应起来,不过实体类中的属性可能不仅仅是简单的数据类型,对于对象和集合要进行特殊的匹配映射
  15. 结果映射相当于在使用XML的方式定义查询结果对象的实体类
  16. 一对一 association, 一对多 collection,多对多 discrimination
2.配置

类型别名(typeAliases)

类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。

  • 直接指定
    Author可以用在任何使用 domain.blog.Author 的地方

  

  • 包名指定
    指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean

  

实体类前无注解,类名首字母小写的非限定类名来作为它的别名
若有注解,则别名为其注解值:@Alias(“author”)

  • 常见的 Java 类型内建的类型别名。它们都是不区分大小写的
    别名------------java类型
    hashmap------------HashMap
    list------------List
映射器(mappers)


  



  

3.XML 映射器

CRUD
  • 代码示例

  select id, username, hashedPassword
  from some_table
  where id = #{id}

  • 对于设置为实体类的结果类型,MyBatis 会在幕后自动创建一个 ResultMap,再根据属性名来映射列到 JavaBean 的属性上





  select user_id, user_name, hashed_password
  from some_table
  where id = #{id}

resultMap标签
  • 标签属性
  • 内标签
resultMap的内标签
  • id & result
    共同点:将一个列的值映射到一个简单数据类型(String, int, double, Date 等)的属性或字段
    不同点:id 元素对应的属性会被标记为对象的标识符,在比较对象实例时使用。 这样可以提高整体的性能,尤其是进行缓存和嵌套结果映射(也就是连接映射)的时候。
    两个元素都有一些属性:
  • 关联(association)
    类A的一个属性是类B,将数据库的字段映射到类A的属性时,在映射到属性类B时,该如何映射呢?
    答案是使用association,即A关联B,适合一对一连接查询
    某个对象的一个对象属性的部分属性映射:

  
  

关联的嵌套 Select 查询:


  



  SELECT * FROM AUTHOR WHERe ID = #{id}

分析:根据resultMap我们知道,它是将数据库查询结果字段映射为类型为 Blog的对象属性中,其中一个属性author是Author对象类型,而这个属性是通过一个selectAuthor查询得到的,对于这个查询我们传递数据库查询结果的author_id字段来保证其最多返回一个对象,author_id应该是Blog的一个外键
关联的嵌套结果映射:


  SELECT * FROM BLOG WHERe ID = #{id}



  select
  B.id as blog_id,
  B.title as blog_title,
  B.author_id as blog_author_id,
  P.id as post_id,
  P.subject as post_subject,
  P.body as post_body,
  from Blog B
  left outer join Post P on B.id = P.blog_id
  where B.id = #{id}

对以上查询结果做映射:


  
  
  
    
    
    
  

  • 鉴别器(discriminator )
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/845060.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号