Mybatis多参数处理:
1、封装POJO类
Persom.java
package com.example.bean;
import lombok.Data;
@Data
public class Person {
private Integer id ;
private String username;
private String email;
private String gender;
private String dept_id;
public Person(String username ,String gender){
this.gender = gender;
this.username = username;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", username='" + username + '\'' +
", email='" + email + '\'' +
", gender='" + gender + '\'' +
", dept_id='" + dept_id + '\'' +
'}';
}
}
PersonMapper.java
package com.example.dao;
import com.example.bean.Person;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface PersonMapper {
/**
* 多参数:封装POJO类的方式,传入person类的对象
* @param Person
* @return Person
*/
Person getPersonByNameAndGender(Person person);
}
PersonMapper.java
<?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="com.example.dao.PersonMapper">
<resultMap id="BaseResultMap" type="com.example.bean.Person">
<result column="id" jdbcType="INTEGER" property="id" />
<result column="userName" jdbcType="VARCHAR" property="userName" />
<result column="email" jdbcType="VARCHAR" property="email" />
<result column="gender" jdbcType="VARCHAR" property="gender" />
<result column="dept_id" jdbcType="VARCHAR" property="dept_id"/>
</resultMap>
<!--where条件重传入属性值username 和 gender-->
<select id="getPersonByNameAndGender" resultType="person">
select * from person where username = #{username} and gender = #{gender}
</select>
</mapper>
Test.java
package com.example.imoocdemo1;
import com.example.bean.Person;
import com.example.dao.PersonMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class Test {
@Autowired
PersonMapper personMapper;
@Test
void testQuery(){
//传入一个person的实例,实例中指定了mapper.xml中的属性
Person person = personMapper.getPersonByNameAndGender(new Person("zhangyn","F"));
System.out.println(person);
}
}
2、多参数处理-Map
如果参数比较少,而且没有对应的JavaBean,可以封装城Map
xml文件中: #{key}取出map中对应的值
//Person.java如上
PersonMapper.java
package com.example.dao;
import com.example.bean.Person;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface PersonMapper {
/**
* 传入map对象param
* @param param
* @return Person
*/
Person getPersonByNameAndGender(Map<String,Object>() param);
}
PersonMapper.java
<!--where条件重传入map的key name 和 gender-->
<select id="getPersonByNameAndGender" resultType="person">
<!--where条件重传入map的key 【name 和 gender】-->
select * from person where username = #{name} and gender = #{gender}
</select>
Test.java
package com.example.imoocdemo1;
import com.example.bean.Person;
import com.example.dao.PersonMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class Test {
@Autowired
PersonMapper personMapper;
@Test
void testQuery(){
//新建map
Map<String,Object>() param = new HashMap<String,Object>();
//Key:name
//注意这里指定key为name不是username,mapper.xml中要对应!!!
param.put("name","zhangyn");
//Key:gender
param.put("gender",'F');
Person person = personMapper.getPersonByNameAndGender(new Person(param));
System.out.println(person);
}
}
3、多参数处理-@param
以上两种方式需要手动创建map和对象,不简洁;可以使用@param注释,明确指定封装参数的map和key
void updateUserById(@Param("id") Integer id,@Param("name") String username);
<update id="updateUserById" >
update user set username = #{name}
where id = #{id}
</update>