MyBatis学习05--parametertype参数深入

package com.itheima.dao;

import com.itheima.pojo.QueryVo;
import com.itheima.pojo.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Queue;

/**
 * @author qiuji
 * @version 1.0
 * @date 2021-08-08 17:01
 *  mybatis的映射配置文件的parameterType参数类型:
 *  1. 单个参数,方法就以简单类型传入即可,那么在映射配置文件中的parameterType的值就是这个简单类型的别名
 *  *    在SQL语句中引入简单类型的参数#{任意字符串}
 *
 * 2. 将多个参数封装到一个POJO中,那么在映射配置文件中parameterType的值就是这个POJO的全限定名或者别名
 *  *    在SQL语句中引入参数#{POJO的属性名}或者'${POJO的属性名}'
 *  *
 * 3. 将多个参数封装到一个Map中(要封装的参数没有对应的POJO),那么在映射配置文件中parameterType的值是map,
 *  *    在SQL语句中引入参数#{map的key}或者'${map的key}'
 *  *
 * 4. 将多个参数封装到一个POJO的包装对象中
 *  *       什么是POJO的包装对象,也就是说POJO中的属性类型又是一个其他的POJO类型, 那么我们在映射配置文件中的parameterType的值就是包装类型的别名
 *  *    在SQL语句中引入参数#{属性名.属性名}
 *
 */
public interface UserDao {
    User findById(int id);

    User findByUsernameAndAddress(@Param("uname")String username,@Param("addr")String address);

    void addUser(User user);

    void updateUser(Map map);

    List<User> searchByCondition(QueryVo queryVo);

}


UserDao的映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
    根标签mapper,一个映射配置文件,就对应一个dao接口
    根标签的namespace属性的值就对应dao接口的全限定名
-->
<mapper namespace="com.itheima.dao.UserDao">

    <select id="findById" parameterType="int" resultType="User">
        select * from t_user where uid=#{id}
    </select>

    <select id="findByUsernameAndAddress" resultType="User">
        select * from t_user where username=#{uname} and address=#{addr}
    </select>

    <select id="addUser" parameterType="User">
        insert into t_user(username,sex,birthday,address) values(#{username},#{sex},#{birthday},#{address})
    </select>

    <select id="updateUser" parameterType="map">
    update t_user set username=#{username},sex=#{sex} where uid=#{uid}
    </select>

    <select id="searchByCondition" parameterType="QueryVo" resultType="User">
        select * from t_user where sex=#{queryCondition.sex} and address=#{queryCondition.address}
        limit #{offset},#{pageSize}
    </select>

</mapper>

小结

1.执行的SQL语句需要一个参数,那么可以使用简单类型的参数

2.如果执行的SQL语句需要多个参数
1.使用多个参数
2.使用pojo对象类型
3.使用map类型
4.我们使用map类型

3.如果我们执行的SQL语句需要的数据很复杂,pojo里面的属性还是pojo类型,那么我们就使用pojo的包装类型

posted @ 2021-08-09 00:21  秋吉  阅读(148)  评论(0编辑  收藏  举报