5.MyBatis的各种查询
1)查询一个实体类对象
在2.搭建MyBatis中以及涉及,在此不再具体介绍
2)查询一个集合
在2.搭建MyBatis中以及涉及,在此不再具体介绍
3)查询求和
在MyBatis中为java常用的类型设置了类型别名,可在MyBatis的官方文档中查询
<!-- int sumAllUser()-->
<select id="sumAllUser" resultType="int">
select count(*) from t_user
</select>
4)查询结果为一个map
查询的结果会以字段为键,查询结果为值加入到map中
<!-- Map<String,Object> getuserByIdToMap(@Param("id") int id);-->
<select id="getuserByIdToMap" resultType="map">
select username from t_user where id = #{id}
</select>
5)查询结果为多个条时,且结果要转换为map
1.将mapper接口方法的返回值设置为泛型为map的list集合
<!-- List<Map<String, Object>> getAllUser()-->
<select id="getAllUser" resultType="map">
select * from t_user
</select>
2.可以将每条数据转换的map集合放在一个大的map中,但必须通过@MapKey注解,将查询的某好字段的值作为大map的键
<!--
@MapKey("id")
Map<String,Object> getAllUser();-->
<select id="getAllUser" resultType="map">
select * from t_user
</select>
6.特殊的SQL的执行
1)模糊查询
模糊查询时的%代表匹配任意长度的任意字段,但由于需要用的%,所有#{}在‘’内就会出现使用#{}报错的问题
解决方法
1.使用${}
// 用户名模糊查询
List<user> getUserByLike(@Param("mohu") String mohu);
<select id="getUserByLike" resultType="user">
select * from t_user where username like '%${mohu}%'
</select>
2.使用concat字符串拼接函数
<!-- List<user> getUserByLike(@Param("mohu") String mohu)-->
<select id="getUserByLike" resultType="user">
select * from t_user where username like concat('%',#{mohu},'%')
</select>
3.用双引号
<!-- List<user> getUserByLike(@Param("mohu") String mohu)-->
<select id="getUserByLike" resultType="user">
select * from t_user where username like "%"#{mohu}"%"
</select>
2)批量删除
<!-- void deleteMoreUser(@Param("ids") String ids)-->
<delete id="deleteMoreUser">
delete from t_user where id in(${ids})
</delete>
3)动态设置表名
表名不能用#{}
<select id="table" resultType="user">
select * from ${tablename}
</select>
4)添加功能获取自增的主键
如下,自增的主键会放在实体类user的id属性中
- userGenerateKeys属性:是否使用自增的主键
- keyPropert属性:将添加的数据的自增主键为实体类类型的参数的属性赋值
<!-- void insertUser(user user)-->
<!-- userGenerateKeys属性:是否使用自增的主键
keyPropert属性:将添加的数据的自增主键为实体类类型的参数的属性赋值
-->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into t_user values(null,#{username},#{password},#{age},#{gender},#{email})
</insert>