在实际的开发中我们会遇到很多的增删改查操作,而这些操作都要涉及到请求参数的传递,下面我们就来简单介绍一下Mybatis中常用的3种参数传递方式
1.单个参数传递
在进行单个参数传递时,我们直接进行传递即可.
首先我们在接口中创建一个抽象方法:
Admin findAdminById(int id);
接下来我们在.xml文件中编写SQL语句:
<?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.ffyc.mybatisdemo.dao.AdminDao">
<select id="findAdminById" parameterType="int" resultType="Admin">
select * from admin where id = #{id}
</select>
</mapper>
然后我们直接在main方法中调用我们的抽象方法即可:
package com.ffyc.mybatisdemo.test;
import com.ffyc.mybatisdemo.dao.AdminDao;
import com.ffyc.mybatisdemo.model.Admin;
import com.ffyc.mybatisdemo.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;;
import java.io.IOException;
public class Test1 {
public static void main(String[] args) throws IOException {
//创建SqlSession
SqlSession sqlSession = MybatisUtil.getSqlSession();
// Admin admin = sqlSession.selectOne("com.ffyc.admin.findAdminById", 1);
//动态生成一个代理对象(mybatis框架生成),由代理对象去调用mapper文件中的方法
AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
Admin admin = adminDao.findAdminById(1);
System.out.println(admin);
sqlSession.close();
}
}
这样我们就通过传递单个参数完成了通过id查询Admin对象
2.多个参数传递
在进行多个参数传递时,我们有两种常用方式:
①使用@Param()进行绑定:
格式:
User selectUsers(@Param(“id”)int id,@Param(“name”)String name);
代码示例:
1.首先,同样的我们需要使用@Param()的方式创建一个抽象接口:
Admin login(@Param("account")String account,@Param("password")String password);
2.接下来在.xml文件中编写SQL语言:
<mapper namespace="com.ffyc.mybatisdemo.dao.AdminDao">
<select id="login" resultType="Admin">
select * from admin where account=#{account} and password=#{password}
</select>
</mapper>
3.然后在main方法中调用我们的抽象方法:
public class Test2 {
@Test
//使用@Param绑定
public void login() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
Admin admin = adminDao.login("admin","111");
System.out.println(admin);
sqlSession.close();
}
}
这样我们就通过传递多个参数的方式完成了通过id查询Admin对象
注:
-
此方式适合两个及两个以上参数使用,但是当参数较多时我们需要将每个参数都使用@Param()的方式进行绑定,比较繁琐,所以当参数较多时,我们推荐使用下面的使用parameterType进行参数类型定义的方式.
②使用parameterType进行参数类型定义:
格式:
<insert id="insertUser" parameterType="User">
insert into users (id, username, password)
values (#{id}, #{username}, #{password})
</insert>
代码示例:
1.首先,同样的我们需要使用@Param()的方式创建一个抽象接口,因为此处我们需要传递多个参数,所以我们直接将对象传递过去:
Admin login1(Admin admin);
2.接下来在.xml文件中编写SQL语言:
<mapper namespace="com.ffyc.mybatisdemo.dao.AdminDao">
<select id="login1" resultType="Admin" parameterType="Admin">
select * from admin where account=#{account} and password=#{password}
</select>
</mapper>
3.然后在main方法中调用我们的抽象方法:
public class Test2 {
@Test
//使用 parameterType 参数进行类型定义
public void login1() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
Admin admin1 = new Admin("admin", "111",null);
adminDao.login1(admin1);
sqlSession.close();
}
}
这样我们就通过传递一个对象的方式完成了通过id查询Admin对象