mybaits参数处理
Mybatis日常业务总我们无论是查询也好,插入也罢,我们一般都需要将实体的多个属性值到映射的sql语句中,
比较常见的做法就是将实体属性封装到Map中,mybatis会自动从map中取出对应的属性值构造sql语句。
下面为实例代码:
- 实体类
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();
}
}
- 接口方法
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);
}
- 映射文件
<?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>
- 测试类
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集合!日常业务中,我们可以根据实际需要,选择不同的传参方式!
后续补充:
- 插入不转义的字符串,在不恰当的位置使用${} 传参会导致注入风险。
创建了一个技术闲聊群:有兴趣可加我微信,拉你一起讨论杂七杂八的技术,虽然大家都不怎么活跃!
加好友备注:你的博客名 && 随便给我的任意文章点个赞或留言