parameterType(输入类型)
- 传递简单类型: 前面已经讲过,这里就不说了
- 传递pojo对象:Mybatis使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称。
- 传递pojo包装对象:1、开发中通过pojo传递查询条件 ,查询条件是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。2、Pojo类中包含pojo。
案列
1、数据库数据和原本的JavaBean
package Domain;
import java.io.Serializable;
public class UserDomain implements Serializable {
private int id;
private String name;
private String password;
private String sex;
private int age;
//无参构造函数
public UserDomain() {
}
//get|set
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//toString
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + ", sex=" + sex + ", age=" + age + "]";
}
}
2、先创建一个类,专门用来存放查询条件的条件;(比如:查询出id大于4 and 姓“老” and 性别为男的人)
- 这里有两种方法: 一种是Pojo类中包含pojo(也就是灰化了的) 另外一种是直接继承(建议继承)
package Domain;
public class QueryUser extends UserDomain {
private int minID;
// private UserDomain user;
public int getMinID() {
return minID;
}
public void setMinID(int minID) {
this.minID = minID;
}
// public UserDomain getUser() {
// return user;
// }
// public void setUser(UserDomain user) {
// this.user = user;
// }
}
3、创建接口
package Mapper;
import java.util.List;
import Domain.QueryUser;
import Domain.UserDomain;
public interface UserMapper {
List<UserDomain> findUserByQuery(QueryUser qu);
}
4、在映射文件中写sql语句
- 如果Pojo类中包含pojo需要像剥洋葱那样一层一层的拿(也就是注释了的sql语句)
<?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">
<!-- namespace和mapper接口同名 -->
<mapper namespace="Mapper.UserMapper">
<!-- P.10 输入映射 (查询id大于4 and 姓“老” and 为男)-->
<select id="findUserByQuery" parameterType="QueryUser" resultType="UserDomain">
<!-- select * from test001 where id>=#{minID} and name like "%${user.name}%" and sex=#{user.sex} -->
select * from test001 where id>=#{minID} and name like "%${name}%" and sex=#{sex}
</select>
</mapper>
5、测试
- Pojo类中包含pojo为灰化部分
package test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
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 org.junit.Before;
import org.junit.Test;
import Domain.QueryUser;
import Domain.UserDomain;
import Mapper.UserMapper;
public class Test01 {
private SqlSessionFactory ssf;
//获得会话工厂
@Before
public void creatSqlSessionFactory() {
InputStream in = null;
try {
in = Resources.getResourceAsStream("SqlMapConfig.xml");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ssf = new SqlSessionFactoryBuilder().build(in);
}
// @Test
// public void testFindUser() {
// //打开一个会话
// SqlSession s = ssf.openSession();
// //获得代理对象
// UserMapper mapper = s.getMapper(UserMapper.class);
// //new对象
// QueryUser qu = new QueryUser();
// qu.setMinID(5);
// UserDomain user = new UserDomain();
// user.setName("老");
// user.setSex("男");
// qu.setUser(user);
// //调用代理对象
// List<UserDomain> list = mapper.findUserByQuery(qu);
// for (UserDomain x : list) {
// System.out.println("信息"+x.getName()+""+x.getSex());
// }
// //关闭
// s.close();
// }
@Test
public void testFindUser() {
//打开一个会话
SqlSession s = ssf.openSession();
//获得代理对象
UserMapper mapper = s.getMapper(UserMapper.class);
//new对象
QueryUser qu = new QueryUser();
qu.setMinID(5);
qu.setName("老");
qu.setSex("男");
//调用代理对象
List<UserDomain> list = mapper.findUserByQuery(qu);
for (UserDomain x : list) {
System.out.println("信息"+x.getName()+""+x.getSex());
}
//关闭
s.close();
}
}