信创国产化替换如何推动企业自主创新与市场竞争力提升
574
2022-10-06
MyBatis代理模式开发
前面已经使用MyBatis完成了对Emp表的CRUD操作,都是由SqlSession调用自身方法发送SQL命令并得到结果的,实现了MyBatis的入门。
但是却存在如下缺点:
不管是selectList()、selectOne()、selectMap(),都是通过SQLSession对象的API完成增删改查,都只能提供一个查询参数。如果要多个参数,需要封装到JavaBean或者Map中,比较麻烦。返回值类型较固定。只提供了映射文件,没有提供数据库操作的接口,不利于后期的维护扩展。
在MyBatis中提供了另外一种成为Mapper代理(或称为接口绑定)的操作方式。在实际开发中也使用该方式。下面我们就是要Mapper代理的方式来实现对Emp表的CRUD操作吧,还有完成多个参数传递、模糊查询、自增主键回填等更多的技能实现。搭建好的项目框架如图所示,相比而言,增加了接口EmployeeMapper。但是却会引起映射文件和测试类的变化。
优点:
有接口 模块之间有规范了参数的处理多样了,接口中的方法参数列表由我们自己决定通过代理模式由mybatis提供接口的实现类对象 我们不用写实现类了
一、使用Mapper代理方式实现查询
1.准备接口文件
代码如下:
package com.augus01.mapper;import com.augus01.pojo.Emp;import java.util.List;public interface EmpMapper { /*查询所有员工接口 * 返回所有员工封装在一起的Emp List集合*/ List
2.准备映射文件
内容如下:
3.在sqlMapConfig.xml核心配置文件中使用包扫描形式加载所有的映射文件
4.测试文件
import com.augus01.mapper.EmpMapper;import com.augus01.pojo.Dept;import com.augus01.pojo.Emp;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Before;import org.junit.Test;import java.io.IOException;import java.io.InputStream;import java.util.List;public class Test1 { private SqlSession sqlSession; @Before public void init(){ SqlSessionFactoryBuilder ssfb =new SqlSessionFactoryBuilder(); InputStream resourceAsStream = null; try { resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); } catch (IOException e) { e.printStackTrace(); } SqlSessionFactory factory=ssfb.build(resourceAsStream) ; sqlSession=factory.openSession(); } //查询所有员工 @Test public void testFindAllDept(){ /*获取字节码文件*/ EmpMapper mapper = sqlSession.getMapper(EmpMapper.class); //执行SQL List
二、代理模式浅析
mybatis是如何通过代理模式实现查询的
这条语句的底层使用了动态代理模式,动态创建一个EmployeeMapper的一个代理对象并赋给接口引用。所以在MyBatis中不需要显式提供Mapper接口的实现类,这也是简单的地方。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~