Mybatis全解-04

使用注解开发

 

先学习思想

面向接口编程

为什么要面向接口编程?根本原因:解耦,可拓展,提高复用,分层开发中,上层不用管具体的实现,大家遵守共同的标准,使得开发变得容易,规范性更好。

 

关于接口的理解

定义(规范、约束)与实现(名实分离原则)的分离。

接口的本身反映了系统设计人员对系统的抽象理解。

接口分为两类:

1.一个个体的抽象,它可对应为一个抽象体。

2.一个个体某一方面的抽象,形成一个抽象面。

一个个体可能有多个抽象面,抽象体与抽象面是有区别的。

 

三个面向的区别

面向对象:考虑问题时,以对象为单位,考虑它的属性及方法。

面向过程:考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现。

面向接口:针对复用技术而言,更多的体现就是对系统整体的架构。

 

利用注解开发

之前我们的映射语句sql是写在对应的Mapper.xml文件中的。使用注解开发就不需要xml文件了,只需要把对应的sql写在其接口上就可以。

查询@Select

//查询全部用户
@Select("select id,name,pwd password from user")
public List<User> getAllUser();

这里需要注意,因为没有了xml文件,所以绑定改为绑定接口

<!--使用class绑定接口-->
<mappers>
   <mapper class="com.li.mapper.UserMapper"/>
</mappers>
@Test
public void testGetAllUser() {
   SqlSession session = MybatisUtils.getSession();
   //本质上利用了jvm的动态代理机制
   UserMapper mapper = session.getMapper(UserMapper.class);

   List<User> users = mapper.getAllUser();
   for (User user : users){
       System.out.println(user);
  }

   session.close();
}

修改@Update

//修改一个用户
@Update("update user set name=#{name},pwd=#{pwd} where id = #{id}")
int updateUser(User user);
@Test
public void testUpdateUser() {
   SqlSession session = MybatisUtils.getSession();
   UserMapper mapper = session.getMapper(UserMapper.class);

   User user = new User(1, "李慧", "1234556");
   mapper.updateUser(user);
  session.commit();
   session.close();
}

删除@Delete

//根据id删除用
@Delete("delete from user where id = #{id}")
int deleteUser(@Param("id")int id);
@Test
public void testDeleteUser() {
   SqlSession session = MybatisUtils.getSession();
   UserMapper mapper = session.getMapper(UserMapper.class);

   mapper.deleteUser(6);
   session.commit();
   session.close();
}

新增@Insert

//添加一个用户
@Insert("insert into user (id,name,pwd) values (#{id},#{name},#{pwd})")
int addUser(User user);
@Test
public void testAddUser() {
   SqlSession session = MybatisUtils.getSession();
   UserMapper mapper = session.getMapper(UserMapper.class);

   User user = new User(6, "李慧", "654321");
   mapper.addUser(user);

   session.close();
}

再次注意:增删改需要手动提交事务。

 

写在最后:

关于@Param

@Param注解用于给方法的参数取名字。

在方法只有一个参数的情况下,可以不使用。

在有多个参数的情况下,建议最好带上。

如果参数是Javabean,不能使用@Param。

 

#与$的区别

#{}的作用主要是替换预编译语句中的占位符,一般使用。

 

INSERT INTO user (name) VALUES (#{name});
INSERT INTO user (name) VALUES (?);

 

${} 的作用是直接进行字符串替换

INSERT INTO user (name) VALUES ('${name}');
INSERT INTO user (name) VALUES ('kuangshen');

 

关于使用xml文件和注解的选择

在少量参数,且关系不复杂时可以选择使用注解。

在参数多,并且之间关系复杂,涉及到结果集映射,一对多、多对一的情况下,选择使用xml更好。

使用xml和注解协同开发,才是最佳实践。

 

上一篇:MyBatis-2


下一篇:《Mybatis框架》第2章 Mapper映射文件