MyBatis应用开发(3)应用的开发方式注解方式篇

1.1. 注方式

1.1.1. 开步骤

对象:使用MyBatis从数据库被查询t_person表的普笔录。

 

MyBatis还可以运用注解来部署数据库被的笔录与Java对象之间的投射关系。此时SQL语句出现在Mapper接口的主意的笺注中。优点是不再用编制独立的Mapper配置文件。

 

行使MyBatis 的注解方式开发数据库应用之手续如下所示:

(1)编写POJO类Person。

(2)编写Mapper接口PersonMapper。

(3)编写工作接口PersonService。

(4)编写工作实现类PersonServiceImpl。

(5)编写MyBatis总体安排文件SqlMapConfig.xml。

(6)编写log4j的布文件log4j.properties。

(7)编写单元测试类PersonServiceTest。

 

正文特列出与XML方式开发之步骤及代码有不同之处的步调和代码,未排有之步子同代码请参见XML方式的系介绍。

1.1.2. 编写Mapper接口

同XML方式下编制的代码有所不同:为各级一个方增加了相应的MyBatis注解。这些注解代替了Mapper配置文件中之SQL语句配置的意图。以下代码中采用MyBatis的@Select注解代替了XML方式遭的PersonMapper.xml文件被之select结点。

 

/**   

* @Title: PersonMapper.java

* @Package com.test.mybatis3.mapper

* @Description:

* @author http://www.cnblogs.com/coe2coe/

* @date 2017年4月9日 下午4:00:52

* @version V1.0   

*/

package com.test.mybatis3.mapper;



import java.util.List;



import com.test.mybatis3.pojo.Person;



/**

* @ClassName: PersonMapper Mapper接口

* @Description:

* @author http://www.cnblogs.com/coe2coe/

* @date 2017年4月9日 下午4:00:52

*  

*/

public interface PersonMapper {



/**

 * 查询所有记录。

 * 使用了注解方式,不再需要Mapper配置文件。

     * MyBatis 的Select注解描述了findAllPersons()方法和SQL语句的映射关系。

 * @return

 * @throws Exception

 */

@Select("select * from t_person order by id asc")

List<Person>  findAllPersons() throws Exception;



}

 

 

 

1.1.3. 编纂总体部署文件

一体化部署文件SqlMapConfig.xml和XML方式对比,区别在mappers结点中不再配置PersonMapper.xml文件,而是安排PersonMapper接口的一体化路径,字结点mapper中应用的不再是resource属性,而是class属性。

<?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>



<!-- 配置默认的运行环境 -->

<environments default="development">



<!-- -配置MyBatis运行环境中的各项参数 -->

<environment id="development">



<!-- 配置事务管理器 ,存在JDBC和MANAGED两种类型,目前使用JDBC即可。-->

<transactionManager type="JDBC"/>



<!-- 配置数据源,存在三种类型:UNPOOLED,POOLED,JNDI,目前使用POOLED即可。 -->

<dataSource type="POOLED">



<!-- 配置JDBC数据源的必备参数 -->

<property name="driver" value="com.mysql.jdbc.Driver"/>

<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>

<property name="username" value="test"/>

<property name="password" value="123456"/>

</dataSource>

</environment>

</environments>



<!--  配置基于注解方式的Mapper接口 -->

<mappers>



  <!--  配置基于注解方式的PersonMapper,

       此时不在需要Mapper配置文件:PersonMapper.xml -->

  <mapper class="com.test.mybatis3.mapper.PersonMapper" />

</mappers>



</configuration>

 

 

 

 

1.1.4. 编纂单元测试

此只使用Mapper接口方式来访问数据库,与XML方式的Mapper接口方式的单元测试代码相同。

/**   

* @Title: PersonServiceTest.java

* @Package com.test.mybatis3.test

* @Description:

* @author http://www.cnblogs.com/coe2coe/

* @date 2017年4月9日 下午4:07:06

* @version V1.0   

*/

package com.test.mybatis3.test;



import java.io.InputStream;

import java.util.List;



import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import org.junit.Test;



import com.test.mybatis3.mapper.PersonMapper;

import com.test.mybatis3.pojo.Person;

import com.test.mybatis3.service.PersonService;

import com.test.mybatis3.service.impl.PersonServiceImpl;



/**

* @ClassName: PersonServiceTest

* @Description:

* @author http://www.cnblogs.com/coe2coe/

* @date 2017年4月9日 下午4:07:06

*  

*/

public class PersonServiceTest {



/**

 * 使用基于@Select注解的Mapper接口PersonMapper的方法来查询数据。

 * @throws Exception

 */

@Test

public void testFindAllPersonsByMapper() throws Exception

{

System.out.println("by Mapper");



//使用SqlMapConfig.xml配置文件。

InputStream  is = Resources.getResourceAsStream("SqlMapConfig.xml");



//构造MyBatis的SessionFactory对象.

SqlSessionFactory  sessionBuilder = new SqlSessionFactoryBuilder().build(is);



//将会指向MyBatis的Session对象实例。

SqlSession  session = null;

try{

//打开Session。

session = sessionBuilder.openSession();



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

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



//创建PersonService接口的实现对象。

PersonService  personService = new PersonServiceImpl(personMapper);



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

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

List<Person> persons = personService.findAllPersons();



//输出查询结果。

for(Person person : persons){

System.out.println(person);

}

}

catch(Exception ex){

ex.printStackTrace();

throw ex;

}

finally{

//确保关闭session对象。

if(null != session){

session.close();

session = null;

}

}

} 

}

 

运作结果如下:

by Mapper

0    [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findAllPersons
 – ==>  Preparing: select * from t_person order by id asc

57   [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findAllPersons
 – ==> Parameters:

135  [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地图