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

经验分享 程序员 微信小程序 职场和发展