zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    RUNOOB.COM-python网络编程-(python3.5.0)
    windows查看服务
    计算机网络里的一些理解
    如果面试有傻逼问道oracle怎么启动的
    推荐一个学习数据库的地方
    电脑中的驱动程序是什么,是干什么的
    Raspberry Pi 4B 之 Python开发
    Ubuntu20.04+EdgexFoundry边缘计算微服务搭建-----遇到的问题-----make build 被墙问题
    Raspberry Pi 4B + Ubuntu 20.04 server for arm64 的wifi配置
    关于PicoNeo开发环境的Unity3D+AndroidSDK配置
  • 原文地址:https://www.cnblogs.com/Aaron-007/p/12814607.html
Copyright © 2011-2022 走看看