ibatis笔记
关键字: ibatis
年后就要去淘宝实习了,趁着还有段时间先学习下ibatis。
配置ibatis:
1) SqlMapConfig.xml
<setting>元素:
1,lazyLoadingEnabled,延迟加载(lazy loading)是一种只加载必要信息而推迟加载其他未明确请求的数据的技术,也就是说,除非绝对需要,否则应用程序加载的数据越少越好。
lazyLoadingEnabled配置项用于指定当存在相关联的已映射语句时,是否加载延迟加载。默认为true。
2,cacheModelsEnabled,数据高速缓存是一种用于提高程序性能的技术,它基于近期使用过的数据网王很快又会被用到这样一种假设,将近期使用过的数据保存在内存中。为了充分利用高速缓存技术,还必须为已映射语句配置高速缓存模型。
3,enhancementEnabled,用于指定是否使用cglib中那些已优化的类来提高延迟加载的性能。cglib是一个运行时代码生成库,ibatis可以使用它来优化其某些功能,例如JavaBean特性的设置。通识,它可以允许你延迟加载具体类,这样就不需要为了能够延迟加载某个类而特意创建一个相应的接口了。
4,useStatementNamespaces,用于告诉ibatis,在引用已映射语句时,是否需要使用限定名(qualified name)。也就是说,当你定义了SQL映射,就用该SQL映射名来先顶这条已映射语句。假设有一个名为Account的SQL映射,它包含名为insert,update,delete,以及getAll的已映射语句。那么当你想插入一个账户且在主配置文件启用了useStatementNamespaces配置项时,就必须调用Account.insert对这个名字来调用这条映射语句。
5,maxRequests(已废弃)
6,maxSessions(已废弃)
7,maxTransactions(已废弃)
2) SqlMap.xml
使用<select>已映射语句
## 和 $$ 的区别:
## 会把占位符变换为一个预备语句参数 ?,然后ibatis再将这个这个参数的值设置后执行该预备语句。
$$ 可以用来把值直接插入到SQL语句之中(在该SQL语句被转变为参数化语句之前)。不过容易造成SQL注入,另外过度使用还可能造成性能问题。
以下是网上找来的一些区别:
1.#是把传入的数据当作字符串,如#field#传入的是id,则sql语句生成是这样,order by "id"
2.$传入的数据直接生成在sql里,如#field#传入的是id,则sql语句生成是这样,order by id, 这就对了
3.#方式能够很大程度防止sql注入
4.$方式无法方式sql注入
5.$方式一般用于传入数据库对象.例如传入表名
6.一般能用#的就别用$