一、面向接口编程
面向接口编程思想认为最为理想的系统设计规范应是所有的定义与实现分离。
在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。
二、使用注解开发
2.1 在mybatis核心配置文件中配置接口
与之前的xml配置一样,都需要在mybatis核心配置文件中配置,不过配置的方式有所不同,xml配置如下:
<mappers>
<mapper resource="mybatis05/mapper/UserMapper.xml"/>
</mappers>
使用注解的时候, 配置如下,即配置了mapper的Java接口所在的位置,而不再是xml的位置。
<mappers>
<mapper class="mybatis05.mapper.UserMapper" />
</mappers>
2.2 接口使用注解
@Select("select * from public.user")
List<User> selectAll();
2.3 测试
@Test
public void selectUserList() {
SqlSession sqlSession = MybatisUtils.getSqlSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.selectAll();
for (User user : userList) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭sqlSession
sqlSession.close();
}
}
但是查出来的语句,比如数据库字段和Java实体类属性不对应,就会产生导致查出来的属性为空:
这时候要使用别名解决。官网原话:使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。
三、debug调试
sqlSession读取xml配置文件:
其中sqlSession
是加载mybatis
核心配置文件生成的,比如环境变量,日志实现那些配置都被加载到。
调试里面的内容,通过反射加载,有接口的方法,返回值等等: