Mybatis框架基础入门(三)--Mapper动态代理方式开发

mac2022-07-05  8

使用MyBatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper动态代理开发方法。

原始Dao开发方法需要程序员编写Dao接口和Dao实现类,此方式开发Dao,存在以下问题:

Dao方法体存在重复代码:通过SqlSessionFactory创建SqlSession,调用SqlSession的数据库操作方法调用sqlSession的数据库操作方法需要指定statementid,这里存在硬编码,不便于开发维护。

所以建议使用mapper动态代理方式来开发dao。

 

Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象。

 

Mapper接口开发需要遵循以下规范:

Mapper.xml文件中的namespace与mapper接口的类路径相同。Mapper接口方法名和Mapper.xml中定义的每个statement的id相同Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

具体demo请查看如下:

 

 

就根据 caseCountByQueryCaseVo这个接口来看,然后一一对照上面的四个规则要求,就会发现能够一一对上,假如你发现对不上,那你就牛鼻了,记得找我,让我也牛鼻一下,哈哈。

 

上面写完后,接下来就写一个测试方法去测试看看能不能成功运行啦。(至于pojo对象我这里就不写了,你自己根据上面规则写就好了)

public class TestMybatis { private SqlSessionFactory sqlSessionFactory; @Before public void init() throws Exception { // 创建SqlSessionFactoryBuilder SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); // 加载SqlMapConfig.xml配置文件 InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml"); // 创建SqlsessionFactory this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream); } @Test public void testMybatisMapper() { // 获取sqlSession SqlSession sqlSession = this.sqlSessionFactory.openSession(); // 从sqlSession中获取Mapper接口的代理对象 TestCase testCase = sqlSession.getMapper(TestCase.class); // 执行查询方法 int count = testCase.caseCountByQueryCaseVo(queryCaseVo);//queryCaseVo为入参查询条件 System.out.println(count); sqlSession.close(); }

 

 

特别注意:

1.记得sql的函数(比如此处的count(1))不能作为查询结果返回,必须要加个别名存储结果,否则执行会报错的。

2.测试前记得配置好相关配置文件哦,如下,记得把TestCase.java和TestCasexml文件放在一个目录下,如上图所示

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 设置别名 --> <typeAliases> <!-- 2. 指定扫描包,会把包内所有的类都设置别名,别名的名称就是类名,大小写不敏感 --> <package name="com.pojo" /> </typeAliases> </configuration>

 

 

 

最新回复(0)