《SSM笔记——Mybatis》8、使用注解开发
8、使用注解开发
8.1、面向接口编程
虽然都学过面向对象编程,也学习过接口,但是在真正的开发中,很多时候我们会选择面向接口编程。
根本原因:解耦!还有可拓展,可复用,在分层开发中,上层不用管具体的实现,大家都遵守共同的标准,使得开发变得容易,规范性更好。
关于接口的理解:
-
接口从更深层次的理解,应该是定义(规范,约束)与实现的分离。(由系统设计人员,即架构师定义接口,然后由开发人员实现接口,接口的实现类再去调用下一层的接口的方法) 接口的本身反映了架构师对系统的抽象理解 接口应该有两类: 第一类是对一个个体的抽象,它可对应为一个抽象类 第二类是对一个个体某一方面的抽象,即形成一个抽象面(interface)
接口设计与非接口设计是针对复用技术而言的。
8.2、使用注解开发(不需要mapper.xml)
- 接口
@Select("select * from user")
public List<User> getUserList();
- mybatis-config.xml
<mappers>
<mapper class="com.Excelman.dao.UserMapper" />
</mappers>
- 测试
注意:在核心配置文件,一定要记得配置mapper!
本质:反射机制实现;
底层:动态代理;
使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句(比如需要使用resultMap),Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。
永远不要拘泥于一种方式,你可以很轻松的在基于注解和 XML 的语句映射方式间自由移植和切换。(两者可以共存)
不过其实在SSM框架中,一般就是由mapper对应的xml文件来编写sql的,有利用统一管理。
8.3、采用注解实现CRUD
public interface UserMapper {
@Select("select * from user")
public List<User> getUserList();
// 方法存在多个基本类型的参数或者String时,一定要加上@Param注解。如果是引用类型,则不用加
@Select("select * from user where id = #{id}")
User getUserById(@Param("id") int id);
@Insert("insert into user(id,name,pwd) values(#{id},#{name},#{pwd})")
int addUser(User user);
@Update("update user set name=#{name} where id=#{id}")
int update(User user);
@Delete("delete from user where id = #{uid}")
int delete(@Param("uid") int uid);
}
#{} ${}的区别:
就是Statement和preStatement的区别。
前者可以防止sql注入,后者不可以,所以后者基本不用了。
8.4、注解的小结
- @Select
- @Insert
- @Update
- @Delete
- @Param:当接口方法存在多个参数需要传递到sql时,一般加上这个注解(不过引用类型不需要加);
