Mybatis 通过包装类进行简单增删改查

之前讲过用Mapper动态代理的方式进行查询,今天在此基础上用包装类的形式进行查询。

开发中通过可以使用pojo传递查询条件。

查询条件可能是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如查询用户信息的时候,将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。

包装对象:Pojo类中的一个属性是另外一个pojo。

新建包装类QueryVo,把User类进行包装,通过这个QueryVo,可以获得User类的user对象,从而层层包装获取user的各种属性
package com.itheima.mybatis.pojo;

import java.io.Serializable;

public class QueryVo implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private User user;

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

}

在UserMapper.xml配置文件里面,进行增删改查配置,id是Mapper接口的方法名,resultType和parameterType和Mapper接口方法的一一对应。

<!--通过包装类,把User对象放进包装类里面,对包装类进行模糊查询 -->
     <select id = "queryQueryVoByusername" parameterType = "queryVo"  resultType = "com.itheima.mybatis.pojo.User">
     select * from user
     where 
     username like '%${user.username}%' 
     </select>
     
     <!--对包装类进行插入insert 没有返回值,所以没有resultType, 包装类的时候,user.username需注意-->
     <insert id = "insertQueryVo" parameterType = "queryVo" >
     insert into user
     (username,birthday,sex,address) values
     (#{user.username},#{user.birthday},#{user.sex},#{user.address})
     </insert>
     
     
     <!-- 对包装类进行更新 -->
     <update id = "updateQueryVo" parameterType = "queryVo">
     update user
     set username = #{user.username} where id = #{user.id}
     </update>
     
     
     <!--查询表条目数量 select count(*)from user 把性别和姓名相似的行数统计出来 -->
     <select id = "queryUserCount" parameterType = "queryVo" resultType = "int">
     select count(*)from user where user.sex = #{user.sex} and user.username like '%${user.username}%' 
     </select>

UserMapper接口
	List<User> queryQueryVoByusername(QueryVo queryVo);//包装类进行模糊查询
	
	void insertQueryVo(QueryVo queryVo);//包装类进行插入
	
	void updateQueryVo(QueryVo queryVo);//包装类进行更新
	
	int queryUserCount(QueryVo queryVo);//查询数据表条目,通过这个方法直接找到UserMapper.xml文件执行sql,直接得到一个int值返回,打印出来即可
	
下面进行JUNIT测试类的编写,其实和之前没什么区别,只不过user的各种属性set进去之后返回给包装类对象queryVo接收,最后userMapper对象调用接口的方法,把queryVo传进去即可完成查询,还可以输出查询一条POJO对象或者POJO列表。


@Test
	public void testqueryQueryVoByusername(){
		SqlSession sqlSession = this.sqlSessionFactory.openSession();
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		try {
			QueryVo queryVo = new QueryVo();
			User user = new User();
			user.setUsername("张");
			queryVo.setUser(user);//层层包装
			//开始查询
			List<User> list = userMapper.queryQueryVoByusername(queryVo);
			for (User u : list) {
				System.out.println(u);
			}
			sqlSession.commit();
		} finally {
			sqlSession.close();
		}
	}
	
	@Test
	public void testinsertQueryVo(){
		SqlSession sqlSession = this.sqlSessionFactory.openSession();
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		try {
			QueryVo queryVo = new QueryVo();
			User user = new User();
			user.setAddress("A");
			user.setBirthday(new Date());
			user.setSex("男");
			user.setUsername("Q");
			queryVo.setUser(user);
			userMapper.insertQueryVo(queryVo);
			sqlSession.commit();
		} finally {
			sqlSession.close();
		}
	}
	
	@Test
	public void testupdateQueryVo(){
		SqlSession sqlsession = this.sqlSessionFactory.openSession();
		UserMapper userMapper = sqlsession.getMapper(UserMapper.class);
		try {
			QueryVo queryVo = new QueryVo();
			User user = new User();
			user.setUsername("QQQ");
			user.setId(49);
			queryVo.setUser(user);
			userMapper.updateQueryVo(queryVo);
			sqlsession.commit();
		} finally {
			sqlsession.close();
		}
	}
	
	
	@Test
	public void testqueryUserCount(){//查询特定列属性值一致的行数,输出行数,但是特定属性一致需要进行包装类进行set
		SqlSession sqlsession = this.sqlSessionFactory.openSession();
		UserMapper userMapper = sqlsession.getMapper(UserMapper.class);
		try {
			QueryVo queryVo = new QueryVo();
			User user = new User();
			user.setSex("1");
			user.setUsername("张");
			queryVo.setUser(user);
			int count = userMapper.queryUserCount(queryVo);
			System.out.println("User表的条目一共有"+count+"条。");
			sqlsession.commit();
		} finally {
			sqlsession.close();
		}
	}



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值