mybatis-笔记


基本写法

insert

  • 取回自增主键
// useGeneratedKeys取出由数据库自动生成的主键,仅对支持主键自动生成的数据库有效,默认为 false
// keyProperty主键的名称,必须与useGeneratedKeys 一起使用,默认未设置


  INSERT INTO user(username,age,score) VALUES (#{username},#{age},#{score})

  • 批量插入
// 需要在数据库配置文件中url中添加参数allowMultiQueries=true

    insert into person(username,email,gender) VALUES
    
        (#{vo.username},#{vo.email},#{vo.gender})
    

update


  UPDATE user SET age = #{age} WHERE id = #{id}


// set  主要用于动态更新时,智能消除逗号

  UPDATE user
   
      title = #{title},
      content = #{content},
   
   where id = #{id}

delete


  DELETE FROM user WHERE id = #{id}

query

  • 模糊查询
mybatis中内置的参数_databaseId中保存了用户所指定的对应的数据库厂商标识
mybatis的另一个内置参数_parameter保存了对应传入的对象

      CONCAT('%',#{username},'%')


      '%' || #{username} || '%'

  • IN 查询
 
  • 日期查询

jdbcType =DATE 日期精确到年月日 剩余分秒 填0补齐
jdbcType= TIMESTAMP 日期精确到时分秒
jdbcType 重要性 传入null值时,可以防止null空指针异常报错


   AND = #{startTime,jdbcType=DATE}  ]]>


其他标签

  • resultType 上指定的类的全路径名(或指定了别名),MyBatis 会自动创建 resultMap 对象进行数据的映射
  • 使用resultMap标签直接定义映射关系,能避免 MyBatis类型 推断和映射带来的性能损耗
  • resultMap 和 resultType 不能共存,只能二选一
  • sql标签可以抽出一部分sql片段
  • parameterType 语句的参数类型,默认可选,MyBatis 会自动推断



  
  
  
  



    id,username,age,score


  • trim 可以在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀
prefix: 前缀属性,若标签内不为空则在 SQL 中添加上前缀;
prefixOverrides: 前缀覆盖属性,若标签中有多余的前缀,将会被覆盖(其实就是丢弃该前缀);
suffix: 后缀属性,若标签内不为空则在 SQL 中添加上后缀;
suffixOverrides: 后缀覆盖属性,若标签中有多余的后缀,将会被覆盖(其实就是丢弃该后缀)。


  UPDATE imooc_user
  
    
      username = #{username},
    
    
      id = #{id}
    
  
  WHERE id = #{id}

批处理

// ExecutorType设置
SIMPLE 就是普通的执行器(默认);
REUSE 执行器会重用预处理语句(prepared statements);
BATCH 执行器将重用语句并执行批量更新。

SqlSession session = MyBatisUtils.getSqlSessionFactory().openSession(ExecutorType.BATCH);
PersonMapper personMapper = session.getMapper(PersonMapper.class);
for (int i = 1100; i < 2000; i++) {
    Person person = new Person("boss" + i, i + "aa@q.com", "x");
    //应用批处理
    personMapper.addPerson(person);
}
session.commit();
session.close();

Mybatis插件-拦截器

  • ParameterHandler:处理SQL参数对象
  • ResultSetHandler:处理SQL返回的结果集对象
  • StatementHandler:数据库处理对象,用于执行sql语句
  • Executor:Mybatis执行器