首页 > 代码库 > MyBatis应用开发(4)应用之开发方式API方式篇
MyBatis应用开发(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]
MyBatis应用开发(4)应用之开发方式API方式篇