ibatis技巧
mybatis的作用域:
- sqlSessionFactoryBuilder:相当于一个方法的局部作用域,目标是解析对应的xml配置文件;
- sqlSessionFactory:通过sqlSessionFactoryBuilder获取,一个数据库对应一个sqlSessionFactory,一致存在;
- sqlSession:通过sqlSessionFactory获取,不是线程安全的,一般是一个线程或者一个请求对应一个sqlSession,对应的就是一个事务;
ibatis的小技巧:
-
#{} 和${}的区别:
- #{}:底层使用 PreparedStatement,特点:先进行SQL语句的预编译,然后给SQL语句的占位符【问号?】传值,可以避免SQL注入的风险【编译后为关键字?,不能在字符串中】;
- #{}以值的形式传入,会自动加上单引号。
- ${}:底层使用Statement,特点直接进行SQL语句的拼接,然后进行SQL语句的预编译,存在SQL注入的风险。
- 一般传入值是关键字的时候,只能使用${ },不会有单引号的自动加入。
- 或者使用分库分表,需要拼接表名的时候。
- #{}:底层使用 PreparedStatement,特点:先进行SQL语句的预编译,然后给SQL语句的占位符【问号?】传值,可以避免SQL注入的风险【编译后为关键字?,不能在字符串中】;
-
技巧:
-
拼接表明【分库分表】:使用${};
-
批量删除【in ()】:以字符串的形式传入,并作为其他数据类型,使用${};
-
模糊查询:
- concat('%', #{brank}, '%')
- '%${brank}%'
- "%"#{brack}"%",mybatis会进行逻辑拼接
-
在config中对于resultType取别名,不区分大小写;
- typeAlias标签对类取别名,默认是类的简名;
- package标签是对包下所有类取别名,默认就是类的简名,不区分大小写;
- typeAlias标签对类取别名,默认是类的简名;
-
mapper标签技巧:
- resource:类的根路径;
- url:绝对路径;
- class:全限定接口名,带有包名,mapper接口和xml在相同的相对路径下,所以给对应接口的全类名;
- 对应有一个package标签,指定对应包名就行;
-
插入数据的时候,获取自动生成的主键:
- useGenneratedKeys="true"
- keyProperty="id",放入对象的id中;
-

浙公网安备 33010602011771号