mybaits參數處理map-------mybatis(五)

mybaits參數處理

	Mybatis日常業務總我們無論是查詢也好,插入也罷,我們一般都需要將實體的多個屬性值到映射的sql語句中,
	比較常見的做法就是將實體屬性封裝到Map中,mybatis會自動從map中取出對應的屬性值構造sql語句。
	下面爲實例代碼:
  1. 實體類
package model;
public class Bloger {

    private int id;
    private String name;
    //這裏需要注意變量的命名規範,因爲實體變量會和sql記錄一一對應,
    // 所以不規範的命名方式會導致mybatis執行異常
    private String userName;
    private int age;
    private String email;

    public Bloger(){}

    public Bloger(int id, String name, String userName, int age, String email) {
        this.id = id;
        this.name = name;
        this.userName = userName;
        this.age = age;
        this.email = email;
    }

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    @Override
    public String toString() {
        return "BlogId:"+ getId()+ "  BlogName:"+getName()+ "  username:" + getUserName();
    }
}

  1. 接口方法
package dao;
import model.Bloger;
import org.apache.ibatis.annotations.Select;
import java.util.Map;

public interface BlogerMapper {
	//通過將需要傳輸的屬性值直接封裝到Map中
    public Bloger selectBlogerOnMap(Map<String,Object> map);
    public void insertBlogerOnMap(Map<String,Object> map);
}

  1. 映射文件
<?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="dao.BlogerMapper">
    
  	<select id="selectBlogerOnMap" resultType="Bloger">
        select * from mybatis_test where id =#{id} and user_name=#{userName}
    </select>
    <!-- 值得注意的是 這裏的參數類型不再是普通的對象,而是map集合 -->
    <insert id="insertBlogerOnMap" parameterType="Map">
        insert into mybatis_test(name,user_name,age,email)
        VALUES (#{name},#{userName},#{age},#{email})
    </insert>
</mapper>
  1. 測試類
package test;

import dao.BlogerMapper;
import model.Bloger;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

public class MybatisDriver {
    public static void main(String[] args) throws Exception{
        mybatis_insert_onMap();
    }
    
    public static SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "source/configuration.xml";
        InputStream inputStream= Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory= new SqlSessionFactoryBuilder().build(inputStream);
        return sqlSessionFactory;
    }

    public static void mybatis_select_onMap() throws Exception{
        SqlSessionFactory sqlSessionFactory=getSqlSessionFactory();
        SqlSession sqlSession=sqlSessionFactory.openSession();
        BlogerMapper blogerMapper=sqlSession.getMapper(BlogerMapper.class);
        Map<String,Object> map =new HashMap<>();
        map.put("userName","wujianqinjian");
        map.put("id",14);
        //map.put("email","[email protected]");
        Bloger bloger=blogerMapper.selectBlogerOnMap(map);
        System.out.println(bloger);
        sqlSession.close();
    }

    public static void mybatis_insert_onMap() throws Exception{
        SqlSessionFactory sqlSessionFactory =getSqlSessionFactory();
        SqlSession sqlSession=sqlSessionFactory.openSession();
        BlogerMapper blogerMapper=sqlSession.getMapper(BlogerMapper.class);
        Map<String,Object> mapInsert= new HashMap<>();
        mapInsert.put("name","樊瑞17號");
        mapInsert.put("userName","wujianqinjian18");
        mapInsert.put("email","[email protected]");
        mapInsert.put("age",43);
        blogerMapper.insertBlogerOnMap(mapInsert);
        sqlSession.commit();
        sqlSession.close();
    }
}

總結:我們可以看出Mybatis對傳參方式還是非常靈活的,不緊可以傳單一的基本數據類型,也可以傳對象,另外,還可以傳輸map集合!日常業務中,我們可以根據實際需要,選擇不同的傳參方式!

後續補充:

  • 插入不轉義的字符串,在不恰當的位置使用${} 傳參會導致注入風險。
    在這裏插入圖片描述

創建了一個技術閒聊羣:有興趣可加我微信,拉你一起討論雜七雜八的技術,雖然大家都不怎麼活躍!
加好友備註:你的博客名 && 隨便給我的任意文章點個贊或留言
在這裏插入圖片描述

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