1. 若mapper接口方法的参数为单个的字面量类型,此时可以通过#{}和${}以任意的内容获取参数值,但是要注意${}的单引号问题
UserMapper.java接口:
- /**
- * 根据用户名查找用户信息
- * @param username
- * @return
- */
- User getUserByUsername(String username);
UserMapper.xml映射文件:
-
-
-
- <select id="getUserByUsername" resultType="User">
-
- select * from t_user where username = '${username}';
- select>
测试代码:
- @Test
- public void testGetUserByUsername(){
- // SqlSessionUtil类是提前创建好的一个工具类,可参考前几篇文章查看详细代码
- SqlSession sqlSession = SqlSessionUtil.getSqlSession();
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- User user = userMapper.getUserByUsername("王五");
- System.out.println(user);
- sqlSession.close();
- }
2. 若mapper接口方法的参数为多个的字面量类型,此时会将参数放在map集合中,以两种方式存储数据:
(1)以arg0,arg1,...为键,以参数为值
(2)以param1,param2,...为键,以参数为值
UserMapper.java接口:
- /**
- * 验证登录
- * @param username
- * @param password
- * @return
- */
- User checkLogin(String username, String password);
UserMapper.xml映射文件:
- <!--checkLogin-->
- <select id="checkLogin" resultType="User">
- <!--select * from t_user where username = #{arg0} and password = #{arg1};-->
- select * from t_user where username = '${param1}' and password = '${param2}';
- </select>
测试代码:
- @Test
- public void testCheckLogin(){
- SqlSession sqlSession = SqlSessionUtil.getSqlSession();
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- User user = userMapper.checkLogin("admin", "444");
- System.out.println(user);
- System.out.println(user.getUsername());
- sqlSession.close();
- }
3. 若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,将这些数据放在map中,此时只需要通过#{}或${}以访问Map集合的键就可以获得对应的值,要注意${}的单引号。
UserMapper.java接口:
- /**
- * 验证登录 — 以自定义的Map集合作为参数
- * @param map
- * @return
- */
- User checkLoginByMap(Map<String, Object> map);
UserMapper.xml映射文件:
- <!--checkLoginByMap-->
- <select id="checkLoginByMap" resultType="User">
- select * from t_user where username = #{username} and password = #{password};
- <!--select * from t_user where username = '${username}' and password = '${password}';-->
- </select>
测试代码:
- @Test
- public void testCheckLoginByMap(){
- SqlSession sqlSession = SqlSessionUtil.getSqlSession();
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- Map<String, Object> map = new HashMap<>();
- map.put("username", "admin");
- map.put("password", "444");
- User user = userMapper.checkLoginByMap(map);
- System.out.println(user);
- sqlSession.close();
- }
4. 若mapper接口方法的参数是实体类型的参数,只需要通过#{}和${}访问实体类中的属性名,就可以获得对应的属性值,要注意${}的单引号问题
UserMapper.java接口:
- /**
- * 添加用户信息
- * @param user
- */
- void insertUser(User user);
UserMapper.xml映射文件:
-
- <insert id="insertUser">
- insert into t_user values(null, #{username}, #{password}, #{age}, #{gender}, #{email});
- insert>
测试代码:
- @Test
- public void testInsertUser(){
- SqlSession sqlSession = SqlSessionUtil.getSqlSession();
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- User user = new User(null, "root", "123456", 33, "女", "456@qq.com");
- userMapper.insertUser(user);
- sqlSession.close();
- }
5. 可以在mapper接口方法的参数上设置@Param注解,MyBatis会将这些参数放在map中,以两种方式进行存储:
(1)以@Param注解的属性值为键,以参数为值
(2)以param1,param2,...为键,以参数为值
此时可以通过#{}和${}以任意的内容获取参数值,要注意${}的单引号问题
UserMapper.java接口:
- /**
- * 验证登录 - 使用@Param注解
- * @param username
- * @param password
- * @return
- */
- User checkLoginByParam(@Param("username") String username, @Param("password") String password);
UserMapper.xml映射文件:
- <!--checkLoginByParam-->
- <select id="checkLoginByParam" resultType="User">
- select * from t_user where username = #{username} and password = #{password};
- </select>
测试代码:
- @Test
- public void testCheckLoginByParam(){
- SqlSession sqlSession = SqlSessionUtil.getSqlSession();
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- User user = userMapper.checkLoginByParam("admin", "444");
- System.out.println(user);
- sqlSession.close();
- }