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集合!日常业务中,我们可以根据实际需要,选择不同的传参方式!

后续补充:

  • 插入不转义的字符串,在不恰当的位置使用${} 传参会导致注入风险。
    在这里插入图片描述

创建了一个技术闲聊群:有兴趣可加我微信,拉你一起讨论杂七杂八的技术,虽然大家都不怎么活跃!
加好友备注:你的博客名 && 随便给我的任意文章点个赞或留言
在这里插入图片描述

发布了90 篇原创文章 · 获赞 1103 · 访问量 80万+

猜你喜欢

转载自blog.csdn.net/u010569419/article/details/87837967