myBatis输出参数

本文详细介绍了MyBatis中对简单类型、对象类型、HashMap及resultMap的使用。通过示例展示了如何查询学生总数、单个学生信息、学生集合以及使用HashMap存储查询结果。还提及了当属性名与字段名不一致时的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简单类型

  8种简单类型+String
  mapper.xml

	<select id="queryStudentCount"	 resultType="int">
		select count(*)  from student 
	</select>

Java接口中

	int queryStudentCount();

Test.java测试类

//查询学生总数
	public static void queryStudentCount() throws IOException {
		Reader reader = Resources.getResourceAsReader("conf.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sessionFactory.openSession();
		StudentMapper studentMapper = session.getMapper(StudentMapper.class);
		System.out.println(studentMapper.queryStudentCount());
		session.close();
	}

二、对象类型

a.返回值为单个对象时,输出参数为实体对象类型
b.返回值为对象集合时,在mapper.xml中的resultType是返回值集合的对象类型
  在java类中,返回值为List<对象类型>
  mapper.xml

	<select id="queryStuByStuno"	parameterType="int"	 resultType="student">
		select * from student where stuno = #{stuno}
	</select>
	<select id="queryAllStudents" resultType="student">
		select * from student
	</select>

  Java接口

	Student queryStuByStuno(int stuNo);//查询单个学生
	List<Student> queryAllStudents();//查询多个学生的集合

  Test.java测试类

//查询单个学生
	public static void queryStuByStuno() throws IOException {
		Reader reader = Resources.getResourceAsReader("conf.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sessionFactory.openSession();
		StudentMapper studentMapper = session.getMapper(StudentMapper.class);
		System.out.println(studentMapper.queryStuByStuno(1).toString());
		session.close();
	}
//查询全部学生
	public static void queryAllStudents() throws IOException {
		Reader reader = Resources.getResourceAsReader("conf.xml");
		SqlSessionFactory sessionFactoty = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sessionFactoty.openSession();
		StudentMapper studentMapper = session.getMapper(StudentMapper.class);
		List<Student> students = studentMapper.queryAllStudents();
		System.out.println(students.toString());
		session.close();
	}	

三、HashMap

  HashMap本身是一个集合,可以存放多个数据。
  但是根据提示发现,返回值为HashMap是,查询结果只能是一个学生,此时是一个HashMap对象对应一个学生(no ,name)
  结论----》一个HashMap对应一个学生的多个元素(多个属性),对此可以用List<HashMap>存储
  HashMapA— no-----1
        name—zs
        age–22
  HashMapB— no-----2
        name—ww
        age–23
  mapper.xml

	<select id="queryStudentOutByHashMap"  resultType="HashMap">
		<!-- sql语句中字段的别名对应HashMap的key -->
		select stuno "no", stuname "name"  from student
	</select>

  Java接口

	List<HashMap<String, Object>> queryStudentOutByHashMap();

  Test.java测试类

//查询全部学生返回值用HashMap存储
		public static void queryStudentOutByHashMap() throws IOException {
			Reader reader = Resources.getResourceAsReader("conf.xml");
			SqlSessionFactory sessionFactoty = new SqlSessionFactoryBuilder().build(reader);
			SqlSession session = sessionFactoty.openSession();
			StudentMapper studentMapper = session.getMapper(StudentMapper.class);
			List<HashMap<String, Object>> studentsMap = studentMapper.queryStudentOutByHashMap();
			System.out.println(studentsMap.toString());
			session.close();
		}

四、resultMap

resultMap:实体类的属性、数据表的字段:类型、名字不同时(stuno–id)
注意:当属性名与字段名不一致时,除了使用resultMap以外,还可以使用resultType+HashMap

  1. resultMap
	<select id="queryStudentById" parameterType="int"   resultMap="queryStudent">
		select id , name from student where id = #{id}
	</select>
	
	<resultMap type="student" id="queryStudent">
		<!-- 指定类中的属性和表中的字段对应关系 -->
		<id  property="stuNo" column="id" />
		<result property="stuName" column="name"/>
	</resultMap>
  1. resultType+HashMap
	<select id="queryStudentByIdWithHashMap" parameterType="int"   resultType="student">
		<!-- 引号内的别名对应类中的属性名 -->
		select id "stuNo" , name "stuName" from student where id = #{id}
	</select>

注意:如果一个字段的结果始终为默认值(0、0.0、null),则可能是表的字段和类的属性名写错

### MyBatis 输入输出参数 使用指南 MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。在 MyBatis 中,输入输出参数的使用是其核心功能之一。以下将详细介绍 MyBatis 的输入输出参数及其使用方法。 #### 1. 输入参数MyBatis 中,输入参数可以通过 `parameterType` 属性指定。该属性可以接受多种类型的值,包括简单类型、POJO 类型和 Map 类型等。 - **简单类型** 如果输入参数是一个简单类型(如 `int`、`String` 等),MyBatis 会将其视为单个参数,并可以直接通过 `#{}` 占位符引用[^2]。 ```xml <select id="findOne" parameterType="int" resultType="com.zz.entity.User"> select * from user where id=#{id} </select> ``` - **POJO 类型** 当输入参数是一个 Java 对象时,可以通过对象的属性名访问参数值[^3]。 ```xml <select id="findUserByName" parameterType="com.zz.entity.User" resultType="com.zz.entity.User"> select * from user where name=#{name} </select> ``` - **Map 类型** 如果输入参数是一个 `Map`,可以通过键名访问对应的值[^4]。 ```xml <select id="queryEmpOrderByMoreWithHashMap" resultType="emp" parameterType="HashMap"> select * from emp where homeaddress=#{homeAddress} or schoolAddress like "%${schoolAddress}%" </select> ``` #### 2. 输出参数 输出参数通过 `resultType` 或 `resultMap` 指定,用于定义查询结果的映射方式。 - **简单类型** 如果返回值是一个简单类型,直接指定 `resultType` 为相应的类型即可[^3]。 ```xml <select id="countUsers" resultType="int"> select count(*) from user </select> ``` - **实体对象类型** 当返回值是一个 Java 对象时,`resultType` 应设置为该对象的全限定类名[^2]。 ```xml <select id="findOne" parameterType="int" resultType="com.zz.entity.User"> select * from user where id=#{id} </select> ``` - **集合类型** 如果返回值是一个集合,`resultType` 应设置为集合中元素的类型[^3]。 ```xml <select id="findAllUsers" resultType="com.zz.entity.User"> select * from user </select> ``` - **Map 类型** 返回值也可以是一个 `Map`,其中键值对表示字段名和字段值[^4]。 ```java HashMap<String, Object> studentMap = st.findhashmap(sn); System.out.println("学号: " + studentMap.get("no") + " \n姓名: " + studentMap.get("name")); ``` #### 3. 动态 SQL 动态 SQL 是 MyBatis 的一大特色,允许根据条件生成不同的 SQL 语句。常见的标签包括 `<if>`、`<choose>`、`<when>`、`<otherwise>` 和 `<foreach>` 等[^1]。 ```xml <select id="dynamicQuery" parameterType="HashMap" resultType="com.zz.entity.User"> SELECT * FROM user WHERE 1=1 <if test="name != null"> AND name = #{name} </if> <if test="age != null"> AND age = #{age} </if> </select> ``` ### 示例代码 以下是一个完整的示例,展示如何使用 MyBatis 的输入输出参数: ```java public interface UserMapper { User findOne(int id); List<User> findAllUsers(); int countUsers(); HashMap<String, Object> findhashmap(int sn); } public class User { private int id; private String name; // Getter and Setter } ``` ```xml <mapper namespace="UserMapper"> <select id="findOne" parameterType="int" resultType="com.zz.entity.User"> select * from user where id=#{id} </select> <select id="findAllUsers" resultType="com.zz.entity.User"> select * from user </select> <select id="countUsers" resultType="int"> select count(*) from user </select> <select id="findhashmap" parameterType="int" resultType="java.util.HashMap"> select no, name from user where id=#{id} </select> </mapper> ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值