mybatis之动态sql(if,where,foreach)

(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表的数据:

mybatis之动态sql(if,where,foreach)_第1张图片

(2)sqlMapperConfig.xml





             
	    
	
	
	  

工程中Mapper配置文件接口

mybatis之动态sql(if,where,foreach)_第2张图片

(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]

 

你可能感兴趣的:(框架学习系列)