首页 > 代码库 > MyBatis应用开发(4)应用之开发方式API方式篇

MyBatis应用开发(4)应用之开发方式API方式篇

1.1. API方式

 

1.1.1. 开发步骤

目标:使用MyBatis从数据库中查询t_person表的全部记录。

 

MyBatis还可以使用直接使用API来配置数据库中的记录与Java对象之间的映射关系以及其它各种必需的配置。此时不再需要使用任何XML配置文件。由于使用了API建立映射关系,Mapper接口也不需要加任何的注解。

 

使用MyBatis API方式开发数据库应用的步骤如下所示:

(1)编写POJOPerson

(2)编写Mapper接口PersonMapper

(3)编写业务接口PersonService

(4)编写业务实现类PersonServiceImpl

(5)编写MyBatis总体配置代码。

(6)编写log4j的配置文件log4j.properties

(7)编写单元测试类PersonServiceTest

 

为了节省篇幅,本文仅仅列出了与XML方式和注解方式不同的地方的代码和步骤,未列出的代码和步骤请参考XML方式和注解方式的介绍。

 

1.1.2. 编写Mapper接口

/**   

* @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 {

 

/**

 * 查询所有记录。

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

 *  在单元测试代码中使用MyBatis API建立了findAllPersons()方法和SQL语句的映射关系。

 * @return

 * @throws Exception

 */

List<Person>  findAllPersons() throws Exception;

 

}

 

 

 

 

1.1.3. 编写单元测试

由于不再使用SqlMapConfig.xmlPersonMapper.xml这些配置文件,需要编写代码建立包含MyBatis所需要的配置的运行环境,还需要编写代码建立Mapper接口和SQL语句之间的映射关系。

/**   

* @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.util.ArrayList;

import java.util.List;

 

import javax.sql.DataSource;

 

import org.apache.ibatis.builder.StaticSqlSource;

import org.apache.ibatis.datasource.pooled.PooledDataSource;

import org.apache.ibatis.mapping.Environment;

import org.apache.ibatis.mapping.MappedStatement;

import org.apache.ibatis.mapping.ResultMap;

import org.apache.ibatis.mapping.ResultMapping;

import org.apache.ibatis.mapping.SqlCommandType;

import org.apache.ibatis.mapping.SqlSource;

import org.apache.ibatis.session.Configuration;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import org.apache.ibatis.transaction.TransactionFactory;

import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;

import org.junit.Test;

 

import com.test.mybatis3.pojo.Person;

 

/**

* @ClassName: PersonServiceTest

* @Description:

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

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

*  

*/

public class PersonServiceTest {

 

/**

 * 完全使用MyBatis的API函数的方法来查询数据。

 * @throws Exception

 */

@Test

public void testFindAllPersonsByAPI() throws Exception

{

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

 

//JDBC 数据源的参数

String driver = "com.mysql.jdbc.Driver";

String url = "jdbc:mysql://localhost:3306/mybatis";

String username = "test";

String password = "123456";

 

//创建POOLED类型的数据源。

DataSource  dataSource = new PooledDataSource(driver,url,username,password);

 

//创建JDBC事务管理器

TransactionFactory transactionFactory = new JdbcTransactionFactory();

 

//创建MyBatis的Environment环境对象。

Environment environment = new Environment("development",transactionFactory, dataSource);

 

//创建MyBatis的总体配置对象。

Configuration  configuration = new Configuration(environment);

 

//创建查询语句的创建者对象。

String statementId = "com.test.mybatis3.mapper.PersonMapper.findAllPersons";

String sql = "select * from t_person order by id asc";

SqlSource  sqlSource = new StaticSqlSource(configuration ,sql );

MappedStatement.Builder builder = new MappedStatement.Builder(

configuration,

statementId,

sqlSource,

SqlCommandType.SELECT);

 

//创建结果集的映射对象。

String mapperId = "";

List<ResultMap>  resultMaps = new ArrayList<ResultMap>();

List<ResultMapping> resultMappings = new ArrayList<ResultMapping>();

ResultMap resultMap = new ResultMap.Builder(configuration,

mapperId,  //任意字符串均可以。

Person.class, //resultType:结果集中的元素的Java类型。

resultMappings  //resultMap:为空。

).build();

resultMaps.add(resultMap);  

builder.resultMaps(resultMaps);

 

//创建Select语句对象。

MappedStatement  ms = builder.build();

 

//将一个语句映射加入到MyBatis配置中 。

configuration.addMappedStatement(ms);

 

 

//构造MyBatis的SessionFactory对象.

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

 

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

SqlSession  session = null;

try{

//打开Session。

session = sessionBuilder.openSession();

 

//直接调用SqlSession的selectList()方法查询结果集。

//selectList()方法的参数是一个语句的标识符。

List<Person> persons = session.selectList(statementId);

 

//输出查询结果。

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 API

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

41   [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findAllPersons  - ==> Parameters:

56   [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应用开发(4)应用之开发方式API方式篇