【08】Mybatis映射配置

1. 输入参数映射

1.1 Java简单类型 (基本类型、String)

    <!-- 根据id查询用户信息 -->
	<select id="findUserById" parameterType="int" resultType="user">
		select * from user where id = #{id}
	</select>
	<!-- 根据名称模糊查询用户信息 -->
	<select id="selectUserByName" parameterType="string" resultType="user">
	   select * from user where username like '%${value}%'
	</select>
  • 通过sql标签的parameterType属性直接引用类型的别名
  • 在sql语句中的引用方式:
    • #{参数名}:具有类型编译功能;当参数类型为java简单类型时,参数名任意取;
    • ${参数名}:不具备类型编译功能;要求参数名必须为value;只适用于模糊查询
      引用列名排序的情况

1.2 PO类

	<!—传递pojo对象综合查询用户信息 -->
	<select id="findUserByUser" parameterType="user" resultType="user">
	   select * from user where id=#{id} and username like '%${username}%'
	</select>

直接在sql标签的parameterType属性直接引用类型的别名或类型的全限定名都可
在sql语句中,直接通过 #{PO类属性名} 的方式引用。

1.3 传递pojo包装对象

  • 定义包装对象将查询条件(pojo)以类组合的方式包装起来。
	public class QueryVo {
		private User user;
		//自定义用户扩展类
		private UserCustom userCustom;
 	}
  • mapper.xml映射文件
    在这里插入图片描述

1.4 集合

集合类型包括:map 数组 set list
 举例:条件查询(条件封装到Map集合中)
 步骤1:添加查询接口
在这里插入图片描述
 步骤2:添加映射sql
在这里插入图片描述
 步骤3:测试
在这里插入图片描述

1.5 小结:

  • mybatis中SQL接受的参数分为:java简单类型、Po类、集合类型(List、数组、Map)
    无论传哪种参数给mybatis,框架都会将参数放在一个Map中:
     传入简单类型:变量名作为key,变量值作为value 此时生成的map只有一个元素。
     传入对象: 对象的属性名作为key,属性值作为value,

如:
Users: name=”tom” pwd=”123” sex=”1”
Map: key=”name” value=”tom”
key=”pwd” value=”123”
key=”sex” value=”1”
 传入List: "list"作为key,这个List是value (这类参数可以迭代,利用标签实现循环)
 传入数组: "array"作为key,数组作为value(同上)
 传入Map: 键值不变。

2. 输出参数映射

2.1 resultType

2.1.1 Java简单类型

  •    <!-- 获取用户列表总数 -->
       <select id="findUserCount" parameterType="user" resultType="int">
          select count(1) from user
       </select>
    
  • Po类

  •    public int findUserCount(User user) throws Exception;
    
    
  • 调用

       Public void testFindUserCount() throws Exception{
      		//获取session
      		SqlSession session = sqlSessionFactory.openSession();
      		//获取mapper接口实例
      		UserMapper userMapper = session.getMapper(UserMapper.class);
      	
      		User user = new User();
      		user.setUsername("管理员");
      
      		//传递Hashmap对象查询用户列表
      		int count = userMapper.findUserCount(user);
      		
      		//关闭session
      		session.close();
      	}
    

2.1.2 Java

  • 框架封装记录到Po类对象时,是按照 字段名=属性名的方式进行值的封装

  • 如果属性名在记录中没有相应的字段名,则该属性值为null

  • 如果Po类对象中的所有属性跟字段名都不匹配,则该对象为null

  • Mapper.xml

    	<!-- 根据id查询用户信息 -->
    	<select id="findUserById" parameterType="int" resultType="user">
    		select * from user where id = #{id}
    	</select>
    
    
  • Mapper接口

        public User findUserById(int id) throws Exception;
    
  • 测试

        public void testFindUserById() throws Exception {
      		//获取session
      		SqlSession session = sqlSessionFactory.openSession();
      		//获限mapper接口实例
      		UserMapper userMapper = session.getMapper(UserMapper.class);
      		//通过mapper接口调用statement
      		User user = userMapper.findUserById(1);
      		System.out.println(user);
      		//关闭session
      		session.close();
      	}
    

2.1.3 集合

当接口方法返回类型为集合时,resultType属性必须指定的是集合元素的类型
在这里插入图片描述
在这里插入图片描述

2.1.4 resultType总结

  • 输出pojo对象和输出pojo列表在sql中定义的resultType是一样的。

  • 返回单个pojo对象要保证sql查询出来的结果集为单条,内部使用session.selectOne方法调用,mapper接口使用pojo对象作为方法返回值。

  • 返回pojo列表表示查询出来的结果集可能为多条,内部使用session.selectList方法,mapper接口使用List对象作为方法返回值。

2.2 resultMap

  • 适用情况:

    • 当返回结果集字段名跟封装类对象的属性名不一致
    • 当封装类对象是一个嵌套类形式的时
  • 举例:情况1
    Student类
    在这里插入图片描述
    Student_Teacher接口
    在这里插入图片描述
    Student_Teacher映射文件
    在这里插入图片描述

  • 举例:情况2
    在这里插入图片描述
    关于映射Map的继承
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值