一、理解接口
1.1 关于接口
-
从字面上理解,接口应是定义(规范,约束)与实现的分离。、
-
接口反映了系统设计人员对系统的抽象理解。
-
接口分为两类:一类是对个体的抽象,它可对应为一个抽象体(abstract class);另一类是对个体某一方面的抽象,即形成一个抽象面(interface)。
-
抽象体与抽象面是有区别的,一个个体有可能有多个抽象面。
1.2 面向接口编程
在真正的开发中,一般我们会选择面向接口编程,而非面向对象编程,原因如下:
-
面向接口编程能解耦程序 ,提高复用性, 可拓展性强,在分层开发中 ,大家都遵守共同的标准,上层不用管具体的实现。
-
在面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,系统设计人员不关心各个对象内部是如何实现的。
-
系统设计的关键是各个对象之间的协作关系。面向接口编程就是指按照这种思想来注重各模块之间的交互关系。
1.3 面向对象与过程
-
面向对象是指以对象为单位,考虑它的属性及方法 。
-
面向过程是指以一个具体的事务过程为单位,考虑它的实现 。
-
面向接口编程是针对复用技术而言的,更多体现的是对系统整体架构的考虑。
二、利用注解开发
MyBatis最初配置信息是基于 XML文件 ,映射语句(SQL)也是定义在 XML 中的,MyBatis 3提供了新的基于注解的配置。但Java 注解的表达力和灵活性有限,并不能用注解来完全构建强大的 MyBatis 映射。
2.1 注解开发流程:
SQL类型注解分类:
-
@select()
-
@update()
-
@Insert()
-
@delete()
在Mapper接口文件中添加注解:
//查询全部用户
在MyBatis的核心配置文件中注入:
<!--使用class绑定接口-->
<mappers>
<mapper class="com.MyBatis.mapper.Mapper"/>
</mappers>
在类中进行测试:
本质是利用了JVM的动态代理机制:
MyBatis执行流程:
2.2 注解增删改查
-
改造MyBatisUtils工具类的getSession( ) 方法,重载实现:
//获取Sql Session连接
public static SqlSession getSession(){
return getSession(true); //事务自动提交
}
public static SqlSession getSession(boolean flag){
return sqlSessionFactory.openSession(flag);
}
-
查询接口方法注解:
//根据id查询用户
-
新增接口方法注解:
//添加一个用户
-
修改接口方法注解:
//修改一个用户
-
删除接口方法注解:
//根据id删除用
增删改一定记得对事务的处理
2.3 关于@Param
@Param注解用于给方法参数起一个名字。以下是总结的使用原则:
-
在方法只接受一个参数的情况下,可以不使用@Param。
-
在方法接受多个参数的情况下,一定要使用@Param注解给参数命名。
-
如果参数是 JavaBean , 则不能使用@Param。
-
不使用@Param注解时,参数只能有一个,并且是JavaBean 。
JavaBean:一个遵循特定写法的Java类,它通常具有如下特点:
-
这个Java类必须具有一个无参的构造函数
-
属性必须私有化。
-
私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。
-
JavaBean在J2EE开发中,通常用于封装数据,对于遵循写法的JavaBean组件,其它程序可以通过反射技术实例化JavaBean对象,并且通过反射那些遵守命名规范的方法,从而获知JavaBean的属性,进而调用其属性保存数据。
2.4 #与$的区别
-
#{} 的作用主要是替换预编译语句中的占位符“?”
INSERT INTO user (name) VALUES (#{name});
INSERT INTO user (name) VALUES (?);
-
${} 的作用是直接进行字符串替换
INSERT INTO user (name) VALUES ('${name}');
INSERT INTO user (name) VALUES ('kuangshen');
三、参考资料: