ibatis技巧

mybatis的作用域:

  • sqlSessionFactoryBuilder:相当于一个方法的局部作用域,目标是解析对应的xml配置文件;
  • sqlSessionFactory:通过sqlSessionFactoryBuilder获取,一个数据库对应一个sqlSessionFactory,一致存在;
  • sqlSession:通过sqlSessionFactory获取,不是线程安全的,一般是一个线程或者一个请求对应一个sqlSession,对应的就是一个事务;

ibatis的小技巧:

  • #{} 和${}的区别:

    • #{}:底层使用 PreparedStatement,特点:先进行SQL语句的预编译,然后给SQL语句的占位符【问号?】传值,可以避免SQL注入的风险【编译后为关键字?,不能在字符串中】;
      • #{}以值的形式传入,会自动加上单引号
    • ${}:底层使用Statement,特点直接进行SQL语句的拼接,然后进行SQL语句的预编译,存在SQL注入的风险。
      • 一般传入值是关键字的时候,只能使用${ },不会有单引号的自动加入
      • 或者使用分库分表,需要拼接表名的时候。
  • 技巧:

    • 拼接表明【分库分表】:使用${};

    • 批量删除【in ()】:以字符串的形式传入,并作为其他数据类型,使用${};

    • 模糊查询:

      • concat('%', #{brank}, '%')
      • '%${brank}%'
      • "%"#{brack}"%",mybatis会进行逻辑拼接
    • 在config中对于resultType取别名,不区分大小写;

      • typeAlias标签对类取别名,默认是类的简名;
        • package标签是对包下所有类取别名,默认就是类的简名,不区分大小写;
    • mapper标签技巧:

      • resource:类的根路径;
      • url:绝对路径;
      • class:全限定接口名,带有包名,mapper接口和xml在相同的相对路径下,所以给对应接口的全类名;
        • 对应有一个package标签,指定对应包名就行;
    • 插入数据的时候,获取自动生成的主键:

      • useGenneratedKeys="true"
      • keyProperty="id",放入对象的id中;
posted @ 2025-07-23 11:22  烟雨断桥  阅读(6)  评论(0)    收藏  举报