MyBatis:获取参数的两种方式#{ }和${ }
jdbc 中原始的赋值方式(占位符和字符串拼接)
public void testJdbc() throws Exception {
String username = "admin";
Class.forName("");
Connection connection = DriverManager.getConnection("","","");
//字符串拼接
PreparedStatement ps = connection.prepareStatement("select * from user where username = '"+username+"'");
//占位符赋值
PreparedStatement ps2 = connection.prepareStatement("select * from user where username = ?");
ps2.setString(1,username);
}
MyBatis:获取参数的两种方式
- ${ } 本质就是字符串拼接
- #{ } 本质救赎占位符赋值
MyBatis获取参数值的各种情况
(1)mapper接口方法的参数为单个的字面量类型
可以通过${ }和 #{ } 以任意的字符串获取参数,但是需要注意$ { } 的引号问题 ,要使用'${username}'
接口ParameterMappera.java中添加方法
//根据用户名进行查询
User getUserByusername(String username);
映射文件ParameterMappera.xml { } 内可以写任意内容
<!--User getUserByusername(String username);-->
<select id="getUserByusername" resultType="user">
select * from user where username = #{username}
select * from user where username = '${username}'
</select>
测试类:
@Test
public void getUserByusername(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMappera mapper = sqlSession.getMapper(ParameterMappera.class);
User user = mapper.getUserByusername("admin");
System.out.println(user);
}
(2)mapper接口方法的参数为多个时
此时 MyBatis会自动将这些参数放在一个map集合中
1.以arg0,arg1 ..... 为键,以参数为值
2.以param1,param2 ..... 为键,以参数为值
-
${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号。
-
接口方法:
//检查登录
User cheakLogin(String username,String password);
ParameterMappera.xml
<!--User cheakLogin(String username,String password);-->
<select id="cheakLogin" resultType="user">
select * from user where username=#{arg0} and password=#{arg1}
</select>
<!--User checkLogin(String username,String password);-->
<select id="checkLogin" resultType="User">
select * from t_user where username = '${param1}' and password = '${param2}'
</select>
(3)若mapper接口方法的参数有多个时,可以手动将这些参数放在一个map中存储
$
接口方法:
//检查登录(参数为map)
User checkLoginByMap(Map<String,Object> map);
映射文件
<!-- User checkLoginByMap(Map<String,Object> map); -->
<select id="checkLoginByMap" resultType="user">
select * from user where username=#{username} and password=#{password}
</select>
测试类:
@Test
public void testCheckByMap(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMappera mapper = sqlSession.getMapper(ParameterMappera.class);
Map<String,Object> map = new HashMap<>();
map.put("username","admin");
map.put("password","1111");
User user = mapper.checkLoginByMap(map);
System.out.println(user);
}
(4)mapper接口方法的参数是实体类类型的参数
-
$
<!--int insertUser(User user);-->
<select id="insertUser" >
insert into user values(null,#{username},#{password},#{email})
</select>
@Test
public void testInsertUser(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMappera mappera = sqlSession.getMapper(ParameterMappera.class);
mappera.insertUser(new User(1,"李四","123456","55555@qq.com"));
}
5.使用@Param命名参数
此时MyBatis将这个参数放在一个map集合中,以两种方式进行存储
- 以@Param注解的值为键,以参数位置
- 以param1,param2...... 为键,以参数为值
因此只需要通过#{ } 和 $ { } 以键的方式访问值即可,但是需要注意 ${ } 的单引号问题
//通过@Param注解 检查登录
User checkLoginByparam(@Param("username") String username,@Param("password") String password);
@Test
public void testCheckByparam(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMappera mappera = sqlSession.getMapper(ParameterMappera.class);
User user = mappera.checkLoginByparam("admin","1111");
System.out.println(user);
}
阅读剩余
版权声明:
作者:Tin
链接:http://www.tinstu.com/1244.html
文章版权归作者所有,未经允许请勿转载。
THE END