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(小數位)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章