大家好,欢迎来到IT知识分享网。
当接口参数比较多的时候,可以使用JavaBean来封装参数,当参数比较少的情况,可以使用Map类型或者使用@Param注解
1.userMapper接口类
package com.aruisi.mybatis.mapper;
import com.aruisi.mybatis.dto.UserDTO;
public interface UserMapper {
public UserDTO selectUserByNameAndSex(String loginName,Integer sex);
}
2.xml配置文件
<?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="com.aruisi.mybatis.mapper.UserMapper">
<select id="selectUserByNameAndSex" resultType="com.aruisi.mybatis.dto.UserDTO">
SELECT id,
login_name AS loginName,
sex,
age,
create_time AS createTime
FROM `user` WHERE login_name=#{loginName} and sex=#{sex}
</select>
</mapper>
3.测试方法
package com.aruisi.mybatis.test;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.aruisi.mybatis.dto.UserDTO;
import com.aruisi.mybatis.mapper.UserMapper;
public class TestSelectUserByNameAndSex {
public static void main(String[] args) {
/**
* java 7增强了try语句的功能,圆括号可以声明、初始化一个或多个资源(必须在程序结束时显示关闭的资源)
* try语句在该语句结束时会自动关闭这些资源
*/
try (
//读取配置文件信息
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
//参数为true,设置事务是自动提交
SqlSession sqlSession = new SqlSessionFactoryBuilder().build(reader).openSession(true);
){
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
UserDTO user = userMapper.selectUserByNameAndSex("王五", 1);
System.out.println("============="+user.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
测试结果会报如下错误:
Parameter ‘loginName’ not found. Available parameters are [1, 0, param1, param2]
### Cause: org.apache.ibatis.binding.BindingException: Parameter ‘loginName’ not found. Available parameters are [1, 0, param1, param2]
报这个错误的原因是mybatis默认可用的xml参数只用
[1, 0, param1, param2],
这四个参数都是mybatis根据参数位置自定义的名字,这时将xml中的loginName改为#{0}或者#{param1},将sex改为#{1}或者#{param2},selectUserByNameAndSex这个接口方法就能正常被调用
但是这种写法代码可读性很差,不利于维护,这时可以使用@Param注解
将接口方法给为
public UserDTO selectUserByNameAndSex(@Param(“loginName”)String loginName,@Param(“sex”)Integer sex);
总结:
给参数加上@Param注解后,mybatis会自动将参数封装成map类型,@Param注解的值
@Param(“loginName”)作为map的key,在xml中就可以使用注解的值来使用参数。当时当只有一个参数时,我们并没有使用注解,code也能运行,这是因为在只有一个参数时,mybatis不关心这个参数叫什么名字就会直接把这个唯一的参数值拿来使用。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25523.html