MyBatis令人喜欢的一大特性就是动态SQL。在使用JDBC的过程中,根据条件进行SQL的拼接是很麻烦且很容易出错的。MyBatis动态SQL的出现,解决了这个麻烦。
MyBatis通过OGNL来进行动态SQL的使用的。目前,动态SQL支持以下几种标签:
1数据准备为了后面的演示,创建了一个Maven项目mybatis-dynamic,创建了对应的数据库和表
DROPTABLEIFEXISTS`student`;
CREATETABLE`student`(
`student_id`int(10)unsignedNOTNULLAUTO_INCREMENTCOMMENT编号,
`name`varchar(20)DEFAULTNULLCOMMENT姓名,
`phone`varchar(20)DEFAULTNULLCOMMENT电话,
`email`varchar(50)DEFAULTNULLCOMMENT邮箱,
`sex`tinyint(4)DEFAULTNULLCOMMENT性别,
`locked`tinyint(4)DEFAULTNULLCOMMENT状态(0:正常,1:锁定),
`gmt_created`datetimeDEFAULTCURRENT_TIMESTAMPCOMMENT存入数据库的时间,
`gmt_modified`datetimeDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMPCOMMENT修改的时间,
`delete`int(11)DEFAULTNULL,
PRIMARYKEY(`student_id`)
)ENGINE=InnoDBAUTO_INCREMENT=7DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4__ai_ciCOMMENT=学生表;
对应的项目结构
2if标签if标签是我们最常使用的。在查询、删除、更新的时候很可能会使用到。必须结合test属性联合使用。
2.1在WHERE条件中使用if标签这是常见的一种现象,我们在进行按条件查询的时候,可能会有多种情况。
2.1.1查询条件根据输入的学生信息进行条件检索
当只输入用户名时,使用用户名进行模糊检索;
当只输入性别时,使用性别进行完全匹配
当用户名和性别都存在时,用这两个条件进行查询匹配查询
2.1.2动态SQL接口函数
/**
*根据输入的学生信息进行条件检索
*1.当只输入用户名时,使用用户名进行模糊检索;
*2.当只输入邮箱时,使用性别进行完全匹配
*3.当用户名和性别都存在时,用这两个条件进行查询匹配的用
*
paramstudent*
return*/
ListStudentselectByStudentSelective(Studentstudent);
对应的动态SQL
selectid="selectByStudentSelective"resultMap="BaseResultMap"parameterType="