MyBatis的映射文件
输入映射ParameterType
1,传递简单类型
2,传递POJO对象
3,传递POJO包装对象
4,传递Map对象
输出映射resultType/resultMap
1,resultType
使用resultType进行结果映射时,查询的列名和映射的POJO属性名完全一致,该列才能映射成功。
如果查询的列名和映射的POJO属性名全部不一致,则不会创建POJO对象;
如果查询的列名和映射的POJO属性名有一个一致,就会创建POJO对象。
输出简单类型:
当输出结果只有一列时,可以使用resultType指定简单类型作为输出结果类型
案例:输出一个count(*)
UserMapper.java:
public interface UserMapper {
/**
* @param user
* @return 受影响的行数
*/
public int save(User user);
public User findUserById(int id);
public List<User> findUserByUserQueryVO(UserQueryVO vo);
public List<User> findUserByMap(Map<String, Object> map);
/**
* 返回用户的个数
* @param vo
* @return
*/
public int findUserCount(UserQueryVO vo);
}
UserMapper.xml:
<!--查找用户的个数-->
<!--设置返回的数据为基本类型 int double long string-->
<select id="findUserCount" parameterType="userQueryVO" resultType="int">
select count(*) from user where sex = #{user.sex}
</select>
Demo06.java:
public class Demo06 {
SqlSession session;
@Before
public void before() throws IOException {
System.out.println("before........... 获取Session");
//a、读取配置文件
InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
//b、通过SqlSessionFactoryBuilder创建SqlSessionFactory会话工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
session = sessionFactory.openSession();
}
@After
public void after() {
System.out.println("after...............关闭Session");
//e、关闭SqlSession
session.close();
}
@Test
public void test1() throws IOException {
UserMapper mapper = session.getMapper(UserMapper.class);
//通过模型的包装类查询用户
UserQueryVO query = new UserQueryVO();
User user = new User();
user.setSex("1");//查找男性
query.setUser(user);
int count = mapper.findUserCount(query);
System.out.println("男性用户人数:"+count);
}
}
输出结果:
输出POJO单个对象:
代码:
public interface UserMapper{
public void save(User user);
public User findUserById(int id);
}
xml配置:
<select id="findUserById" parameterType="int" resultType="user">
select * from user where id = #{?}
</select>
输出POJO列表:
核心代码:
public List<User> findUserList(UserQueryVo userQueryVO);
xml配置:
<select id="findUserCount" parameterType="userQueryVO" resultType="int">
select * from user where sex = #{user.sex} and username like '%${user.username}%'
</select>
2,resutMap
如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。
/**
* 结果类型为resultMap
* @throws IOException
*/
@Test
public void test2() throws IOException {
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.findUserByIdResultMap(1);
System.out.println("用户数据:"+user);
}
- 1、定义resultMap
- 2、使用resultMap作为statement的输出映射类型
总结:
使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功
如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系
。