MyBatis应用开发(8)映射的select语句

1. 映射

 

1.1. select

select语句有以下几种植状态:

(1)查找单条记下。

(2)查找多长条记下。

 

若一直利用SqlSession接口来赢得查询结果,则答应以selectOne()方法来询问才条记下,使用selectList()方法来查询多久记下。

本文采用无以这种方式,而是利用Mapper接口的方法来取得查询结果。为了省去篇幅和直奔主题,本文没有定义Service接口及其实现类似,而是在单元测试代码中采用Mapper接口调用相应措施。

 

1.1.1. 搜寻单条记下

(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]

 

1.1.2. 招来多漫长记下

当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<Person>  findAllPersons() throws Exception;

 

 

 

(3)测试代码:

//打开Session。

session = sessionBuilder.openSession();



//找到MyBatis自动实现的PersonMapper接口的代理对象。

PersonMapper  personMapper = session.getMapper(PersonMapper.class);



//调用PersonService接口的findAllPersons()方法,

//内部会执行PersonMapper的findAllPersons()方法。

List<Person> 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]

 

网站地图xml地图