mybatis的动态SQL以及连接池详解
mybatis动态sql及连接池
mybatis根据传入参数的不同来查询。
<select id="findbycondition" parametertype="com.domain.user" resulttype="com.domain.user"> select * from users where 1=1 <if test="name != null"> and name= #{name} </if> </select>
如果太多的话,就不写where1=1.在if外面嵌套if标签。
<select id="findbycondition" parametertype="com.domain.user" resulttype="com.domain.user"> select * from users <where> <if test="name != null"> and name= #{name} </if> </where> </select>
同时,第一个if语句中的and将会被省略!!!
mybatis中的范围查询,in
mybatis范围查询,例如select * from users where age in (11,12,13);
外部定义一个包装类,包装ages作为属性,下列以id为例子(在外部定义集合来包装)
<select id="findbyrange" parametertype="com.domain.queryvo" resulttype="com.domain.user"> select * from users <where> //where子句的开头,and或者是or,将会被where元素去除。 <if test="ids != null and ids.size()>0">这里的判断条件是java语句 <foreach collection="ids" open="and id in (" close=")" item="id" separator=","> #{id} </foreach> </if> </where> </select>
sql语句 select 字段 from where id in{?}
<foreach>标签用于遍历集合,它的属性;
-
collection
代表要遍历的集合元素(属性名称) -
open
代表语句的开始部分 -
close
代表语句的结束部分 -
item
代表遍历集合的每个元素,生成的变量名 -
sperator
代表元素之间的分割符
连接池
连接池:在实际开发中使用,可以减少我们获取连接所消耗的时间。
mybatis连接池提供了3种方式的配置
在主配置文件中的datasource属性中配置
-
type
取值 pooled采用传统的javax.sql.datasource规范中的连接池 -
unpolled
虽然实现了datasource的标准,但是没有使用池的概念(connection对象) -
jndi
使用服务器提供的jndi技术来取得datasource对象。注意:如果不是web工程和maven的war工程,是不可使用的。
备注:mybatis中事务的操控,底层是通过操控connection对象设置的。
-
pooled
:从池中拿出连接,最后把连接放回池里。 -
unpooled
创建连接,结束连接(jdbc连接方式)
动态sql与多表的连接查询
动态sql
① where和if标签
② foreach循环标签
注意事项:
③ 批量添加
④ selectkey
多表的连接查询
① 多对一查询
a). 建表时,外键一定是建在多的一端。
b). 在多的一端的实体类中创建一个一的一端的对象属性。
c). 连接查询的sql语句
- ①select … from 表1 left join 表2 on 连接条件。连接条件一般就是外键=指向的主键。
- ② resultmap
i. id,result配置一般的属性
ii. association标签配置多余的字段,property和javatype属性。子标签id和result
② 多对一查询如何做到修改功能
③ 一对多查询
与多对一查询不同的地方:
a)创建实体类时,在一的一端创建一个list属性,list中放的是多的一端的对象。
b)详细的resultmap配置
小结
一对多的查询用的相对少一些。在查询一的一端的同时查询展示外键与一的 一端的主键相同的数据。
例:查询部门表同时查询展示所有属于该部门的员工。
多对以的查询用的相对多一些。在查询多的一端的同时查询展示主键与多的一端的外键相同的数据。例:查询员工表同时查询展示该员工所属的部门信息。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
推荐阅读
-
mybatis的动态SQL以及连接池详解
-
Mybatis动态sql、if与where的使用、sql片段、foreach遍历、Mybatis的关联查询一对一、一对多、多对多、Mybatis的延时加载
-
MyBatis动态SQL中的trim标签的使用方法
-
Mybatis中动态SQL,if,where,foreach的使用教程详解
-
Mybatis下动态sql中##和$$的区别讲解
-
mybatis动态sql之Map参数的讲解
-
Mybatis模糊查询和动态sql语句的用法
-
Mybatis利用OGNL表达式处理动态sql的方法教程
-
Mybatis利用OGNL表达式处理动态sql的方法教程
-
mybatis防止SQL注入的方法实例详解