Mybatis02

1. 测试字段名与属性名不一致情况

如果查询时使用resultType属性, 表示采用MyBatis的Auto-Mapping(自动映射)机制, 即相同的列名(结果集中的字段名)和属性名会自动匹配.
    1.通过resultMap标签自定义表与javabean类型的映射情况:
        1.不同名的字段必须手动设置映射关系。
        2.同名的字段可以不设置,默认会根据自动映射机制找同名。
    2.为字段起别名
        要求字段的别名与类型对应的属性名保持一致。
  • resultMap标签中的标签:

     id: 定义主键字段与属性的映射关系。
          
     result: 定义非主键字段与属性的映射关系。
          
    
  • resultMap的关联方式实现多表查询(一对多)

    class定义属性:  
       //属性: List
       private List empList;
    映射文件resultMap标签:
       collection:属性为List集合,使用collection标签定义,ofType:集合中数据的类型。
           
    
  • resultMap的关联方式实现多表查询(一对一|多对一)

    class定义属性:  
       //属性: javabean
       private Dept pddDept;
    映射文件resultMap标签:
       association: 定义javabean类型属性与字段的映射关系。
          
    

2. 动态SQL

  • where

     1.where:标签代替恒等式 where 1=1。
     2.在有条件的时候,会自动在当前select语句中拼接where关键字。
     3.如果没有条件,不会拼接where关键字。
     4.会自动帮助把第一个满足条件的if标签的and关键字去掉。
    
  • if

     if:标签用于条件判断。
     test: 用于设置判断条件,类似java中的()中的内容。
    
  • choose…when…otherwise

     choose:相当于java中的switch。
     when:相当于java中的case,条件写在test属性中。
     otherwise:相当于java中的default。
    
  • set

     1.用户维护update的set子句,与where标签类似 。
     2.,必须添加,set标签不会自动添加。
     3.如果满足条件,自动添加set关键字,会去除最后一个子句的多余的,。
     4.如果没有满足条件,不添加set关键字 。
    
  • trim

     trim:用于在前后添加或者删除一些内容。
     prefix: 在前面添加内容。
     prefixOverrides: 在前面删除内容。
     suffix: 在后面添加内容。
     suffixOverrides: 在后面删除内容。
    
  • bind

     对参数username使用前进行再加工,先拼接前后%
     
    
  • foreach

     用于在 SQL 语句中遍历集合参数, 在 in 查询中使用
     	1.collection: 待遍历的集合。
     	2.open: 设置开始符号。
     	3.item: 迭代变量。
     	4.separator: 项目分隔符。
     	5.close: 设置结束符。
     
    
  • sql…include

     sql用于提取SQL语句, include用于引用SQL语句。
      id, username, password  
     
    
  • 测试动态SQL

     1.查询用户数据:
     	@param username 根据用户名查询。
     	@param password 根据用户密码查询。
     	@return 返回查询到的用户数据。
     	条件是否存在: 字符串类型的用户名|密码 !=null 同时 !=''。
     	1.如果没有条件,查询所有数据。
     	2.如果存在任意一个条件,根据这个条件进行查询。
     	3.如果两个条件都存在,同时根据这两个条件进行查询。
     2.查询用户信息:
     	@param username 根据用户名查询。
     	@param password 根据用户密码查询。
     	@return 返回查询到的用户信息。
     	如果存在用户名则只根据用户名查询,如果没有用户名,存在用户密码,根据用户密码查询,如果都不存在查询所有。
     3.根据用户id修改用户信息:
     	@param user 根据用户修改。
     	@return 返回修改后的用户信息。
     	如果存在用户名修改用户名,如果存在用户密码修改用户密码,如果都存在就都修改。
     4.根据用户名做模糊查询:
     	@param name 根据用户名模糊查询。
     	@return 返回模糊查询后的用户名。
    

3. 缓存

  • 一级缓存

     1.默认开启. 线程级别的缓存, SqlSession 的缓存;
     2.在一个SqlSession 生命周期中有效. SqlSession 关闭,缓存清空;
     3.在同一个SqlSession 中, Mybatis会把执行的方法和参数通过算法生成缓存的键值,将键值和结果存放在一个 Map 中,如果后续的键值一样,则直接从Map中获取数据;
     4.不同的SqlSession 之间的缓存是相互隔离的;
     5.用一个SqlSession,可以通过配置使得在查询前清空缓存;flushCache="true"
     6.任何的UPDATE, INSERT, DELETE语句都会清空缓存。
    
  • 二级缓存

     
     //开启本mapper的命名空间的二级缓存
     
     flushInterval:刷新间隔时间。
     1.进程级别的缓存,SqlSessionFactory的缓存。
     2.在一个SqlSessionFactory生命周期中有效. 可以在多SqlSession 生命中期中共享.。
     3.默认关闭, 需要使用的时候, 要为某个命名空间开启二级缓存(在 mapper.xml 中配置cache)。
     4.由于在更新时会刷新缓存,因此需要注意使用场合:查询频率很高,更新频率很低时使用,即经常使用 select, 相对较少使用delete, insert, update。
     5.缓存是以 namespace 为单位的,不同namespace下的操作互不影响。但刷新缓存是刷新整个namespace的缓存,也就是update 了一个,则整个缓存都刷新了。
     6.最好在「只有单表操作」的表的namespace使用缓存, 而且对该表的操作都在这个namespace中。否则可能会出现数据不一致的情况。
    

4. CRUD注解

  • CRUD注解

    @Select: 类似于select标签。
    @Insert: 类似于insert标签。
    @Update: 类似于update标签。
    @Delete: 类似于delete标签。
    
  • 其他注解

    @Results: 类似于resultMap标签。
    @Result: 类似

5. 逆向工程
需添加到资源包下src下,generatorConfig.xml配置:

Mybatis02_第1张图片

你可能感兴趣的:(sql)