(着重看下文的代码示例,重要的事情说三遍)* 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);
}
}