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

1.1. API方式

 

1.1.1. 出步骤

靶:使用MyBatis从数据库中查询t_person表的通记录。

 

MyBatis还可以使直接使用API来配置数据库被的记录及Java对象之间的投关系以及另外各种必要的部署。此时不再要利用任何XML配置文件。由于采用了API建立映射关系,Mapper接口也未待加任何的注释。

 

运用MyBatis 的API方式开数据库应用之步子如下所示:

(1)编写POJO类Person。

(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.xml和PersonMapper.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]

 

网站地图xml地图