MyBatis获取参数值的两种方式:${ } 和 #{ }
${ }:本质上是字符串拼接;#{ }:本质上是占位符赋值
一. 传入一个参数
①使用#{ }获取参数值:select * from user where username=#{username}
②使用${ }获取参数值:select * from user where username='${username}' 需要加上单引号
当Mapper接口只传入一个参数时,可以通过#{ }和${ }以任意的名称获取参数值。
{ }中的内容可以设置为任意值,尽量与传入的参数名同名
package mapper;
import pojo.User;
public interface UserMapper {
User queryUserByName(String username); //根据用户名查询用户信息
}
<?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="mapper.UserMapper"> <!--为mapper接口的全类名-->
<select id="queryUserByName" resultType="User">
select * from user where username=#{username} <!--#{}中的值可以任意设置,尽量与传入的参数名同名-->
<!-- select * from user where username='${username}'-->
</select>
</mapper>
import mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.User;
import utils.SqlSessionUtils;
public class MybatisTest {
@Test
public void testQueryByName() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用方法操作数据库
User user = mapper.queryUserByName("张三");
System.out.println(user);
}
}
二. 传入多个参数
(1)方式1:使用MyBatis自带的方式:
①使用#{ }获取参数值:select * from user where username=#{arg0} and password=#{arg1}
select * from user where username=#{param1} and password=#{param2}
②使用${ }获取参数值:select * from user where username='${arg0}' and password='${arg1}'
select * from user where username='${param1}' and password='${param2}'
当Mapper接口传入多个参数时,MyBatis会将这些参数放在一个map集合中,以两种方式进行存储:(1)以arg0,arg1...为键,以参数为值;(2)以param1,param2...为键,以参数为值;
{ }中的内容只能为arg0, arg1, arg2, ...... 或者param1, param2, param3, ......
package mapper;
import pojo.User;
public interface UserMapper {
User queryUserByNameAndPassword(String username, String password); //根据用户名和密码查询用户信息
}
<?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="mapper.UserMapper"> <!--为mapper接口的全类名-->
<select id="queryUserByNameAndPassword" resultType="User">
<!--多个参数时,#{}中的值不可以任意设置,只能为arg0,arg1,arg2,...或param1,param2,param3,...-->
select * from user where username=#{arg0} and password=#{arg1}
<!-- select * from user where username=#{param1} and password=#{param2}-->
</select>
</mapper>
import mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.User;
import utils.SqlSessionUtils;
public class MybatisTest {
@Test
public void testQueryByNameAndPassword() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用方法操作数据库
User user = mapper.queryUserByNameAndPassword("张三","1234");
System.out.println(user);
}
}
(2)方式2:采用自定义的方式
可以对上述进行修改,我们可以手动将参数放在map中存储
package mapper;
import pojo.User;
import java.util.Map;
public interface UserMapper {
User queryUserByMap(Map<String, Object> map);
}
<?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="mapper.UserMapper"> <!--为mapper接口的全类名-->
<select id="queryUserByMap" resultType="User">
select * from user where username=#{username} and password=#{password}
</select>
</mapper>
import mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.User;
import utils.SqlSessionUtils;
import java.util.HashMap;
import java.util.Map;
public class MybatisTest {
@Test
public void testQueryByMap() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String,Object> map = new HashMap<>();
map.put("username","张三");
map.put("password","1234");
//调用方法操作数据库
User user = mapper.queryUserByMap(map);
System.out.println(user);
}
}
(3)采用@Param注解的方式
package mapper;
import org.apache.ibatis.annotations.Param;
import pojo.User;
public interface UserMapper {
User queryUserByNameAndPassword(@Param("username") String username, @Param("password") String password); //根据用户名和密码查询用户信息
}
<?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="mapper.UserMapper"> <!--为mapper接口的全类名-->
<select id="queryUserByNameAndPassword" resultType="User">
<!-- 使用@Param注解内的值-->
select * from user where username=#{username} and password=#{password}
</select>
</mapper>
import mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.User;
import utils.SqlSessionUtils;
public class MybatisTest {
@Test
public void testQueryByNameAndPassword() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用方法操作数据库
User user = mapper.queryUserByNameAndPassword("张三","1234");
System.out.println(user);
}
}
三. 参数为JavaBean
通过#{ }和${ }以属性的方式获取属性值
package mapper;
import pojo.User;
public interface UserMapper {
void insertUser(User user); //添加用户信息
}
<?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="mapper.UserMapper"> <!--为mapper接口的全类名-->
<insert id="insertUser">
insert into user values(null,#{username},#{password},#{age},#{sex},#{email})
</insert>
</mapper>
import mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.User;
import utils.SqlSessionUtils;
public class MybatisTest {
@Test
public void testInsert() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
//获取Mapper接口对应的对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//操作数据库
mapper.insertUser(new User(null,"李梅","3456",20,'女',"Limei@qq.com"));
}
}