Mybatis学习 - sql语句参数传递

只传递一个参数

1、在mapper文件中使用 #{参数名} 表示,此时参数名可随意变更。

<mapper namespace="dao.TeacherMapper">
    <!--id:自定义的sql唯一标志:使用接口的方法名-->
    <select id="getTeacherByID" resultType="bean.Teacher">
    select * from teacher where id = #{id}
  </select>

2、在接口方法中定义参数

    public Teacher getTeacherByID(Integer id);

3、在测试代码中调用方法并传参

Teacher teacher = teacherMapper.getTeacherByID(1);

传递多个参数

1、接口定义方法

    public Teacher getTeacherByIDAndName(@Param("id") Integer id, @Param("name") String name);

2、添加mapper文件

    <select id="getTeacherByIDAndName" resultType="bean.Teacher">
        select * from teacher where id = #{id}  and name = #{name}
    </select>

3、添加测试代码

    @Test
    public void testSearch2() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);

        //创建sqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //生成session实例

        try (SqlSession session = sqlSessionFactory.openSession()) {
            //获取接口的实现
            TeacherMapper teacherMapper = session.getMapper(TeacherMapper.class);
            Teacher teacher = teacherMapper.getTeacherByIDAndName(1,"Jack");
            System.out.println(teacher);
        }

    }

运行结果
在这里插入图片描述

使用map传递参数

1、定义接口方法:

 public Teacher getTeacherByMap(Map<String,Object> map);

2、编写mapper文件

    <select id="getTeacherByMap" resultType="bean.Teacher">
        select * from teacher where id=#{id} and name=#{name}
    </select>

3、编写测试代码

   @Test
    public void testSearch3() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);

        //创建sqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //生成session实例

        try (SqlSession session = sqlSessionFactory.openSession()) {
            //获取接口的实现
            TeacherMapper teacherMapper = session.getMapper(TeacherMapper.class);
            Map<String,Object> map = new HashMap<>();
            map.put("id",1);
            map.put("name","Jack");
            Teacher teacher = teacherMapper.getTeacherByMap(map);
            System.out.println(teacher);
        }

    }

运行结果如下:
在这里插入图片描述

使用javabean(POJO)传递参数

1、定义接口方法

 public void addTeacher(Teacher teacher);

2、编写mapper文件

    <insert id="addTeacher" parameterType="bean.Teacher">
    insert into teacher(`id`, `name`,`gender`)
    values(#{id},#{name},#{gender})
    </insert>

3、测试代码:

    /*
    接口式编程,实现插入操作
     */
    @Test
    public void testInsert() throws IOException {

        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建sqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //生成session实例
        try (SqlSession session = sqlSessionFactory.openSession()) {
            TeacherMapper teacherMapper = session.getMapper(TeacherMapper.class);
            Teacher teacher = new Teacher(3, "Lucy", 'F');
            teacherMapper.addTeacher(teacher);
            session.commit(); //提交操作
        }

    }

使用TO(Transger Object)传递参数

${参数} 和#{参数}

如果使用${参数} 运行结果会直接取值(以预编译的方式将参数设置到sql中)
使用 #{参数} 运行结果会是一个?占位符 (可以防止sql注入)

何种场景使用${参数} ??分库分表排序等原生jdbc不支持占位符的地方
eg:select * from ${month}_salary order by ${name}

#{参数} 规定参数的一些规则

javaType
jdbcType:Oracle不支持null,需要特殊处理
mode(存储过程使用)
numericScale(小数位)

发布了108 篇原创文章 · 获赞 10 · 访问量 9682

猜你喜欢

转载自blog.csdn.net/liying15/article/details/102250341