MyBatis

Mybatis中#和$区别

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”。#取变量对应的值。

2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id,  如果传入的值是id,则解析成的sql为order by id。$直接取变量的名字。

3. #方式可以防止sql注入,$不行。

MyBatis介绍及使用
1. 认识MyBatis
a) What is MyBatis? MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results. MyBatis can use simple XML or Annotations for configuration and map primitives, Map interfaces and Java POJOs (Plain Old Java Objects) to database records.
b) 对比JDBC和MyBatis
2. 使用MyBatis
a) 使用过程
i. 生成bean和配置文件
ii. 配置SqlSessionFactory
iii. 使用(两种方式)
1. Mapper.xml形式
2. Annotation形式

iv. SqlSessionFactory\SqlSession\Mapper 推荐作用域

b) MyBatis Generator使用
i. 配置generator插件

ii. generatorConfig.xml
iii. 执行 mvn mybatis-generator:generate
iv. 生成Bean和Example

3. XML映射配置文件
a) http://www.mybatis.org/mybatis-3/configuration.html
b) Type Handlers
i. 可以override原有的handlers
ii. 可以创造自己的handler补充没实现的类
c) objectFactory
d) plugins
i. 只能针对以下操作做plugin


ii. 步骤
1. 实现 org.apache.ibatis.plugin.Interceptor
2. 定义到底对谁做plugin

3. Plugin方法


4. 传参数

iii. 输出MyBatis日志
e) environments
4. Mapper文件认识
a. namespace 关联到mapper接口,区分类似package的作用
b. resultMap 结果映射
c. sql SQL复用
d. select Insert update delete CRDU操作
e. 动态SQL http://www.mybatis.org/mybatis-3/dynamic-sql.html
5. Batch批量操作
a. 三种方式
性能
for循环 低 每次都要IO
foreach拼SQL(性能最高) 有 SQL长度限制,定好List大小
ExeutorType.BATCH
6. 分页
a. 逻辑分页
org.apache.ibatis.executor.resultset.DefaultResultSetHandler#handleRowValuesForSimpleResultMap 内存分页而已
b. 物理分页
a) limt 0,10
b) 分页面插件 https://github.com/pagehelper/Mybatis-PageHelper
7. 联合查询

 

发表评论

邮箱地址不会被公开。 必填项已用*标注