8.连接池
8.1 mybatis中的连接池3种配置选项:
8.2 unpool原理分析:
8.3 pool原理分析:
8.4 JDNI介绍:
9.动态sql
9.1 where if foreach 标签:
10.多表操作
10.1 一对一操作(association):
10.2 多对多操作(collection):
10.3 延迟加载:
8.连接池
8.1 mybatis中的连接池3种配置选项:
![](https://img.haomeiwen.com/i13091615/f9aec35377f70860.png)
POOLED 采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现
UNPOOLED 采用传统的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想
JNDI 采用服务器提供的JNDI技术实现,来获取DataSource对象,不同服务器所能拿到DataSource不一样。
8.2 unpool原理分析:
MyBatis 内部分别定义了实现了 java.sql.DataSource 接口的 UnpooledDataSource,PooledDataSource 类来表示 UNPOOLED、POOLED 类型的数据源。
![](https://img.haomeiwen.com/i13091615/4b43b16994d0fce0.png)
UnpooledDataSource源码如下
![](https://img.haomeiwen.com/i13091615/546082afb235324c.png)
8.3 pool原理分析:
MyBatis连接池里面使用集合来放置连接对象.有两个池子,一个空闲池,一个活动池。二者加起来等于是连接池能用的最大连接数。
![](https://img.haomeiwen.com/i13091615/9fa69c2989709802.png)
8.4 JDNI介绍:(扩展)
JNDI:一种标准的Java命名系统接口(模仿windows注册表,说白了就是把资源取个名字,再根据名字来找资源。)
![](https://img.haomeiwen.com/i13091615/fe52250a8230772a.png)
![](https://img.haomeiwen.com/i13091615/1545fc72deb3ac40.png)
9.动态sql
编译时无法确定,只有等到程序运行起来,在执行的过程中才能确定,这种SQL叫做动态SQL。
9.1 where if foreach 标签
![](https://img.haomeiwen.com/i13091615/679bd2d5b2d85720.png)
10.多表操作
10.1 一对一操作(association):
![](https://img.haomeiwen.com/i13091615/3fbd852287236f24.png)
10.2 多对多操作(collection):
通过account表中的uid进行关联
![](https://img.haomeiwen.com/i13091615/a74cd06157973046.png)
通过中间表account_user进行关联
![](https://img.haomeiwen.com/i13091615/c8bf2f26cb93ed3b.png)
10.3 延迟加载
SqlMapConfig.xml文件中追加配置
lazyLoadingEnabled:是否启用延迟加载,默认为false
aggressiveLazyLoading:是否启用按需加载,默认为true
![](https://img.haomeiwen.com/i13091615/29f9cab1e4fe70f4.png)
collection和assocation中追加标签嵌套查询
select:对应xml的namespace + sql的id
column:作为select语句的参数传入
![](https://img.haomeiwen.com/i13091615/eacf087b80dfd04a.png)
![](https://img.haomeiwen.com/i13091615/4ac991a440b7cb34.png)
网友评论