Mybatis知识点小结

parameterType(输入类型)

#{}和${}

<!-- 根据id查询用户信息 -->
    <select id="findUserById" parameterType="int" resultType="user">
        select * from user where id = #{id}
    </select>

#{}

使用占位符#{}可以有效防止 sql 注入,在使用时不需要关心参数值的类型,mybatis 会自动进行 java 类型和 jdbc 类型的转换。#{}可以接收简单类型值或 pojo 属性值,如果 parameterType传输单个简单类型值,#{}括号中可以是 value 或其它名称。

${}

${}和#{}不同,通过${}可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转
换, ${}可以接收简单类型值或 pojo 属性值,如果 parameterType 传输单个简单类型值,${}
括号中只能是 value。使用${}不能防止 sql 注入,但是有时用${}会非常方便。比如对姓名的模糊查询

<!-- 根据名称模糊查询用户信息 -->
    <select id="selectUserByName" parameterType="string" resultType="user">
        select * from user where username like '%${value}%'
    </select>

但是用${}方法容易被SQL注入,所以我们只在一些特定的场合才用${},比如说在用order by排序时,将排序方式用参数传入sql(desc,asc)时,只能用${}才能做到。

传递POJO对象

示例如下:

<!—传递pojo对象综合查询用户信息 -->
    <select id="findUserByUser" parameterType="user" resultType="user">
        select * from user where id=#{id} and username like '%${username}%'
    </select>

传递自定义包装对象

定义一个包装对象

public class QueryVo {
    private User user;
    //自定义用户扩展类
    private UserCustom userCustom;

mapper映射文件

<!—- 查询用户列表根据姓名和性别查询 -->
    <select id="findUserList" parameterType="queryVo" resultType="user">
        select * from user where useranme = #{user.username} and gender = #{user.gender}
    </select>

传递hashmap

<!-- 传递hashmap综合查询用户信息 -->
    <select id="findUserByHashmap" parameterType="hashmap" resultType="user">
        select * from user where id=#{id} and username like '%${username}%'
    </select>

resultType(输出类型)

简单输出类型

查询结果有且只有能有一条记录,并且是将查询结果的第一个字段的值作为输出的值

mapper文件:

<!-- 获取用户列表总数 -->
    <select id="findUserCount" parameterType="user" resultType="int">
        select count(1) from user
    </select>

mapper接口:

public int findUserCount(User user) throws Exception;

调用:

Public void testFindUserCount() throws Exception{
    //获取session
    SqlSession session = sqlSessionFactory.openSession();
    //获取mapper接口实例
    UserMapper userMapper = session.getMapper(UserMapper.class);
    User user = new User();
    user.setUsername("管理员");
    //传递Hashmap对象查询用户列表
    int count = userMapper.findUserCount(user);
    //关闭session
    session.close();
}

输出简单类型必须查询出来的结果集有一条记录(且只能是一条记录),最终将第一个字段的值转换为输出类型

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TDSSS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值