【Mybatis基础学习笔记2】MyBatis获取参数值的两种方式(重点)

(着重看下文的代码示例,重要的事情说三遍)* 3

0、获取参数的两种形式

MyBatis获取参数值的两种方式:${}和#{}

  • ${}的本质就是字符串拼接,#{}的本质就是占位符赋值
  • ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号

1、单个字面量类型的参数

若mapper接口中的方法参数为单个的字面量类型,此时可以使用$ {}和#{}以任意的名称获取参数的值,注意${}需要手动加单引号

2、多个字面量类型的参数

若mapper接口中的方法参数为多个时,此时MyBatis会自动将这些参数放在一个map集合中,以arg0,arg1…为键,以参数为值;以param1,param2…为键,以参数为值;因此只需要通过$ {}和# {}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号, 若mapper接口中的方法参数为单个的字面量类型,此时可以使用 $ { } 和 # { } 以任意的名称获取参数的值,注意${}需要手动加单引号

3、map集合类型的参数

若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,将这些数据放在map中只需要通过$ {}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号

4、实体类类型的参数

若mapper接口中的方法参数为实体类对象时
此时可以使用$ {}和#{},通过访问实体类对象中的属性名获取属性值,注意${}需要手动加单引号

5、使用@Param标识参数

可以通过@Param注解标识mapper接口中的方法参数
此时,会将这些参数放在map集合中,以@Param注解的value属性值为键,以参数为值;以param1,param2…为键,以参数为值;只需要通过$ {}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号

6、具体实现代码

  • User.java
public class User {
    
    
    private Integer uid ;
    private String uname;
    private Integer uage;
    private Integer password;

    public User(Integer uid, String uname, Integer uage , Integer password) {
    
    
        this.uid = uid;
        this.uname = uname;
        this.uage = uage;
        this.password = password;
    }
    public User(){
    
    }

    public Integer getUid() {
    
    
        return uid;
    }

    public void setUid(Integer uid) {
    
    
        this.uid = uid;
    }

    public String getUname() {
    
    
        return uname;
    }

    public void setUname(String uname) {
    
    
        this.uname = uname;
    }

    public Integer getUage() {
    
    
        return uage;
    }

    public void setUage(Integer uage) {
    
    
        this.uage = uage;
    }
     public void setPassword(Integer password) {
    
    
        this.password = password;
    }

    public Integer getPassword() {
    
    
        return password;
    }

    @Override
    public String toString() {
    
    
        return "User{" +
                "uid=" + uid +
                ", uname='" + uname + '\'' +
                ", uage=" + uage +
                '}';
    }
}

  • userMapper.java
public interface UserMapper {
    
    
	/*
     * 1、根据用户名查询用户信息,单值传参
     *
     */
 	User getUserByUsername(String username);
}
/*
    */2、验证登录,多值传参
    * */
    User checkLogin(String uname , Integer password);
    /*

 /*
     * 3、验证登录,参数为 map
     * */
    User checkLoginByMap(Map<String ,Object> map);
    /*
    * 4、添加用户信息,参数为实体类
    *
    * */
    int insertUser(User user);
    /*
    * 5、验证登录(使用@param)
    * */
    User checkLoginByParam(@Param("uname") String uname , @Param("password") Integer password);
  • userMapper.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.atguigu.mybatis.mapper.UserMapper"><!--java包下用.-->
   
    <!--User getUserByUsername(String username);-->
	<!--1、单值传参-->
    <select id="getUserByUsername" resultType="com.atguigu.mybatis.pojo.User">
        select * from users where uname ='${username}'
   	 <!--select * from users where uname = #{username}-->
    </select>
    <!--2、多值传参-->
     <!--User checkLogin(String uname , String password);-->
    <select id="checkLogin" resultType="com.atguigu.mybatis.pojo.User">
        select * from where uname =#{arg0} and password = '${arg1}'
    <!--select * from where uname =#{param1} and password = '${param2}'-->
    <!--select * from where uname =#{param1} and password = '${arg1}'-->
    </select>
    <!--User checkLogin2(Map<String ,Object> map);-->
	<!--3、利用Map传参-->
    <select id="checkLoginByMap" resultType="com.atguigu.mybatis.pojo.User">
        select * from users where uname =#{uname} and password = #{password}
    </select>
    <!--4、实体类传参-->
    <!--int insertUser(User user);-->
    <select id="insertUser" resultType="com.atguigu.mybatis.pojo.User">
        insert into users values(null,#{uname},#{uage},#{password})
    </select>
    <!--5、使用@Param注解 传参-->
    <!--User checkLoginByParam(@Param("uname") String uname , @Param("password") Integer password);-->
    <select id="checkLoginByParam" resultType="com.atguigu.mybatis.pojo.User">
        select * from users where uname =#{uname} and password = #{password}
    </select>
</mapper>
  • mapperTest.java
public class MybatisTest {
    
    
	@Test
    public void testUpdate() throws IOException {
    
    
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory= new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //1、参数是单个值
        User userByName = mapper.getUserByUsername("李四");
        System.out.println(userByName);
        //2、参数是多个值
        User user = mapper.checkLogin("李四", 123456);
        System.out.println(user);
        //3、参数是map
        Map<String ,Object> map = new HashMap<>();
        map.put("username", "李四");
        map.put("password","123456");
        User userByMap = mapper.checkLoginByMap(map);
 		System.out.println(userByMap);
 		//4、参数是实体类
 		mapper.insertUser(new User(5,"李武",18,123456));
 		//5、使用@Param注解传参
 		User userByParam = mapper.checkLoginByParam("李武",123456);
        System.out.println(userByParam);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_45486709/article/details/123272934
今日推荐