mybatis详解-(5)面向接口
来源:互联网 发布:linux 安装ftp 编辑:程序博客网 时间:2024/05/16 13:54
前面helloworld中通过selectOne完成了一次查询,但是那种方法需要将所有的参数都写在代码中,包括配置文件的命名空间。这里提供一种通过接口式编程,将所有的方法都定义为接口。在代码中调用接口,实际传递的参数都放置在配置文件中。
1.创建实例对象
Employee
package org.mybatis.settings;public class Employee { private Integer id; private String lastName; private String email; private String gender; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + "]"; }}
2.创建该业务的方法接口
EmployeeMapper
package org.mybatis.settings;import org.mybatis.settings.Employee;public interface EmployeeMapper { public Employee getEmpById(Integer id);}
3.创建mybatis全局配置文件
mybatis-config.xml
<?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> <!-- 引入外部资源文件 resource:引入类路径下的资源文件 url:引入磁盘或者网络路径下的资源文件 --> <properties resource="db.properties"></properties> <!-- 配置驼峰命名规则 --> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${mysql.driver}" /> <property name="url" value="${mysql.url}" /> <property name="username" value="${mysql.username}" /> <property name="password" value="${mysql.password}" /> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/settingsmapper.xml"/> </mappers></configuration>
4.创建映射配置文件
settingsmapper.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace:名称空间,使用接口后,该项的值为接口的全类名 id:标记的唯一标识,使用接口后,跟接口中的方法名進行绑定 resultType:返回值类型,想要封装成什么对象 #{id}:从传递的参数取得的值 public Employee getEmpById(Integer id); --><mapper namespace="org.mybatis.settings.EmployeeMapper"> <!-- 这里并没有给last_name起别名lastName,这里是通过配置文件中驼峰命名规则进行注入 --> <select id="getEmpById" resultType="org.mybatis.settings.Employee"> select id,last_name,email,gender from mybatis_employee where id = #{id} </select></mapper>
5.创建测试类
package org.mybatis.settings;import java.io.IOException;import java.io.InputStream;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 org.mybatis.settings.Employee;/** * 使用接口式編程 */public class MybatisTest { public SqlSessionFactory getSqlSessionFactory() throws IOException{ //全局配置文件 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); //获取SqlSessionFactory对象,读取配置文件 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); return sqlSessionFactory; } @Test public void testMybatis() { try { //1获取sqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //2获取SqlSession对象,由于SqlSession是非线程安全的,所以不能写成成员变量, //如果写成成员,有可能会出現资源竞争 //所以每次使用都应该获取新的对象 SqlSession openSession = sqlSessionFactory.openSession(); //3获取接口实现类的对象 //实际上创建的是一個代理对象,然後由代理对象完成增刪改查 EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class); System.out.println(mapper.getClass()); //4调用接口方法 Employee emp = mapper.getEmpById(2); System.out.println(emp); openSession.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { } }}
6.执行结果
DEBUG - Logging initialized using ‘class org.apache.ibatis.logging.slf4j.Slf4jImpl’ adapter.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
class com.sun.proxy.$Proxy2
DEBUG - Openning JDBC Connection
DEBUG - Created connection 665188480.
DEBUG - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@27a5f880]
DEBUG - ==> Preparing: select id,last_name,email,gender from mybatis_employee where id = ?
DEBUG - ==> Parameters: 2(Integer)
Employee [id=2, lastName=lisi, email=tang_greatman@qq.com, gender=2]
DEBUG - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@27a5f880]
DEBUG - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@27a5f880]
DEBUG - Returned connection 665188480 to pool.
- mybatis详解-(5)面向接口
- mybatis--面向接口编程
- Mybatis面向接口编程
- Mybatis 面向接口编程
- Mybatis面向接口编程
- 面向接口编程详解
- 面向接口编程详解
- 面向接口编程详解
- 面向接口编程详解
- 面向接口编程详解
- 面向接口编程详解
- 面向接口编程详解
- 面向接口编程详解
- 面向接口编程详解
- 面向接口编程详解
- 面向接口编程详解
- 面向接口编程详解
- 面向接口编程详解
- 关于Android 版本更新
- 读写锁SRWLock
- 朋友圈
- Java中关键字static的作用
- 《数字技术》连载6: 第2章 数字器件 第1节 基本门电路
- mybatis详解-(5)面向接口
- 《OurwayBI基础入门系列--学会数据快速可视化》开课啦 !
- Mysql分库分表方案
- oracle--14.pl,sql语言
- AngularJs路由单向传值
- 【R语言 数据处理和可视化】一个手游公司销售额数据分析
- 排序五 归并排序
- HTML的 table 设计
- HTTPS的安全保护