MyBatis学习笔记——08MyBatis的输入核心(掌握)

MyBatis学习笔记——MyBatis的输入核心(掌握)

完整学习路线:https://blog.csdn.net/qq_40163148/article/details/89668242

输入映射

注意这里我们按照mybatis开发规范使用的是mapper动态代理的方法

需求:完成用户信息的综合查询,需要传入查询条件很复杂(可能包括用户信息,其他信息,比如商品,订单的)

这种方式很重要也很常用

1.自定义包装类型pojo

针对上边的需求,建议使用自定义的pojo

在包装类型的pojo中将复杂的查询条件包装进去

在这里我们定义了一个名为UserQueryVo的baen表示把表示层和持久层结合的简单bean

在这里插入图片描述

package com.lipengge.mybatis.bean;

public class UserQueryVo {
	/*
	 * UserQueryVo是一种是表现层和持久层结合的简单javabean
	 */
	private UserCustom userCustom;

	public UserCustom getUserCustom() {
		return userCustom;
	}

	public void setUserCustom(UserCustom userCustom) {
		this.userCustom = userCustom;
	}

	
    //这里根据需求还可以创建许多这样的类型
 
}

里面的UserCustom是一个继承User的类用来丰富User的属性因为以后User(MyBatis逆向工程)会自动生成,所以尽量不要修改User而是通过继承来实现自己所需要的bean

package com.lipengge.mybatis.bean;

public class UserCustom extends User{
	//针对User逆向工程会生成我们最好不要改而是通过继承来创建我们自己需要的对象比如UserCustom类

}

2.mapper.xml

在UserMapper.xml中定义用户信息综合查询(查询条件复杂,通过高级查询进行复杂关联查询)

在这里插入图片描述
在这里插入图片描述

<!--  
UserQueryVo:这里之所以可以直接用类名是因为在SqlMapConfig里定义了别名
UserCustom:同上
这里输入的参数是我们定义好的包装的pojo类
输出映射是我们的UserCustom
#{userCustom.user_sex}取出包装pojo的性别这里的userCustom一定要和UserQueryVo里定义的一模一样
${userCustom.user_name}取出包装pojo的姓名
-->
<select id="findUserList" parameterType="UserQueryVo" resultType="UserCustom">
select * from userdb where userdb.user_sex=#{userCustom.user_sex} and userdb.user_name like '%${userCustom.user_name}%'
</select>

3.mapper.java

在这里插入图片描述

package com.lipengge.mybatis.mapper;

import java.util.List;

import com.lipengge.mybatis.bean.User;
import com.lipengge.mybatis.bean.UserCustom;
import com.lipengge.mybatis.bean.UserQueryVo;

public interface UserMapper {
	/*要写mapper.xml映射文件(和User.xml文件是相同的只不过改动了namespace)
	 * mybatis自动代理开发规范:
	 * 特别重要:mapper.xml中的namespace必须和mapper.java中的全限定性名一致(com.lipengge.mybaits.UserMapper)
	 *        不要忘了在SqlMapConfig.xml中配置mapper.xml
	 * 1.mapper.java接口函数名必须和statement的id一致
	 * 2.mapper.java接口函数参数必须和mapper.xml中的一致
	 * 3.mapper.java接口函数返回类型必须和mapper.xml中的一致
	 * 使用须知:
	 * 4.如果mapper返回单个pojo对象则代理对象内部通过selectOne()来实现
	 * 5.如果mapper返回多个pojo对象则代理对象内部通过selectList()来实现
	 */
	//1.根据id查询用户
   public User findUserById(int id) throws Exception;
   //2.根据name查询用户模糊查询
   public List<User> findUserByName(String name) throws Exception;
   //3.插入用户
   public void insertUserById(User user) throws Exception;
   //4.删除用户
   public void deleteUserById(int id) throws Exception;
   //5.用户信息综合查寻
   public List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception;
   //6.用户信息综合查询总数
   public int findUserCount(UserQueryVo userQueryVo) throws Exception;
   //7.根据id查询用户(别名查询)
   public User findUserByIdResultMap(int id) throws Exception;
   
}

4.测试类

在这里插入图片描述

package com.lipengge.mybatis.first;

import static org.junit.Assert.*;

import java.io.InputStream;

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 com.lipengge.mybatis.bean.User;
import com.lipengge.mybatis.bean.UserCustom;
import com.lipengge.mybatis.bean.UserQueryVo;
import com.lipengge.mybatis.mapper.UserMapper;

public class TestMapper {
    private SqlSessionFactory ssf;
	@Before
	public void setUp() throws Exception {
		String resource="SqlMapConfig.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		ssf= new SqlSessionFactoryBuilder().build(inputStream);
	}
	@Test
	public void test() throws Exception {
		SqlSession openSession = ssf.openSession();
		//mybatis自动生成usermapper代理对象
		UserMapper um=openSession.getMapper(UserMapper.class);
//		System.out.println(um.findUserById(6));
//		System.out.println(um.findUserByName("振川"));
//		User user=new User();
//		user.setUser_age(63);
//		user.setUser_name("王八蛋");
//		user.setUser_name("男");
//		um.insertUserById(user);
//		System.out.println(user.getId());
	um.deleteUserById(22);
		UserQueryVo userQueryvo=new UserQueryVo();
		UserCustom userCustom=new UserCustom();
		userCustom.setUser_sex("男");
		userCustom.setUser_name("振川");
		userQueryvo.setUserCustom(userCustom);
		System.out.println(um.findUserCount(userQueryvo));
		System.out.println(um.findUserList(userQueryvo));
//		System.out.println(um.findUserByIdResultMap(6));
		
		openSession.close();
		
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值