mybatis学习教程——@Param注解使用[亲测有效]

mybatis学习教程——@Param注解使用[亲测有效]当接口参数比较多的时候,可以使用JavaBean来封装参数,当参数比较少的情况,可以使用Map类型或者使用@Param注解1.userMapper接口类packagecom.aruisi.mybatis.mapper;importcom.aruisi.mybatis.dto.UserDTO;publicinterfaceUserMapper{ publicUserDTOse…

大家好,欢迎来到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这个接口方法就能正常被调用


mybatis学习教程——@Param注解使用[亲测有效]


但是这种写法代码可读性很差,不利于维护,这时可以使用@Param注解


将接口方法给为

public UserDTO selectUserByNameAndSex(@Param(“loginName”)String loginName,@Param(“sex”)Integer sex);

mybatis学习教程——@Param注解使用[亲测有效]

总结:

     给参数加上@Param注解后,mybatis会自动将参数封装成map类型,@Param注解的值
@Param(“loginName”)作为map的key,在xml中就可以使用注解的值来使用参数。当时当只有一个参数时,我们并没有使用注解,code也能运行,这是因为在只有一个参数时,mybatis不关心这个参数叫什么名字就会直接把这个唯一的参数值拿来使用。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25523.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信