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


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

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

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

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

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

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

    1. Mapper.xml文件中的namespace与mapper接口的类路径相同。
    2. Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
    3. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
    4. 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>
  • 相关阅读:
    没有技术驱动型公司 | 每个人都得加班 | 关注软技能
    各种15min(启动、横盘、破位)样例
    最新win10教育版激活密匙 win10各版本永久激活序列号
    大数定律具体是个什么概念?
    统计与概率——马同学高等数学
    三星MagicInfo Express软件制作介绍
    !!网上找的【英语单词词根记忆顺口溜】
    一个故事轻松记忆常见252个英语字根
    分享一个开源的音频分析软件
    C#连接XAMPP中的mysql 数据库(windows)
  • 原文地址:https://www.cnblogs.com/Aaron-007/p/12814607.html
Copyright © 2020-2023  润新知