条条|MyBatis学习笔记4——参数

4.1MyBatis传参

传入参数

从java代码中把数据传入到mapper文件的sql语句中

  1. parameterType : 写在mapper文件中的 一个属性。 表示dao接口中方法的参数的数据类型。例如StudentDao接口public Student selectStudentById(Integer id)
  2. 一个简单类型的参数:简单类型: mybatis把java的基本数据类型和String都叫简单类型。在mapper文件获取简单类型的一个参数的值,使用 #{任意字符}
    接口:
    public Student selectStudentById(Integer id)
    mapper:
    select id,name, email,age from student where id=#{studentId}
当然,不写parameterType,MyBatis自己也会自动识别

传入多个参数

如果查询需要传入多个参数,我们可以使用@Param注解

接口
public interface StudentDao {

    List<Student> selectStudentParam(@Param("myname") String name,
                                      @Param("myage") Integer age);
}
mapper映射文件
<select id="selectStudentParam" resultType="com.mybatis.domain.Student">
    select id,name,email,age from student where name=#{myname} or age=#{myage}
</select>
调用类
@Test
public void test01ByParam(){
    SqlSession sqlSession= MyBatisUtils.getSqlSession();
    StudentDao dao=sqlSession.getMapper(StudentDao.class);

    List<Student> l=dao.selectStudentParam("中文",22);
    for (Student s: l) {
        System.out.println(s);
    }
    System.out.println(l);
}

传入多个参数(使用java对象作为接口中方法的参数)

接口方法(QueryParam类自行编写,也可以拿现有的Student类,类型比较灵活)
List<Student> selectStudentObject(QueryParam queryParam);
mapper文件

标准语法:#{属性名,javaType=类型名称,jdbcType=数据类型};javaType指在java中的属性数据类型,jdbcType指在数据库中的数据类型;具体的对应可以看mybatis的文档;但是这种标准语法很少用,所以我们用下面的简化版

<select id="selectStudentObject" resultType="com.mybatis.domain.Student">
        select id,name,email,age from student where name=#{paramName} or age=#{paramAge}
    </select>
调用方法
@Test
    public void test01ByObject(){
        SqlSession sqlSession= MyBatisUtils.getSqlSession();
        StudentDao dao=sqlSession.getMapper(StudentDao.class);

        QueryParam queryParam=new QueryParam();
        queryParam.setParamName("nego");
        queryParam.setParamAge(44);

        List<Student> l=dao.selectStudentObject(queryParam);
        for (Student s: l) {
            System.out.println(s);
        }
        System.out.println(l);
    }

多个参数(按位置)

<select id="selectStudentObject" resultType="com.mybatis.domain.Student">
        select id,name,email,age from student where name=#{arg0} or age=#{arg1}
    </select>

mybatis3.4前格式为 #{0};mybatis3.3后格式为 #{0};这种方法很少用

多个参数(Map存储参数方法)--不推荐用(略)

关于 # 和 $

在mapper文件中我们除了可以用 # 之外,也可以用 来替换,两者的语法格式一致 \# 是用占位符的原理来执行sql语句的==>`select id,name,email,age from student where name=? or age=?` 是通过连接的原理来执行sql语句的==>select id,name, email,age from student where id=" + "1001"
但是一般不建议,因为使用 的效率比 # 低(# 用`PreparedStatement`,Statement),而且还存在安全隐患, # 能够避免sql注入, $ 有sql注入的风险

注: $ 可以替换表名或者列名(如查询排列条件--略)

条条:该学习笔记是记录了我的学习过程,学习自动力节点c语言中文网,有不对的地方欢迎指出

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。