conn one statement nbu 指定 nec int 代理
select 语句有以下几种情况:
(1) 查找单条记录。
(2) 查找多条记录。
如果直接使用 SqlSession 接口来获取查询结果,则应使用 selectOne() 方法来查询单条记录,使用 selectList() 方法来查询多条记录。
本文采用没有采用这种方式,而是使用 Mapper 接口的方式来获取查询结果。为了节省篇幅和直奔主题,本文没有定义 Service 接口及其实现类,而是在单元测试代码中使用 Mapper 接口调用相应方法。
(1)PersonMapper.xml 文件的配置:
- <!--
- findPersonById:根据id查找单个记录。
- id: findPersonById,SQL语句的ID,应该与PersonMapper接口的findPersonById方法一一对应。
- parameterType:参数的Java类型。
- resultType:结果的Java类型。
- -->
- <select id="findPersonById" parameterType="java.lang.String" resultType="com.test.mybatis3.pojo.Person">
- select * from t_person where id=#{id}
- </select>
#{id} 表示 SQL 语句在此处有一个占位符,整个 SQL 语句类似如下效果:
select * from t_person where id=
MyBatis 会自动将合适的参数绑定到此占位符,原理上类似于下面的代码片段:
- String sql = "select * from t_person where id=?";
- PreparedStatement ps = connection.prepareStatement(sql);
- String id = "zhangsan";
- ps.setString(1, id);
MyBatis 会自动将 SQL 语句执行后得到的记录中的字段值按照字段名称去匹配 parameterType 属性指定的 Java 类型的对象的同名属性中。
- class Person
- private String id;
- private String name;
- private int status;
- //此处将get,set方法省略了。
- }
t_person 表的查询结果记录中,id 字段的值赋值到 Person 对象的 id 属性,name 字段赋值到 name 属性,status 字段赋值到 status 属性。
(2)PersonMapper.java 文件:
- public interface PersonMapper {
- /**
- * 根据ID查找单个记录。
- * *@param id
- */
- Person findPersonById(String id) throws Exception;
- }
(3) 测试代码:
为了节省篇幅,省略了一些跟本部分主体关系不大的代码。
- //打开Session。
- session = sessionBuilder.openSession();
- //找到MyBatis自动实现的PersonMapper接口的代理对象。
- PersonMapper personMapper = session.getMapper(PersonMapper.class);
- //根据id进行查找。
- Person person = personMapper.findPersonById("zhangsan");
- System.out.println(person);
(4) 运行结果:
查询到 1 条记录。
by Mapper
0 [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findPersonById - ==> Preparing: select * from t_person where id=
46 [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findPersonById - ==> Parameters: zhangsan(String)
68 [main] TRACE com.test.mybatis3.mapper.PersonMapper.findPersonById - <== Columns: id, name, status
68 [main] TRACE com.test.mybatis3.mapper.PersonMapper.findPersonById - <== Row: zhangsan, zhang san, 0
71 [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findPersonById - <== Total: 1
Person [id=zhangsan, name=zhang san, status=0]
当 select 语句的查询结果为多条记录时,Mapper 接口相应方法的返回值应该是集合类型。
(1)PersonMapper.xml 文件:
定义 Select 语句如下:
- <!--
- findAllPersons:查询所有记录。
- resultType:结果是集合类型时表示集合中元素的Java类型:
- 本例中Mapper接口方法的返回值为List<Person>。
- -->
- <select id="findAllPersons" resultType="com.test.mybatis3.pojo.Person">
- select * from t_person order by id asc
- </select>
(2)PersonMapper.java 文件:
定义 PersonMapper 接口方法如下:
- /**
- * 查询所有记录。
- * 对应于PersonMapper.xml文件中的id为findAllPersons的select语句。
- * @return
- * @throws Exception
- */
- List findAllPersons() throwsException;
(3) 测试代码:
- //打开Session。
- session = sessionBuilder.openSession();
- //找到MyBatis自动实现的PersonMapper接口的代理对象。
- PersonMapper personMapper = session.getMapper(PersonMapper.class);
- //调用PersonService接口的findAllPersons()方法,
- //内部会执行PersonMapper的findAllPersons()方法。
- List persons = personMapper.findAllPersons();
- //输出查询结果。
- for(Person person : persons){
- System.out.println(person);
- }
(4) 运行结果:
找到 2 条记录。
by Mapper
0 [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findAllPersons - ==> Preparing: select * from t_person order by id asc
47 [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findAllPersons - ==> Parameters:
149 [main] TRACE com.test.mybatis3.mapper.PersonMapper.findAllPersons - <== Columns: id, name, status
149 [main] TRACE com.test.mybatis3.mapper.PersonMapper.findAllPersons - <== Row: lisi, li si, 0
151 [main] TRACE com.test.mybatis3.mapper.PersonMapper.findAllPersons - <== Row: zhangsan, zhang san, 0
151 [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findAllPersons - <== Total: 2
Person [id=lisi, name=li si, status=0]
Person [id=zhangsan, name=zhang san, status=0]
MyBatis 应用开发 (8) 映射之 select 语句
来源: http://www.bubuko.com/infodetail-2025691.html