mybatis 复习 2 - 动态查询
select 需要加ResultType或者ResultMap ResultType:默认设置的映射关系( 也就是字段名和属性名一致) ResultMap:设置自定义的映射关系
在Mybatis的核心文件如果是安package引入映射文件,则接口类要和xml映射文件在同样的类路径下
*mybatis获取参数的两种方式 :${ } #{ } ${ }本质字符串拼接 ++有sql注入的安全风险++ #{ }本质占位符赋值
-
MyBatis获取参数值的各种情况: mapper接口方法的参数为单个的字面量类型 可以通过KaTeX parse error: Expected EOF, got # at position 6: { }和l#̲{ }以任意的名称获取参数值,…{ }的单引号问题
-
mapper接口方法的参数为多个时 此时ayBatis会将这些参数放在一个map集合中,以两种方式进行存储 : 以arg0, arg1…为键,以参数为值 以param1 , param2…为键,以参数为值
因此只需要通过#{ }和 以键的方式访问值即可,但是需要注 意 ′ { }以键的方式访问值即可,但是需要注意 以键的方式访问值即可,但是需要注意′{ }’ 的单引号问题
*若查询出的数据有多条
-
a>可以通过实体类类型的List集合接收 b>可以通过map类型的List集合接收 c>可以在mapper接口的方法上添加@MapKey注解,此时就可以将每条数据转换的map集合作为值,以某 注意:一定不能通过实体类对象接收,此时会抛异常TooNanyResultsException
一对多分步查询
接口:
Dept selectDept(@Param("did") int did); User selectUsers(@Param("did") int did);
映射文件
<resultMap id="selectUsersByDeptId" type="Dept"> <id property="did" column="did"/> <result property="uid" column="uid"/> <collection property="users" select="mapper.UserMapper.selectUsers" column="did"> </collection> </resultMap> <select id="selectDept" resultMap="selectUsersByDeptId"> select * from dept where did = #{ did} </select> <select id="selectUsers" resultType="User"> select * from user where did = #{ did} </select>
核心配置文件
开启延迟加载
<settings> <!--将表中字段的下划线自动转换为驼峰--> <setting name="mapUnderscoreToCamelCase" value="true"/> <!--开启延迟加载--> <setting name="lazyLoadingEnabled" value="true"/> </settings>
一对多查询 ,查询部门号及其下的员工 ,看控制台,会执行两步sql
看控制台,如果只查询部门则只会执行第一步sql ( 无需改动代码 ) ,这就是分步查询及开了延迟加载的好处。
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
新装虚拟机linux碰到的一些问题总结