mybatis--面向接口编程
如果使用hiberante作为dao层,常用的方式是:定义一个dao层接口包(com.dao.service)然后在定义一个dao层接口实现包(com.dao.service.impl),这样定义结构清晰,方便维护和开发工作。如果使用mybatis作为dao层,就可以省略到dao实现包,直接将sql实现在xml配置文件中编写,这样可以直接通过接口访问映射文件。本文介绍模型层的这两种设计模式。
一、设计模式一:由接口访问映射文件
如采取此种设计模式,需要:
一、在spring-mybatis的配置文件中配置MapperScannerConfiguer:这是将sqlSessionFactory注入到指定包中的java类中。
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.shyy.web.service"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
二、映射文件的命名空间设置为指定接口,如:com.shyy.web.service.TreeMapper是访问该映射文件的接口名称。
<mapper namespace="com.shyy.web.service.TreeMapper" >
三、接口中的方法必须和映射文件一致。如:
映射文件中的某sql:
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
select
<include refid="Base_Column_List" />
from t_tree
where tid = #{tid,jdbcType=VARCHAR}
</select>
接口中对应的方法名:
Student selectByPrimaryKey(Integer sid);
需要访问映射文件的sql,只需在当前类注入相应的接口:

需注意的是,由于该接口没有实现类,所以在如idea上会报这样的提示,说不能注入,因为接口是不能实例化的,在eclipse上不会报,但实际上没有影响。
设计模式2:由接口的实现类访问映射文件
示例接口:
package com.shyy.web.service;
import com.shyy.web.entity.Student;
public interface StudentMapper {
int deleteByPrimaryKey(Integer sid);
int insert(Student record);
int insertSelective(Student record);
Student selectByPrimaryKey(Integer sid);
int updateByPrimaryKeySelective(Student record);
int updateByPrimaryKey(Student record);
}
其实现类:
package com.shyy.web.service.impl; import com.shyy.web.entity.Student;
import com.shyy.web.service.StudentMapper;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository; @Repository("studentMapperImpl")
public class StudentMapperImpl implements StudentMapper {
@Autowired
protected SqlSessionTemplate session; public StudentMapperImpl() {
} //获取接口名
private String clazz = this.getClass().getInterfaces()[0].getName(); public int deleteByPrimaryKey(Integer sid) {
return session.delete(clazz+".deleteByPrimaryKey",sid);
} public int insert(Student record) {
return session.insert(clazz+".insert",record);
} public int insertSelective(Student record) {
return session.insert(clazz+".insertSelective",record);
} public Student selectByPrimaryKey(Integer sid) {
return session.selectOne(clazz+".selectByPrimaryKey",sid);
} public int updateByPrimaryKeySelective(Student record) {
return session.update(clazz+".updateByPrimaryKeySelective",record);
} public int updateByPrimaryKey(Student record) {
return session.update(clazz+".updateByPrimaryKey",record);
}
}
这样的设计模式需要在实现类中注入SqlSessionTemplate ,所以spring-mybatis的配置文件应该加上:
<!-- 获取SqlSessionTemplate -->
<bean class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory"></constructor-arg>
</bean>
需要由此接口的实现类访问映射文件,则在注入时接口的引用名要与@Repository("studentMapperImpl")中的名字一致:
@Autowired
private StudentMapper studentMapperImpl;
这样就相当于实例化了接口StudentMapper 的实现类StudentMapperImpl 。
mybatis--面向接口编程的更多相关文章
- mybatis面向接口的编程
一.实现面向接口编程 具体操作方法如下: 第一:编写一个接口(IUser.java) 接口暂时为空接口,接口文件包路径:com.gusi.demo.idao.IUser 第二:修改映射文件(User. ...
- javascript设计模式学习之十七——程序设计原则与面向接口编程
一.编程设计原则 1)单一职责原则(SRP): 这里的职责是指“引起变化的原因”:单一职责原则体现为:一个对象(方法)只做一件事. 事实上,未必要在任何时候都一成不变地遵守原则,实际开发中,因为种种原 ...
- Java中的面向接口编程
面向接口编程是很多软件架构设计理论都倡导的编程方式,学习Java自然少不了这一部分,下面是我在学习过程中整理出来的关于如何在Java中实现面向接口编程的知识.分享出来,有不对之处还请大家指正. 接口体 ...
- Java面向接口编程,低耦合高内聚的设计哲学
接口体现的是一种规范和实现分离的设计哲学,充分利用接口可以极大的降低程序中各个模块之间的耦合,提高系统的可维护性以及可扩展性. 因此,很多的软件架构设计理念都倡导"面向接口编程"而 ...
- java接口,接口的特性,接口实现多态,面向接口编程
package cn.zy.cellphone; /**接口是一种引用数据类型.使用interface声明接口,形式 * 形式:public interface 接口名称{} * 接口不能拥有构造方法 ...
- java面向接口编程
在oop中有一种设计原则是面向接口编程,面向接口编程有非常多优点,详细百度一大片.我来谈一下详细的使用中的一些不成熟的见解.! 首先面向接口编程能够消除类之间的依赖关系,使得业务仅仅依赖接口. 这样有 ...
- go 学习笔记之万万没想到宠物店竟然催生出面向接口编程?
到底是要猫还是要狗 在上篇文章中,我们编撰了一则简短的小故事用于讲解了什么是面向对象的继承特性以及 Go 语言是如何实现这种继承语义的,这一节我们将继续探讨新的场景,希望能顺便讲解面向对象的接口概念. ...
- Python 中的面向接口编程
前言 "面向接口编程"写 Java 的朋友耳朵已经可以听出干茧了吧,当然这个思想在 Java 中非常重要,甚至几乎所有的编程语言都需要,毕竟程序具有良好的扩展性.维护性谁都不能拒绝 ...
- Mybatis面向接口式编程
Mybatis面向接口编程 1.xml文件书写格式 <?xml version="1.0" encoding="UTF-8" ?> <!DOC ...
- 【GoLang】golang 面向对象编程 & 面向接口编程
005.面向对象&接口编程 1 面向函数编程 1.1 将数据作为参数传递到函数入参 1.2 对象与函数是分离的 2 面向对象编程 2.1 使用者看起来函数作为对象的属性而非参数 2.2 函数属 ...
随机推荐
- 从零单排Linux – 1 – 简单命令
从零单排Linux – 1 – 简单命令 Posted in: Linux 从零单排Linux – 1 一.Linux的简单命令: 1.忘记root密码: 读秒时按任意键进入 – e – ↓选择第二个 ...
- Unite Beijing 2015大型活动
摘要:2015年,我做的最疯狂的事情:网友见面会—去北京参加Unite Beijing 2015大会. 正文:记得,上次在北京参加大型活动还是2008年前–传统电信行业的巅峰时期:那时移动互联网.An ...
- bzoj 3626 LCA
这一道题咋一看只觉得是离线,可以求出所有的f(1,i,z), 答案就等于f(1,r,z)-f(1,l-1,z).但是没有具体的做法,但是求LCA的深度和有一个非常巧妙的做法,每加一个点,就把这个点到根 ...
- 使用JavaScript实现简单的输入校验
HTML页面代码: <!doctype html> <html lang="en"> <head> <meta charset=" ...
- 如何禁止KnockoutJs在VS2012的智能格式化
http://blogs.msdn.com/b/webdev/archive/2013/03/04/disabling-knockout-intellisense.aspx 我升级了一下VS2012, ...
- 利用TCP 客户端---->服务端 传送文件到指定路径,并返回一个友好的回馈
首先盲写的一个传输文件的方法,但测试发现了一个非常不容易发现的问题,这里先说明一下. 错误的代码如下: package com.TCP.java; import java.io.File; impor ...
- CMakeLists实战解读--YouCompleteMe
原文转载自:Ricky.K http://www.cnblogs.com/rickyk/p/3877238.html 个人一直有一个想法,就是想出一系列关于CMakeLists.txt国外经典例子的实 ...
- 锋利的qjuey-ajax
jquery 中的ajax load方法主要获取web服务器上静态数据 1 load方法载入HTML文档 load(url [,data] [,callback]) $(function(){ $ ...
- mysql中使用update select
UPDATE t_user INNER JOIN t_shake ON t_shake.user_id = t_user.user_id SET t_user.shake_total_num = t_ ...
- PhpExcel数组输出到Excel浏览器下载
经常是mysql查出二维数组,并且数组的带key也是有意义的,考虑到经常用,就打算弄个函数出来,方便以后用! 相对是规范的数组哈,具体可看下$data数组: 生成的excel第一行是对应的key: 直 ...