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 ( 无需改动代码 ) ,这就是分步查询及开了延迟加载的好处。