zoukankan      html  css  js  c++  java
  • 后端——框架——持久层框架——Mybatis——《Mybatis从入门到精通》读书笔记——第二章节(基础增删改查)

      本章介绍Mybatis的基础,使用框架实现增,删,改,查的功能,并介绍一些常见的问题,例如参数处理。总共有9个小节:

    1. 第一小节创建相关的数据库表,用户,角色,权限表,以及关联表。略
    2. 第二小节手动编写Mapper配置文件,编写Mapper接口,介绍它们之间的映射关系。略
    3. 第三小节介绍select标签。
    4. 第四小节介绍insert标签。
    5. 第五小节介绍update标签。
    6. 第六小节介绍delete标签。
    7. 第七小节介绍参数处理。
    8. 第八小节介绍了动态代理的原理。
    9. 第九小节为总结。略

    1、查询(select标签)

             查询标签主要理解两个映射,第一个映射发生在执行SQL语句之前,根据Mapper接口中的方法找到Mapper文件中对应的SQL语句。第二个映射发生在执行SQL语句之后,根据查询得到的结果集,将结果集映射为Java对象。接下来也分为两个阶段介绍它的每个属性

             执行SQL之前:

    1. id:该属性在同一个命名空间中必须唯一,它建立Mapper配置文件中标签与Mapper中方法的映射关系。
    2. parameterType:用于指定接口方法中参数的类型。如果是基本数据类型或与之对应的Java类,则不用设置。如果是其他类型,例如Map,必须设置参数类的全名。
    3. statementType:执行SQL语句需要创建的statement对象,每个值对应JDBC中的一种statement。
    4. timeout:设置执行SQL语句的超时时间,单位为毫秒。
    5. databaseId:设置数据库厂商的标识,在某些情况下用处很大,例如分页时Oracle和mysql的写法完全不同。一般情况下会自动判断,但是也可以手动配置,此时databaseId的值必须与config配置文件中的databaseIdProvider对应。
    6. useCache:是否启用二级缓存。一般不在单个select配置,直接配置cache标签。
    7. flushCache:是否停用一级缓存,当该值为true时,每次执行select语句都会清空一级缓存。一级缓存是sqlSession的缓存,它默认是开启的。

      执行SQL之后:

    1. resultType:建立结果集与Java类的映射关系,此时使用的是默认的驼峰方式,例如user_name会转换为userName属性。
    2. resultMap:建立结果集与Java类的映射关系,它的值为resultMap标签的id,这个标签在第六章节介绍一对一,一对多,多对多时在详细介绍。
    3. resultsetType:指定结果集的类型,它与JDBC中resultSet对象的类型一一对应。

      杂项:

    1. fetchSize:指定返回条数,这个没什么用,一般使用分页插件实现。
    2. resultSets:多个结果集的名称,基本只有在调用存储过程时,存在多个出参时才会发生,基本没用过。
    3. resultOrdered:这个标签没有用到过,也没有理解具体的意思。

    2、插入(insert标签)

      Insert标签中大部分的属性与select标签相同,含义也相同,这里介绍insert标签独有的属性。

    1. useGeneratedKeys:默认为false。如果为true,Mybatis会调用JDBC的getGeneratedKeys方法来取出由数据库内部生成的主键。
    2. keyProperty:表中主键对应的属性名称。一般都是id。

      插入之后获取主键:

      使用selectKey标签,mysql数据库的语句为select last_insert_id()。不同的数据库使用不同的SQL语句。

    3、更新(update标签)

      与select标签的属性基本相同。参考select

    4、删除(delete标签)

      与select标签的属性基本相同。参考select。

    5、传参

      如果理解JDBC中PreparedStatement传参的方式,那么mybatis传参的方式很好理解。JDBC的传参方式有三种:

    1. 第一种方式是根据参数的位置,即第一个问号对应第一个参数,第二个问号对应第二个参数,以此类推,多余的参数会被忽略,参数少直接报错。在mybatis也存在这种方式,它可以通过#{0}或#{param0}访问第一个参数,以此类推。
    2. 第二种方式是根据名称,JDBC中属性名必须与列名相同或者是驼峰式转换为列名。在mybatis中将其修改为@Param注解,注解包含value属性,该值为参数名称。
    3. 第三种方式根据类型,这种方式要求数据库每一列的返回值的数据类型必须不同,例如表中只有id,name,date,而在实际中属性很多,这种方式基本不适用。

    6、动态代理

    本小节通过编写代理类理解Mapper接口与Mapper文件的映射关系。在代理方法中执行sqlSession的selectList方法,该方法的参数为mapper接口的包名和方法名,它与Mapper文件的namespace属性和select标签的id属性一一对应。

    它意味着namespace和标签ID的组合是唯一的。

  • 相关阅读:
    安卓android.support.design使用中的问题
    处理requests SSl 证书问题
    python-excel
    post 请求包含相同参数
    关于zk 页面滚动问题 scroll
    Usefull Jquery
    Git 安装
    Comparison issues in TD
    Work Diary 12/13/17
    Unit10 I don't like work in the weekend
  • 原文地址:https://www.cnblogs.com/rain144576/p/12228988.html
Copyright © 2011-2022 走看看