mybatis、
1、什么叫面向接口编程
什么原因 解耦 !
在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。
1.1关于接口的理解。
接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。
接口的本身反映了系统设计人员对系统的抽象理解。
接口应有两类:第一类是对一个个体的抽象,它可对应为一个抽象体(abstract class);
第二类是对一个个体某一方面的抽象,即形成一个抽象面(interface);
一个体有可能有多个抽象面。
抽象体与抽象面是有区别的。
2.2三个面向的区别
面向对象是指,我们考虑问题时,以对象为单位,考虑它的属性及方法
面向过程是指,我们考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现
接口设计与非接口设计是针对复用技术而言的,与面向对象(过程)不是一个问题
2、使用注解开发
注解可以直接在接口上实现
@Select("select * from user") List<user> getUserList();
需要在核心配置文件绑定接口
<mappers> <mapper class="com.hyc.dao.UserMapper"/> </mappers>
测试使用
本质:反射机制实现
底层:动态代理
MyBatis详细的执行流程
方法存在多个参数,所有参数必须放在参数注解里
3、CRUD
自动提交
public static SqlSession getsqlsession(){ return sqlSessionFactory.openSession(true); }
编写接口,增加注解
package com.hyc.dao; import com.hyc.pojo.user; import org.apache.ibatis.annotations.*; import java.util.List; import java.util.Map; public interface UserMapper { @Select("select * from user") List<user> getUserList(); @Select("select * from user where #{id} = id") user getUserById(@Param("id") int id); @Insert("insert into user(id,name,pwd) values(#{id},#{name},#{password})") int addUser(user user); @Update("update user set name = #{name} where #{id} = id") int updateUser(user user); @Delete("delete from user where #{uid} = id") int deleteUser(@Param("uid") int id); }
测试类
【注意:我们必须要把接口注册绑定到核心配置文件】
关于@param()注解
基本类型的参数或者String类型需要加上
引用类型不需要加
如果只有一个基本类型,可以忽略,建议都加上
我们在sql中引用的就是@param()设定的属性
#{} ${}区别
‘#{}’:安全的类似ptst
${}: 不安全的,类似st