使用MyBatis框架进行持久层的开发,以一个UserDao为例。
- 原先的开发方式:
创建一个UserDao接口,这个接口中给出了各种方法,规定了方法的功能。然后再创建一个UserDaoImpl类,实现UserDao接口,实现里边的方法从而实现对数据库的增删改查。
- 使用mapper代理对象的方式:
还是要创建UserDao接口,但不需要再创建UserDaoImpl类实现这个接口,通过mapper代理,直接通过UserDao接口中的抽象方法调用map映射文件中的SQL语句,实现对数据库的增删改查。
具体操作
- 在map映射文件中将命名空间设置为要代理的抽象类的全名,以UerDao为例。
- 将UserDao接口中的抽象方法与map映射文件中的<select></select>等标签进行一一对应,有以下几点要求。
-
※ 接口中方法的方法名必须和要对应标签的id属性的属性值相同。 ※ 接口中方法的参数类型必须和要对应标签的parameterType属性的属性值相同,如果方法相传递两个参数,那 么要封装到对象中,只传对象参数。 ※ 接口中方法的返回值类型必须和要对应标签的resutType属性的属性值相同,如果接口中的方法返回的是一个 集合,那么对应标签中的resutType属性的属性值,只要和集合中的泛型相同即可。 ※ 如果映射文件和接口放在同一个包下,映射文件的文件名和接口的名字要一样。
- 将接口的对象代理到map映射文件
利用SqlSession对象调用getMapper()方法,方法的参数是一个Class对象,要传入接口中的对象class。
用一个接口对象来接收它的返回值,如:UserDao userDao = sqlSession.getMapper(UserDao.class);
- 执行完getMapper()方法之后就可以通过接口的对象调用它里边的抽象方法,每一个抽象方法都对应一个SQL语句,实际上调用的是对应的SQL语句。