(1)需求:根据性别和名称来查询用户
(1)User.java
package cn.shu.pojo;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable{
//实现序列化接口
/**
*
*/
private static final long serialVersionUID = 1L;
private Integer id;
private String username;
private String sex;
private Date birthday;
private String address;
/*setters and getters and toString*/
数据库中user表的数据:
(2)sqlMapperConfig.xml
工程中Mapper配置文件接口
(3)UserMapper.java
package cn.shu.mapper;
import java.util.List;
import cn.shu.pojo.QueryVo;
import cn.shu.pojo.User;
public interface UserMapper {
//使用Mapper动态代理不用写实现类(userDaoimpl),只用写接口就行
//四个原则
/*
* 1.接口中方法名(selectUserBySexAndUsername)等于User.xml中id名
* 2.返回值类型(List) 与Mapper.xml文件中返回值类型(resultType)一致
* 3.方法中入参类型与Mapper.xml中入参的类型(parameterType)要一致
* 4.命名空间要绑定此接口
*
* */
//根据性别和名字查询用户
public List selectUserBySexAndUsername(User user);
}
(4)UserMapper.xml
select * from user
(5)测试类书写
//根据性别和名字查询用户
@Test
public void testfindUserBySexAndUsername() throws Exception {
// 加载核心配置文件
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
// 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
// 创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//sqlSession帮助生成实现类(给接口,接口遵循四大原则)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setSex("1");
user.setUsername("张小明");
/*如果将性别或者名字的其中一个注释掉再进行查询,操作一下看看结果*/
List users = userMapper.selectUserBySexAndUsername(user);
for (User u : users) {
System.out.println(u);
}
/*
User [id=16, username=张小明, sex=1, birthday=null, address=河南郑州]
注释掉user.setUsername("张小明");结果为:
User [id=10, username=张三, sex=1, birthday=Thu Jul 10 00:00:00 CST 2014, address=北京市]
User [id=16, username=张小明, sex=1, birthday=null, address=河南郑州]
User [id=22, username=陈小明, sex=1, birthday=null, address=河南郑州]
User [id=24, username=张三丰, sex=1, birthday=null, address=河南郑州]
User [id=25, username=陈小明, sex=1, birthday=null, address=河南郑州]
*/
}
(2)需求:
(1)接口UserMapper.java
//根据多个id查询用户(存在以下三种可能)
//情形一:
public List selectUserByIds(Integer[] ids);
//public List selectUserByIds(List idsList);
//情形三:
//public List selectUserByIds(QueryVo vo);
(2)QueryVo.java
package cn.shu.pojo;
import java.io.Serializable;
import java.util.List;
//QueryVo为包装类,将User类进行包装
public class QueryVo implements Serializable{
//不实现Serializable接口,就无法实现序列化(对象转化为二进制的过程)
//和反序列化(二进制到对象的过程),在同一台电脑中进行数据调用可以不用此过程
//但不同电脑之间进行数据传输会有序列化和反序列化的过程
/**
*
*/
private static final long serialVersionUID = 1L;
private User user;
List idsList;
public List getIdsList() {
return idsList;
}
public void setIdsList(List idsList) {
this.idsList = idsList;
}
public Integer[] getIds() {
return ids;
}
public void setIds(Integer[] ids) {
this.ids = ids;
}
Integer[] ids;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
(3)sqlMapperConfig.xml
其他配置省略
(4)UserMapper.xml
(5)情形一测试类书写:
//多个Id查询
//情形一:public List selectUserByIds(Integer[] ids);
@Test
public void testfindUserID() throws Exception {
// 加载核心配置文件
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
// 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
// 创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//sqlSession帮助生成实现类(给接口,接口遵循四大原则)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//将要查询的值塞入到数组中
Integer[] ids = new Integer[3];
ids[0]=16;
ids[1]=10;
ids[0]=30;
List users = userMapper.selectUserByIds(ids);
for (User user2 : users) {
System.out.println(user2);
}
}
结果:
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 1181869371.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@4671e53b]
DEBUG [main] - ==> Preparing: select * from user WHERE id in ( ? , ? , ? )
DEBUG [main] - ==> Parameters: 30(Integer), 10(Integer), null
DEBUG [main] - <== Total: 2
User [id=10, username=张三, sex=1, birthday=Thu Jul 10 00:00:00 CST 2014, address=北京市]
User [id=30, username=stephen hong, sex=男, birthday=Sat Aug 04 00:00:00 CST 2018, address=Hong Kong]
(6)情形三接口类UserMapper.java
//情形三:
public List selectUserByIds(QueryVo vo);
(7)情形三 UserMapper.xml
(8)情形三测试类书写:
//多个Id查询
//情形三:public List selectUserByIds(QueryVo vo);
@Test
public void testfindUserIDs() throws Exception {
// 加载核心配置文件
String resource = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
// 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
// 创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//sqlSession帮助生成实现类(给接口,接口遵循四大原则)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//将要查询的值塞入到list中
List ids = new ArrayList<>();
ids.add(16);
ids.add(22);
ids.add(24);
ids.add(26);
QueryVo vo = new QueryVo();
vo.setIdsList(ids);
List user = userMapper.selectUserByIds(vo);
for (User user2 : user) {
System.out.println(user2);
}
}
结果:
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 140799417.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@8646db9]
DEBUG [main] - ==> Preparing: select * from user WHERE id in ( ? , ? , ? , ? )
DEBUG [main] - ==> Parameters: 16(Integer), 22(Integer), 24(Integer), 26(Integer)
DEBUG [main] - <== Total: 4
User [id=16, username=张小明, sex=1, birthday=null, address=河南郑州]
User [id=22, username=陈小明, sex=1, birthday=null, address=河南郑州]
User [id=24, username=张三丰, sex=1, birthday=null, address=河南郑州]
User [id=26, username=王五, sex=null, birthday=null, address=null]