MyBatis的输出结果:
简介:
mybatis执行sql语句 , 得到java对象
ResultType : 结果类型 , 指SQL语句执行完毕之后 , 数据转为java对象 , 这个java类型是任意的 ,
处理方式 :
- mybatis执行sql语句 , 然后mybatis调用类的无参数构造方法 , 创建对象
- mybatis把ResultSet指定的列值赋给同名的属性
常见处理 : 比如说 , 表中有很多列 , 但是我们只需要获取 , 其中的一些数据 , 那么可以将这些需要的属性封装一个类 , 让返回值类型为这个封装的类 , 这样查询出来的数据 , 就只有封装的类中的属性 ,
返回一个简单类型 :
返回的值可以是别名(mybatis规定的别名 , 有固定的格式 , 是简化代码书写的)
也可以是java类型的全限定名称
//接口中 :
int selectCount();
<!--mapper中 : -->
<select id="selectCount" resultType="int(别名)或者是java.lang.Integer(全限定名称)">
select count(*) from student;
</select>
返回一个Map: (使用比较少)
sql的查询结果作为Map的key和value , 推荐使用Map<Object , Object>
注意 : Map作为接口返回值 , sql语句的查询结果最多只能有一条记录 , 大于一条记录是错误
ResultMap : 结果映射 (指定列名和java对象的属性对应关系)
(1) 你自定义你的列值赋值给哪个属性
(2) 当你的列名和属性名不一样时 ,一定要使用resultMap
<!--
使用resultMap
先定义resultMap
在select标签中 , 使用resultMap来引用1定义的
-->
<resultMap id="studentMap" type="org.sichen.domain.Student">
<!--
id : 自定义名称 , 表示你定义的这个resultMap (就是resultType的值)
type : java类型的全限定名称
-->
<!--列名和java属性的关系-->
<!--主键列 , 使用id标签
column : 列名
property : java类型的属性名(也就是要赋值的属性)
-->
<id column="id" property="id"></id>
<!--非主键列 , 使用result-->
<result column="name" property="name"></result>
<result column="email" property="email"></result>
<result column="age" property="age"></result>
</resultMap>
<!--这里是ResultMap , 注意 !!!!!
ResultMap 和 ResultType二者不能同时用 , 只能二选一
-->
<select id="selectAllStudents" resultMap="studentMap">
select id,name,email,age from student;
</select>
列名和属性名不同的两种方法 :
(1) 使用ResultMap , 也就是上边的解决方法
(2) ResultType默认的原则是 , 同名的列值赋值给同名的的属性 , 所以可以给列起别名 , (对应java对象的属性名)
自定义类型的别名: typeAlias
在mybatis主配置文件中定义 , 使用定义别名
然后就可以在resultType中使用自定义的别名
第一种 : 给数据类型定义别名(也就是创建的实体类)
<!--给数据类型 定义别名-->
<typeAliases>
<!--
可以指定一个类型 , 一个自定义别名
type : 自定义类型的全限定名称
alias : 自定义的别名
-->
<typeAlias type="org.sichen.domain.QueryParam" alias="qp"/>
<typeAlias type="org.sichen.domain.Student" alias="stu"/>
</typeAliases>
第二种方式 : 直接给这个类型所在的包设置
这个包下的所有类 , 类名就是别名 (类名不区分大小写)
<typeAliases>
<package name="org.sichen.domain.Student"/>
</typeAliases>