Mybatis中获取参数值的两种方式:${} 和 #{}
${}本质是字符串拼接
#{}本质是占位符赋值
1.1 mapper接口方法的参数为单个的字面变量类型(${} 和 #{}都可以用应该注意${}的''问题 应该用'${}')
/*
* 根据用户名获取用户信息
* */
Users getUserByUsername(String username);
<select id="getUserByUsername" resultType="Users">
/*
select * from users where name = '${username}'
这种方式下也是可以成功的
直接这个参数'${username}'
*/
select * from users where name = #{username}
</select>
@Test
public void testgetUserByUsername(){
SqlSession sqlsession = SQLsession.getSqlsession();
UserMapper mapper = sqlsession.getMapper(UserMapper.class);
Users user = mapper.getUserByUsername("双");
System.out.println(user);
}
1.2 mapper接口方法的参数为多个的字面变量类型(${} 和 #{}都可以用应该注意${}的''问题 应该用'${}')
此时的mybatis会把参数放入到一个map集合中,可以用两种方式进行存储
a.可以通过arg0,arg1...为key,以参数为值
d.可以通过param1,param2...为key,以参数为值的形式获取
/*
* 登录验证(数据库没有password字段就用age代替了)
* */
Users checkLogin(String username ,int age);
<select id="checkLogin" resultType="Users">
/*
select * from users where name = #{arg0} and age = #{arg1}
select * from users where name = #{param1} and age = #{param2}
select * from users where name = '${arg0} 'and age = '${arg1}'
select * from users where name = '${param1}' and age = '${param2}'
都可以成功
*/
select * from users where name = #{arg0} and age = #{arg1}
</select>
/*
* 情况二测试
* */
@Test
public void testcheckLogin(){
SqlSession sqlsession = SQLsession.getSqlsession();
UserMapper mapper = sqlsession.getMapper(UserMapper.class);
Users user = mapper.checkLogin("双双",22);
System.out.println(user);
}
1.3 若mapper方法的参数有多个时,可以手动放到一个map中存储
(${} 和 #{}都可以用应该注意${}的''问题 应该用'${}' 自己设置键值不是mybatis设置的)
/*
* 登录验证(数据库没有password字段就用age代替了)
* */
Users checkLoginByMap(Map<String,Object> map);
<select id="checkLoginByMap" resultType="Users">
/*
select * from users where name = #{name} and age = #{age}
select * from users where name = '${name} 'and age = '${age}'
都可以成功
*/
select * from users where name = #{name} and age = #{age}
</select>
/*
* 情况三测试
* */
@Test
public void testcheckLoginByMap(){
SqlSession sqlsession = SQLsession.getSqlsession();
UserMapper mapper = sqlsession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<String, Object>();
map.put("name",20);
map.put("age",12);
Users user = mapper.checkLoginByMap(map);
System.out.println(user);
}
1.4 mapper接口中方法的参数是实体参数
(${} 和 #{}都可以用 (以属性的方式访问属性值) 应该注意${}的''问题 应该用'${}')
//添加
int insertUsers(Users users);
<insert id="insertUsers">
insert into users values ('2022-08-16 12:15:23',null ,18,'小双双',22,'helen@sina.com',1,0)
</insert>
/*
* 情况四测试
* */
@Test
public void testinsertUser(){
SqlSession sqlsession = SQLsession.getSqlsession();
UserMapper mapper = sqlsession.getMapper(UserMapper.class);
int user = mapper.insertUsers(new Users(null,null ,1,"shang",12,"12233",0,0));
System.out.println(user);
}
1.5 命名参数@Param (${} 和 #{}都可以用应该注意${}的''问题 应该用'${}')
此时的mybatis会把参数放入到一个map集合中,可以用两种方式进行存储
a.可以通过@Param注解的值为key,以参数为值
d.可以通过param1,param2...为key,以参数为值的形式获取
/*
* 登录验证(数据库没有password字段就用age代替了)
* */
Users checkLoginByParam(@Param("username")String name ,@Param("age")int age );
<select id="checkLoginByParam" resultType="Users">
select * from users where name = #{username} and age = #{age}
</select>
/*
* 情况五测试
* */
@Test
public void testcheckLoginByParam(){
SqlSession sqlsession = SQLsession.getSqlsession();
UserMapper mapper = sqlsession.getMapper(UserMapper.class);
Users user = mapper.checkLoginByParam("双双",22);
System.out.println(user);
}