3. Mybatis获取参数值的两种方式
Mybatis获取参数值的方式有两种,分别是: ${}和#{}
${}的本质是字符串拼接,#{}的本质是占位符赋值
(1)单个字面量类型
此时可以使用#{}和 {}没有单引号,需要手动添加单引号。
(2)多个字面量类型
多个字面量类型,mybatis会把参数以两种形式存到一个map集合中。
一种是以arg0、arg1为key的,另外一种会把param1、param2为key存到map中。
因此可以使用#{}或${}以这两种形式中的任意一种来获取参数值,可以混用。
(3)map集合类型的参数
mybatis可以自动设置参数到map集合中,当然我们也可以手动设置参数到map集合中。
可以使用#{}和${}的方式以任意内容获取参数值。
(4)实体类类型的参数
只需要通过#{}和{}的单引号问题。
(5)在mapper接口方法的参数上设置@Param注解
此时mybatis会将参数放在map中,以两种方式存储
- 以@Param 的value属性为key,参数为值
- 以param1, param2为key,参数为值
然后以#{}和${}访问即可
4. mybatis的各种查询功能
1. 关于实体类型查单条数据和查多条数据
- 查单条数据可以将接口方法的返回值类型写为实体类型或list集合类型。
- 查多条数据不可以将接口方法的返回值类型写为实体类型的,不然会报TooManyResultsException异常。
package cn.chenmanman.mapper;
import cn.chenmanman.pojo.User;
import java.util.List;
public interface SelectMapper {
/**
* <p>通过id查询用户信息</p>
* @param id 用户id
* @return 通过id查询到的用户数据的实体
* */
User selectUserById(Integer id);
/**
* <p>查询所有的用户信息</p>
* @return 所有用户信息所组成的集合
* */
List<User> selectUserAll();
}
<?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 namespace="cn.chenmanman.mapper.SelectMapper">
<!-- 根据用户id查单条 -->
<select id="selectUserById" resultType="User">
select * from user where id = #{id}
</select>
<!-- 查询所有的用户信息 -->
<select id="selectUserAll" resultType="User">
select * from user
</select>
</mapper>
2. 关于单值类型的查询
Integer、String这些类型默认也都有设置别名的,所以可以简写并且大小写均可。
package cn.chenmanman.mapper;
import cn.chenmanman.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface SelectMapper {
/**
* <p>通过id查询用户信息</p>
* @param id 用户id
* @return 通过id查询到的用户数据的实体
* */
User selectUserById(Integer id);
/**
* <p>查询所有的用户信息</p>
* @return 所有用户信息所组成的集合
* */
List<User> selectUserAll();
/**
* <p>查询有多少条</p>
* @return 条数
* */
Integer getCount();
/**
* <p>通过id查询用户名</p>
* @param id 用户id
* @return 用户名
* */
String selectUsernameById(@Param("id") Integer id);
}
<?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 namespace="cn.chenmanman.mapper.SelectMapper">
<select id="selectUserById" resultType="User">
select * from user where id = #{id}
</select>
<select id="selectUserAll" resultType="User">
select * from user
</select>
<select id="getCount" resultType="Int">
select count(*) from user
</select>
<select id="selectUsernameById" resultType="String">
select username from user where id = #{id}
</select>
</mapper>
3. 关于map的单条查询以及多条查询
map查询单条只需要将resultType设置为map就行,但是如果要查询多条大概分为List泛型和@MapKey注解配合
- map查询单条
package cn.chenmanman.mapper;
import cn.chenmanman.pojo.User;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
public interface SelectMapper {
/**
* <p>通过id查询用户信息</p>
* @param id 用户id
* @return 通过id查询到的用户数据的实体
* */
User selectUserById(Integer id);
/**
* <p>查询所有的用户信息</p>
* @return 所有用户信息所组成的集合
* */
List<User> selectUserAll();
/**
* <p>查询有多少条</p>
* @return 条数
* */
Integer getCount();
/**
* <p>通过id查询用户名</p>
* @param id 用户id
* @return 用户名
* */
String selectUsernameById(@Param("id") Integer id);
Map<String, Object> selectUserByIdToMap(@Param("id") Integer id);
@MapKey("id")
Map<String,Object> selectUserAllToMap();
}
<?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 namespace="cn.chenmanman.mapper.SelectMapper">
<select id="selectUserById" resultType="User">
select * from user where id = #{id}
</select>
<select id="selectUserAll" resultType="User">
select * from user
</select>
<select id="getCount" resultType="Int">
select count(*) from user
</select>
<select id="selectUsernameById" resultType="String">
select username from user where id = #{id}
</select>
<select id="selectUserByIdToMap" resultType="Map">
SELECT * FROM user where id = #{id}
</select>
<select id="selectUserAllToMap" resultType="Map">
SELECT * FROM user
</select>
</mapper>
- @MapKey注解配合,配置查询到的map的key
package cn.chenmanman.mapper;
import cn.chenmanman.pojo.User;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
public interface SelectMapper {
/**
* <p>通过id查询用户信息</p>
* @param id 用户id
* @return 通过id查询到的用户数据的实体
* */
User selectUserById(Integer id);
/**
* <p>查询所有的用户信息</p>
* @return 所有用户信息所组成的集合
* */
List<User> selectUserAll();
/**
* <p>查询有多少条</p>
* @return 条数
* */
Integer getCount();
/**
* <p>通过id查询用户名</p>
* @param id 用户id
* @return 用户名
* */
String selectUsernameById(@Param("id") Integer id);
Map<String, Object> selectUserByIdToMap(@Param("id") Integer id);
@MapKey("id")
Map<String,Object> selectUserAllToMap();
}
<?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 namespace="cn.chenmanman.mapper.SelectMapper">
<select id="selectUserById" resultType="User">
select * from user where id = #{id}
</select>
<select id="selectUserAll" resultType="User">
select * from user
</select>
<select id="getCount" resultType="Int">
select count(*) from user
</select>
<select id="selectUsernameById" resultType="String">
select username from user where id = #{id}
</select>
<select id="selectUserByIdToMap" resultType="Map">
SELECT * FROM user where id = #{id}
</select>
<select id="selectUserAllToMap" resultType="Map">
SELECT * FROM user
</select>
</mapper>