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的包装类型