在以前做项目的时候,见许多人喜欢使用下面的这种调用sql调用方式:
SqlSession sqlSession = getSqlSession();
List<User> userList = sqlSession.selectList("com.dao.UserDao.getAllUser");
通过namespace+sql的Id来定位一个sql,这种方式其实有许多弊端:
1.如果不看sql文件你很难确定返回的类型是什么,需要的参数是什么,就不得不自己去翻mapper文件。然而,大多数情况下,xml里的sql可读性差的令人发抖,再加上xml里并不适合写注释,可读性再一步下降,调用别人的代码时不由得抱怨一句(The code is shit);许多人为了避免看代码,干脆自己从新写一个,这样一来代码复用性就下降。
2.代码与xml紧耦合,万一以后要拆分或者合并mapper文件,还要去代码里一个一个改字符串,万一漏掉一个,很难发现,而且编写的时候错误率也会大大增加;
现在Mybatis官方提倡使用一种新的Mapper接口的形式来操作数据库,像这样:
SqlSession sqlSession = getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
List<User> userList = userDao.getAllUser();
通过接口与xml文件中的sql-id保持一致,利用动态代理生成代理类(动态代理加java文章),调用相应的方法;
以接口的形式,有哪些方法,方法的信息一目了然,还能避免各种拼写错误;
网友评论