框架--Mybatis 2
目录
一.结果处理
1.#{} 和${}区别
区别:
(1)底层实现不同
(2)使用场景不同
2.特殊处理定义resultMap
二.多表关联处理结果集
1.多表查询
1)准备工作
2)根据id查一个学生
(1)关联查询方式1:
(2)关联查询方式2:嵌套查询
3)查多个学生
(1)根据专业id查询学生信息
(2)查询每个专业下的学生
①关联查询方式1:
②关联查询方式2:分两次查询
2.注解方式
三.Mybatis 动态SQL
1.if元素
3.trim 元素
4.Choose 元素
5.Set 元素
修改老师表中部分信息
6.foreach 元素
批量删除表中信息
动态传递列名
一.结果处理
1.#{} 和${}区别
${}代码案例:根据密码降序排列
(1)AdminDao中:
(2)AdminMapper中:
(3)test:
区别:
(1)底层实现不同
#{ } 采用预编译方法,防止sql注入更加安全
${ } 采用字符串拼接,直接将值拼接到sql中
(2)使用场景不同
#{ } 一般用于向sql中的列传递
${ } 一般用于向sql动态传递列名 例如:排序时order by后面的列名是可以改变的
2.特殊处理定义resultMap
<resultMap id="adminResultMap" type="Admin">
<id column="id" property="id"/>
<result property="account" column="account" />
<result property="password" column="password" />
</resultMap>
(1). resutlMap 的 id 属性是resutlMap的唯一标识,本例中定义为“adminResultMap”
(2). resutlMap 的 type 属性是映射的POJO类型
(3). id 标签映射主键,result标签映射非主键
(4). property 设置对象属性名称,column映射查询结果的列名称
案例代码:
①AdminDao:
②
③
④结果:
⑤总结:此案例是因为列名(adminid)与属性名(id)不同导致无法获得id,引入resultMap。多用于多表查询。
二.多表关联处理结果集
1.多表查询
1)准备工作
(1)创建表格
(2)创建模型类
(3)创建StudentMapper和StudentDao
(4)配置StudentMapper地址
2)根据id查一个学生
以下两种方式掌握一种即可
(1)关联查询方式1:
直接通过表关联查询出我们需要的数据
获取信息:
System.out.println(student.getId()); System.out.println(student.getName()); System.out.println(student.getMajor().getName());
(2)关联查询方式2:嵌套查询
先查询主表(学生表),通过主表中的外键,再通过外键查询关联的另一个表中数据
3)查多个学生
(1)根据专业id查询学生信息
名字对应关系:
(2)查询每个专业下的学生
①关联查询方式1:
查询所有专业,以及各专业下学生的信息
②关联查询方式2:分两次查询
分页采用这种方法
2.注解方式
@Insert : 插入sql , 和xml insert sql语法完全一样
@Select : 查询sql, 和xmlselect sql语法完全一样
@Update : 更新sql, 和xmlupdatesql语法完全一样
@Delete : 删除sql, 和xmldelete sql语法完全一样
@Param : 入参
@Results : 设置结果集合
@Result : 结果
三.Mybatis 动态SQL
动态SQL,可以在sql中添加逻辑判断。
思考:如果上面的这条sql语句中没有默认的 type=1会是什么样子的。
1.if元素
test属性条件成立,执行if标签体,不成立就不执行
查询条件:
2.<where>元素
where标签,当where标签中if语句有条件成立时,就会动态添加where关键字,还可以删除where后面紧跟着的关键字 ,例如and、or
3.trim 元素
trim 当条件判断成立时,可以自定义前缀关键字和后缀关键字
4.Choose 元素
5.Set 元素
Set 元素可以把最后一个逗号去掉
修改老师表中部分信息
另一种方法: