目录
1 Mybatis的XML配置文件
1.1 XML配置文件规范
1.2 XML配置文件实现
1.3 MybatisX的使用
2. Mybatis动态SQL
2.1 什么是动态SQL
2.2 动态SQL-if
2.2.1 条件查询
2.2.2更新
2.3 动态SQL-foreach
2.4 动态SQL-sql&include
1.mybatis入门
2.mybatis基本操作
Mybatis的开发有两种方式:
注解
XML
使用Mybatis的注解方式,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中。
在Mybatis中使用XML映射文件方式开发,需要符合一定的规范:
XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
XML映射文件的namespace属性为Mapper接口全限定名一致
XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。
resultType属性,指的是查询返回的单条记录所封装的类型。
第2步:编写XML映射文件
xml映射文件中的dtd约束,直接从mybatis官网复制
配置:XML映射文件的namespace属性为Mapper接口全限定名
配置:XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致
MybatisX是一款基于IDEA的快速开发Mybatis的插件,为效率而生。
MybatisX的安装:
结论:使用Mybatis的注解,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句
SQL语句会随着用户的输入或外部条件的变化而变化,称为:动态SQL
Mybatis中提供了很多实现动态SQL的标签,整Mybatis中的动态SQL就是掌握这些动态SQL标签。
但现在一般都ai生成就行
:用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接SQL。
要拼接的sql语句
示例:把SQL语句改造为动态SQL方式
动态SQL语句
测试方法:
@Test
public void testList(){
//性别数据为null、开始时间和结束时间也为null
List list = empMapper.list("张", null, null, null);
for(Emp emp : list){
System.out.println(emp);
}
}
修改测试方法中的代码,再次进行测试,观察执行情况
@Test
public void testList(){
//姓名为null
List list = empMapper.list(null, (short)1, null, null);
for(Emp emp : list){
System.out.println(emp);
}
}
@Test
public void testList(){
//传递的数据全部为null
List list = empMapper.list(null, null, null, null);
for(Emp emp : list){
System.out.println(emp);
}
}
使用
标签代替SQL语句中的where关键字
只会在子元素有内容的情况下才插入where子句,会自动去除子句的开头的AND或OR
测试方法
@Test
public void testList(){
//只有性别
List list = empMapper.list(null, (short)1, null, null);
for(Emp emp : list){
System.out.println(emp);
}
}
更新用到的sql语句 开头是update
同where 这里需要插入set关键字
:动态的在SQL语句中插入set关键字,并会删掉额外的逗号。(用于update语句中)
总结2.2.1 /2.2.2
where元素只会在子元素有内容的情况下才插入where子句,而且会自动去除子句的开头的AND或OR
动态地在行首插入 SET 关键字,并会删掉额外的逗号。(用在update语句中)
XML映射文件:
使用
遍历deleteByIds方法中传递的参数ids集合
看下代码:
delete from emp where id in
#{id}
在xml映射文件中配置的SQL,有时可能会存在很多重复的片段,此时就会存在很多冗余的代码
可以对重复的代码片段进行抽取,将其通过
标签封装到一个SQL片段,然后再通过
标签进行引用。
:定义可重用的SQL片段
:通过属性refid,指定包含的SQL片段
SQL片段: 重复的代码.
看下代码
select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time from emp
然后通过
标签在原来抽取的地方进行引用。
代码如下: