1.参数类型为基本类型或者字符串类型,而且个数为单个的时候。
传参的过程中,#{}当中可以随意书写变量的名称。
2.参数类型为自定义对象,而且个数为单个的时候。
传参的过程中,#{}当中名称必须是自定义对象中的属性名(有相对应的get方法的属性)。
3.参数个数为多个时,解决方法:
(1)方法一:在映射文件对应sql语句的#{}中写固定框架底层的参数名称(param1、param2。。。)
(2)方法二:参数的注解——在XXXDao方法的形参前追加@Param。
(3)方法三:在传参的过程中传递自定义对象类型。
Dao层方法:传入参数为自定义对象类型。
映射文件:参数类型为自定义对象实体类的全限定类名。
测试语句:
(4)方法四:在传参的过程中,传递map类型。在#{}中需要写的是map集合中的key值。
Dao层方法:传入参数为HashMap类型。
映射文件:参数类型为HashMap。
测试语句:字段名作为map的key值,字段值作为value。
4.实例展示(主要内容展示)
UserDao:
package com.xs.dao; import com.xs.pojo.User; import org.apache.ibatis.annotations.Param; import org.junit.Test; import java.util.HashMap; import java.util.List; public interface UserDao { User selectOneUser(int id);//查询一条 //多个参数解决方法一 User login1(String uname,String pwd);//通过用户名、密码两个参数查询 //多个参数解决方法二:参数的注解——在XXXDao的形参前边追加@Param User login2(@Param("uname") String uname, @Param("pwd") String pwd);//通过用户名、密码两个参数查询 //多个参数解决方法三:在传参的过程中传递自定义对象类型 User login3(User user);//通过用户名、密码两个参数查询 //多个参数解决方法四:在传参的过程中传递Map类型 User login4(HashMap map);//通过用户名、密码两个参数查询 }
UserDao映射文件展示——UserMapper:
<?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.xs.dao.UserDao"> <!-- 查一条--> <select id="selectOneUser" resultType="com.xs.pojo.User" > select * from user where id=#{id} </select> <!--多个参数解决方法一:在#{}中写固定框架底层的参数名称(param1、param2。。。)--> <!-- 通过用户名、密码查询(类似登录)--> <select id="login1" resultType="com.xs.pojo.User" > select * from user where uname=#{param1} and pwd=#{param2} </select> <!--多个参数解决方法二--> <!-- 通过用户名、密码查询(类似登录)--> <select id="login2" resultType="com.xs.pojo.User" > select * from user where uname=#{uname} and pwd=#{pwd} </select> <!--多个参数解决方法三--> <!-- 通过用户名、密码查询(类似登录)--> <select id="login3" resultType="com.xs.pojo.User" parameterType="com.xs.pojo.User"> select * from user where uname=#{uname} and pwd=#{pwd} </select> <!--多个参数解决方法四--> <!-- 通过用户名、密码查询(类似登录)--> <select id="login4" resultType="com.xs.pojo.User" parameterType="HashMap"> select * from user where uname=#{uname} and pwd=#{pwd} </select> </mapper>
运行测试:
package com.xs.test; import com.xs.dao.UserDao; import com.xs.pojo.Group; import com.xs.pojo.User; import com.xs.utils.MyBatisUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.HashMap; import java.util.List; public class ParamTest { @Test public void selectOneUserTest(){ //从封装的MyBatisUtil方法中获取SqlSession SqlSession sqlSession= MyBatisUtil.getSqlSession(); UserDao mapper = sqlSession.getMapper(UserDao.class); User user = mapper.selectOneUser(8); System.out.println(user); //提交和关闭SqlSession sqlSession.commit(); sqlSession.close(); } @Test//多个参数解决方法一 public void login1Test(){ SqlSession sqlSession = MyBatisUtil.getSqlSession(); UserDao mapper = sqlSession.getMapper(UserDao.class); User user = mapper.login1("吴太上", "58458"); System.out.println(user); sqlSession.commit(); sqlSession.close(); } @Test//多个参数解决方法二 public void login2Test(){ SqlSession sqlSession = MyBatisUtil.getSqlSession(); UserDao mapper = sqlSession.getMapper(UserDao.class); User user = mapper.login2("吴太上", "58458"); System.out.println(user); sqlSession.commit(); sqlSession.close(); } @Test//多个参数解决方法三 public void login3Test(){ SqlSession sqlSession = MyBatisUtil.getSqlSession(); UserDao mapper = sqlSession.getMapper(UserDao.class); User user=new User(); user.setUname("吴太上"); user.setPwd("58458"); User user1 = mapper.login3(user); System.out.println(user1); sqlSession.commit(); sqlSession.close(); } @Test//多个参数解决方法四 public void login4Test(){ SqlSession sqlSession = MyBatisUtil.getSqlSession(); UserDao mapper = sqlSession.getMapper(UserDao.class); HashMap map=new HashMap(); map.put("uname","马大哈"); map.put("pwd","145555"); User user = mapper.login4(map); System.out.println(user); sqlSession.commit(); sqlSession.close(); } }