.默认情况下,Mybatis会将查询到的数据的列和需要返回对象的属性逐一进行匹配,但是如果查询到的数据表的列和需要返回
的对象属性名不一致,就不会自动赋值,(只是把数据表的值查出来了,并没有放到对象中,对象中名字为name属性),所以这是需要采用resultMap
session.commit();//mybatis的事务默认是不会提交的 需要手动提交
1.未使用resultMapde情况:是直接用的map输出,但Map集合不能很好的描述一个领域模型,一般采用JavaBean(POJO)来描述模型数据
两个测试的配置代码在同一个配置文件上
package org.mybatis.test;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.db.MybatisDbutil;
public class SelectListTest {
public static void main(String[] args) throws IOException {
MybatisDbutil dbutil=new MybatisDbutil();//如果不是定义的静态方法,就要创建对象
SqlSession session=dbutil.getSqlSession();
//查询表中所有数据返回List集合,集合中每一个都是Map对象
List<Map<String,Object>> list=session.selectList("org.mybatis.mapper.UserMapper.selectList");
for(Map<String,Object> row:list){
System.out.println(row);
}
session.commit();//mybatis的事务需要手动提交
session.close();
//
}
}
{SEX=男, ID=6, NAM=ad, AGE=22}
{SEX=男, ID=7, NAM=ad, AGE=22}
{SEX=女, ID=8, NAM=test, AGE=18}
{SEX=女, ID=10, NAM=qwe, AGE=12}
{SEX=女, ID=11, NAM=qwe, AGE=12}
{SEX=女, ID=12, NAM=qwe, AGE=12}
{SEX=女, ID=13, NAM=INSERT, AGE=12}
{SEX=男, ID=14, NAM=JAVA, AGE=23}
{SEX=男, ID=15, NAM=C语言, AGE=50}
{SEX=男, ID=16, NAM=python, AGE=20}
2.使用resultMapde情况
eclipse中 快捷键ctrl+shift+x 转为大写 ctrl+shift+y 转为小写
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace指用户自定义的命名空间。 -->
<mapper namespace="org.mybatis.mapper.UserMapper">
<resultMap id="userResultMap" type="org.mybatis.domain.User" >
<!-- id是表示主键
type 表示实际返回的类型-->
<id property="id" column="USER_ID" />
<result property="name" column="USER_NAME"/>
<result property="sex" column="USER_SEX"/>
<!-- 这里coiumn的配置证明了与结果与数据库字段大小写内容无关但是名字一定要匹配 不匹配赋值为null -->
<result property="age" column="user_AGE"/>
</resultMap>
<!--
id="save"是唯一的标示符
parameterType属性指明插入时使用的参数类型
useGeneratedKeys="true"表示使用数据库的自动增长策略
-->
<select id="selectresultMap" resultMap="userResultMap">
select * from tb_user2
</select>
<insert id="save" parameterType="org.mybatis.domain.User" useGeneratedKeys="true">
INSERT INTO TB_USER(name,sex,age)
VALUES(#{name},#{sex},#{age})
</insert>
<select id="selectUser" parameterType="int" resultType="org.mybatis.domain.User">
SELECT * FROM TB_USER WHERE id=#{id}
</select>
<update id="modifyUser" parameterType="org.mybatis.domain.User">
UPDATE
tb_user SET
NAME=#{name},sex=#{sex},age=#{age} WHERE id=#{id}
</update>
<delete id="removeUser" parameterType="int">
delete from tb_user where id=#{id}
</delete>
<select id="selectList" resultType="map">
select * from tb_user
</select>
</mapper>
package org.mybatis.test;
import java.io.IOException;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.db.MybatisDbutil;
import org.mybatis.domain.User;
public class ResultMapTest {
public static void main(String[] args) throws IOException {
MybatisDbutil dbutil=new MybatisDbutil();//如果不是定义的静态方法,就要创建对象
SqlSession session=dbutil.getSqlSession();
//查询表中所有数据返回List集合,集合中每一个都是Map对象
List<User> user_list=session.selectList("org.mybatis.mapper.UserMapper.selectresultMap");
for(User user:user_list){
System.out.println(user);//记得重写toString方法
}
session.commit();//mybatis的事务需要手动提交
session.close();
//
}
}
2018-02-04 14:20:07,724 [main] DEBUG [org.mybatis.mapper.UserMapper.selectresultMap] - ==> Preparing: select * from tb_user2
2018-02-04 14:20:07,760 [main] DEBUG [org.mybatis.mapper.UserMapper.selectresultMap] - ==> Parameters:
2018-02-04 14:20:07,789 [main] DEBUG [org.mybatis.mapper.UserMapper.selectresultMap] - <== Total: 5
User [id=1, name=张三, sex=null, age=18]
User [id=2, name=李四, sex=null, age=19]
User [id=3, name=王五, sex=null, age=20]
User [id=4, name=小美, sex=null, age=16]
User [id=5, name=校花, sex=null, age=18]
<!-- 多表查询的基本操作 -->
<!-- 映射学生表对象的resultMap-->
<!-- id主键配置 -->
<resultMap type="org.mybatis.domain.Student" id="studentresultMap">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="sex" column="sex"/>
<result property="age" column="age"/>
<!-- 引用关系用关联映射 注意数据中表的字段calzz_id错误暂时不能修改 导致这里配置注意 要细心啊 -->
<association property="clazz" column="calzz_id" javaType="org.mybatis.domain.Clazz"
select="selectClazzWithId"/>
</resultMap>
<!-- 根据id查询班级 -->
<select id="selectClazzWithId" resultType="org.mybatis.domain.Clazz">
select * from tb_clazz where id = #{id}
</select>
<!-- 查询所有学生信息 先执行 -->
<select id="selectStudent" resultMap="studentresultMap">
select * from tb_student
</select>
2018-02-05 18:04:56,462 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudent] - ==> Preparing: select * from tb_student
2018-02-05 18:04:56,516 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudent] - ==> Parameters:
2018-02-05 18:04:56,541 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClazzWithId] - ====> Preparing: select * from tb_clazz where id = ?
2018-02-05 18:04:56,542 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClazzWithId] - ====> Parameters: 1(Integer)
2018-02-05 18:04:56,558 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClazzWithId] - <==== Total: 1
2018-02-05 18:04:56,561 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClazzWithId] - ====> Preparing: select * from tb_clazz where id = ?
2018-02-05 18:04:56,561 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClazzWithId] - ====> Parameters: 2(Integer)
2018-02-05 18:04:56,562 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClazzWithId] - <==== Total: 1
2018-02-05 18:04:56,563 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudent] - <== Total: 4
Student [id=1, name=jack, sex=男, age=22, clazz=Clazz [id=1, code=j1601]]
Student [id=2, name=rose, sex=女, age=21, clazz=Clazz [id=1, code=j1601]]
Student [id=3, name=Tom, sex=男, age=20, clazz=Clazz [id=2, code=j1602]]
Student [id=4, name=mary, sex=女, age=20, clazz=Clazz [id=2, code=j1602]]
<!-- 根据班级查学生,由于一个班级对应多个学生,所以查出来的结果应该是一个集合 下面进行 班级表的映射 -->
<resultMap type="org.mybatis.domain.Clazz" id="classresultMap">
<id property="id" column="id" />
<result property="code" column="code" />
<!-- 使用student表中的id作为参数 -->
<collection property="students" javaType="ArrayList"
column="id" ofType="org.mybatis.domain.Student" select="selectStudentWithId" />
</resultMap>
<select id="selectStudentWithId" resultType="org.mybatis.domain.Student">
select * from tb_student where calzz_id= #{id}
</select>
<select id="selectClass" resultMap="classresultMap">
select * from tb_clazz
</select>
package org.mybatis.test;
import java.io.IOException;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.db.MybatisDbutil;
import org.mybatis.domain.Clazz;
import org.mybatis.domain.Student;
public class ClazzToStudentTest {
public static void main(String[] args) throws IOException {
MybatisDbutil dbutil=new MybatisDbutil();//如果不是定义的静态方法,就要创建对象
SqlSession session=dbutil.getSqlSession();
//查询表中所有数据返回List集合,集合中每一个都是Map对象
List<Clazz> clazz_list=session.selectList("org.mybatis.mapper.UserMapper.selectClass");
for(Clazz clazz:clazz_list){
System.out.println(clazz);//记得重写toString方法
List<Student> students=clazz.getStudents();
for(Student stu:students){
System.out.println(stu.getId()+" "+stu.getName()+" "+stu.getSex()+" "+stu.getAge());
}
}
session.commit();//mybatis的事务需要手动提交
session.close();
//
}
}
2018-02-05 18:57:41,013 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClass] - ==> Preparing: select * from tb_clazz
2018-02-05 18:57:41,058 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClass] - ==> Parameters:
2018-02-05 18:57:41,083 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudentWithId] - ====> Preparing: select * from tb_student where calzz_id= ?
2018-02-05 18:57:41,084 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudentWithId] - ====> Parameters: 1(Integer)
2018-02-05 18:57:41,122 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudentWithId] - <==== Total: 2
2018-02-05 18:57:41,125 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudentWithId] - ====> Preparing: select * from tb_student where calzz_id= ?
2018-02-05 18:57:41,125 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudentWithId] - ====> Parameters: 2(Integer)
2018-02-05 18:57:41,126 [main] DEBUG [org.mybatis.mapper.UserMapper.selectStudentWithId] - <==== Total: 2
2018-02-05 18:57:41,127 [main] DEBUG [org.mybatis.mapper.UserMapper.selectClass] - <== Total: 2
Clazz [id=1, code=j1601]
1 jack 男 22
2 rose 女 21
Clazz [id=2, code=j1602]
3 Tom 男 20
4 mary 女 20