对于初学者来说,mybatis虽简单,但是也不免粗心大意,让一些小问题而费尽心思,那么今天我们就来谈谈resultType中的返回值问题
- 当输出结果只有一列时,可以使用ResultType指定简单类型作为输出结果类型。
这里我们来一个简单的程序测试
首先创建一个bean工具类,对应的在数据库中把表建好,要形成一一对应。bean工具类的set和get方法自己注入。
public class User {
private int id;
private String username;
private String sex;
private Date birthday;
private String address;
public int getId() {
return id;
}
创建一个映射文件UserMapper.xml
<?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">
<!--这里我们使用的是mapper代理,所以namespace的命名要有一定的规范,必须和我们的接口类路径一致,要遵循mapper代理中的一些规范,如果不了解规范,可以上网搜一下-->
<mapper namespace="XXX.UserMapper">
<!-- 根据用户ID,查询用户信息 -->
<!--
[id]:statement的id,要求在命名空间内唯一
[parameterType]:入参的java类型
[resultType]:查询出的单条结果集对应的java类型
[#{}]: 表示一个占位符?
[#{id}]:表示该占位符待接收参数的名称为id。
-->
<!-- public User findUserById(int id); yiqixie.User这条语句是一个典型的单条查询,返回值只有一个对象,我们可以称之为单查询,这种返回值是最简单的,所以这里不加赘述-->
<select id="findUserById" parameterType="int" resultType="yiqixie.User">
SELECT * FROM USER WHERE id =#{id}
</select>
<!-- public List<User> findUsersByName(String username); yiqixie.User 那么这条查询语句返回的就是一个list集合了,因为你要用一个用户名去查询,有可能返回的是对个对象,或者你去查一些类似的东西,它返回给你的并不一定只有一条数据,所以,你就不得不考虑多个返回值类型,那么我们应该怎么写返回值呢?不是这里的返回值要和接口中的返回值类型一致吗?我们在resultType中需要写成list吗?对于这个问题,我想我们大可不必这么想,因为毕竟返回的对象还是一个User,只要我们在接收数据时给一个list集合收纳它就可以了,也就是说,我们在返回值那么依旧写User对象就ok。-->
<select id="findUsersByName" parameterType="String" resultType="yiqixie.User">
select * from user where username like '%${value}%'
</select>
</mapper>
这里我们还需要一个全局配置文件,把我们刚才定义的xml文件注入到全局文件中,这样程序才能正常的运行
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"></properties>
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
</dataSource>
</environment>
</environments>
<!-- 加载mapper -->
<mappers>
<mapper resource="sqlmap/UserMapper.xml"/>
</mappers>
</configuration>
测试一下
@Test
public void testForResultType(){
SqlSession sqlSession=sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> list=mapper.findUsersByName("rose");
System.out.println(list);
}
结果: