MyBatis应用开发应用之开发方式注解方式篇

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis应用开发应用之开发方式注解方式篇相关的知识,希望对你有一定的参考价值。

1.1. 注解方式

1.1.1. 开发步骤

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

 

MyBatis还可以使用注解来配置数据库中的记录与Java对象之间的映射关系。此时SQL语句出现在Mapper接口的方法的注解中。优点是不再需要编写独立的Mapper配置文件。

 

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

(1)编写POJOPerson

(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.xmlXML方式相比,区别在于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]

 

以上是关于MyBatis应用开发应用之开发方式注解方式篇的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis应用开发应用之开发方式XML文件篇

MyBatis基础篇 - Mapper代理开发方式(注解方式)

Mybatis 教程之Mybatis注解开发

mybatis之注解式开发

mybatis的注解开发之三种动态sql

mybatis之注解方式实现