输入类型(parameterType)
- 传递简单类型(参考Mybatis入门程序)
- 传递POJO对象(Mybatis使用Ognl表达式解析对象字段的值,#{}占位符与拼接符 ${}括号内的值为POJO属性名称)
- 传递POJO包装对象
开发中通过POJO传递查询条件,查询条件是综合的查询条件,不仅包括用户查询条件还包括其他的查询条件(如用户购买商品信息或订单号等),这是可以使用包装对象传递输入参数。
- QueryVo.java 包装User类
public class QueryVo {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
- SQL语句
SELECT * FROM `user` WHERE username LIKE '%%' and sex =
- 映射文件 UserMapper.xml
</insert>
<!--使用包装类型查询用户
使用ognl从对象中去属性值,如果是包装对象可以使用.操作符来取其内部的属性
-->
<select id="findUserbyVo" parameterType="cn.zst.domain.QueryVo" resultType="cn.zst.domain.User">
SELECT * from `user` WHERE username LIKE '%${user.username}%' and sex=#{user.sex}
</select>
- 接口
public interface UserMapper {
public User findUserById(Integer id);
//动态代理情况中,如果返回结果集为list,那么Mybatis会在生成实现类的时候,会自动调用selectList()方法
public List<User> findUserByName(String userName);
public void insertUser(User user);
public void delUserById(Integer id);
public List<User> findUserbyVo(QueryVo vo);
}
- 测试方法
@Test
public void testFindUserByVo()throws Exception{
SqlSession openSession = factory.openSession();
//获得Mapper的代理对象
UserMapper mapper = openSession.getMapper(UserMapper.class);
//创建QueryVo对象
QueryVo vo = new QueryVo();
//创建user对象
User user = new User();
user.setUsername("王");
user.setSex("1");
vo.setUser(user);
//根据queryvo查询用户
List<User> userbyVo = mapper.findUserbyVo(vo);
System.out.println(userbyVo);
}
输出映射(resultType)
-
输出POJO对象(参考Mybatis入门程序)
-
输出POJO列表(参考Mybatis入门程序)
-
输出简单(基本)类型
-
SQL语句
SELECT COUNT(*) FROM `user`
- 映射文件
<!--返回结果集是基本类型,只有返回结果为一行一列时,返回值类型才能指定成基本类型-->
<select id="findUserCount" resultType="java.lang.Integer">
SELECT COUNT(*) FROM `user`
</select>
- 接口
public interface UserMapper {
public User findUserById(Integer id);
//动态代理情况中,如果返回结果集为list,那么Mybatis会在生成实现类的时候,会自动调用selectList()方法
public List<User> findUserByName(String userName);
public void insertUser(User user);
public void delUserById(Integer id);
public List<User> findUserbyVo(QueryVo vo);
public Integer findUserCount();
}
- 测试方法
@Test
public void testFindUserCount() throws Exception{
SqlSession openSession = factory.openSession();
UserMapper mapper = openSession.getMapper(UserMapper.class);
Integer count = mapper.findUserCount();
System.out.println(count);
}
resultMap
resutlType 可以指定POJO将查询结果映射为POJO,但需要POJO的属性名和SQL查询的列名一致才能映射成功。
如果SQL查询字段名和POJO的属性名不一致,可以通过resultMap将字段名和属性名作为一个对应关系,resultMap实质上还需要将查询结果映射到POJO对象中。
resultMap可以实现将查询结果映射为复杂类型的POJO,比如在查询结果映射对象中包含POJO和list实现一对一查询和一对多查询。