MyBatis应用开发应用之开发方式注解方式篇
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis应用开发应用之开发方式注解方式篇相关的知识,希望对你有一定的参考价值。
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]
以上是关于MyBatis应用开发应用之开发方式注解方式篇的主要内容,如果未能解决你的问题,请参考以下文章