mybatis学习 九 代理开发

1.作用:

  实现创建一个接口后把mapper.xml由mybatis生成接口的实现类,通过调用接口对象就可以获取 mapper.xml 中编写的 sql.

2.实现步骤:
  2.1 创建一个接口
    (1) 为了xxxMapper.xml文件与xxxMapper.java文件进行绑定,接口包名和接口名必须        xxxMapper.xml  中<mapper>标签namespace属性值相同,还要求xxxMapper.xml 与xxxMapper.java文件要在同一个包下    

    (2)接口中方法名和 xxxMapper.xml中select,insert,update 标签的 id 属性值相同

    (3)接口中的方法的参数与 xxxMapper.xml中select,insert,update标签的resultType属性值一致

    (4)接口中函数的返回值与 xxxMapper.xml中select,insert,update标签的parameterType属性值一致

  2.2 在 mybatis的全局配置文件中,在<mappers>标签中,不在使用<mapper>标签,使用<package>进      行扫描接口和 mapper.xml

代码

全局配置文件中配置<mappers>

<?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>
    <!--
        配置log4j
     -->
     <settings>
         <setting name="logImpl" value="LOG4J"/>
     </settings>
     <typeAliases>
        <package name="com.xxx.pojo"/>
    </typeAliases>

    <!-- default的值是<environment>的id,代表当前要连接的数据库环境
        【注】default的值一定要是一个<environment>,否则在获取SqlSession实例时会报空指针错误
     -->
    <environments default="mySqlJdbc">
        <environment id="mySqlJdbc">
            <!-- 事物标签,使用原生jdbc的事物 ,如果是MANAGERD表示交给其他容器管理-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 数据库连接池技术 -->
            <dataSource type="POOLED">
                <!-- property中的name的值,不能随便写,有规定的 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://192.168.153.128:3306/mybaties?characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
        <environment id="oracleJdbc">
            <transactionManager type=""></transactionManager>
            <dataSource type=""></dataSource>
        </environment>
    </environments>

    <!-- 加载XXXMapper.xml
        如果采用代理开发,package批量指定xxxMapper.xml文件已经xxxMapper.java文件
     -->
    <mappers>
        <!-- <mapper resource="com/xxx/mapper/AccountMapper.xml"/>
        <mapper resource="com/xxx/mapper/LogMapper.xml"/> -->
        <package name="com.xxx.mapper"/>
    </mappers>
</configuration>

xxxMapper.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

  <mapper namespace="com.xxx.mapper.AccountMapper">
      <select id="selByAccnoPwd" resultType="account" parameterType="account">
          select * from account where accno=#{accNo} and  password=#{password}
      </select>

      <select id="selByAccnoName" resultType="account" parameterType="account">
          select * from account where accno=#{accNo} and name=#{name}
      </select>

      <update id="updateBalanceByAccno" parameterType="account">
          update account set balance=balance+#{balance} where accno=#{accNo}
      </update>

  </mapper>

测试代码

public static void main(String[] args) throws IOException {
        InputStream in = Resources.getResourceAsStream("mybatis.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        SqlSession session = sqlSessionFactory.openSession();
        //通过代理获取实现xxxMapper.java接口的实现类
        AccountMapper mapper=session.getMapper(AccountMapper.class);
        Account account=new Account();
        account.setAccNo("01");
        account.setPassword(1234);
        Account account2 = mapper.selByAccnoPwd(account);
        System.out.println(account2);
    }

多参数

<!-- 当有多个参数时,不要写parameterType
          如果接口中方法的参数是基本数据类型或者String类型,
          第一个参数在占位符中用0或者param1,
          第二个参数在占位符中用1或者param2

          如果非要使用接口中参数的名称,可以在接口的方法中,加@Param("accin"),@Param("accout")注解
          Account selByMutilParams(@Param("accNo") String accNo,@Param("name") String name);
       其实在mybatis中,只要加@Param("")注解,实现原理就变成了使用Map,本质是使用Map    

  -->
      <select id="selByMutilParams" resultType="account">
          select * from account where accno=#{0} and name=#{1}
      </select>

原文地址:https://www.cnblogs.com/cplinux/p/9650948.html

时间: 2024-10-29 03:08:59

mybatis学习 九 代理开发的相关文章

MyBatis - Mapper动态代理开发

采用Mapper动态代理方法只需要编写相应的Mapper接口(相当于Dao接口),那么Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同Dao接口实现类方法. - Mapper接口开发需要遵循以下规范: ① Mapper.xml文件中的namespace与mapper接口的全类名相同. ② Mapper接口方法名和Mapper.xml中定义的statement的id相同. ③ Mapper接口方法的输入参数类型和mapper.xml中定义的statement的paramet

Singer 学习九 运行&amp;&amp;开发taps、targets (四 开发target)

singer 的target 需要从stdin 的行数据,同时处理schema.record.state 消息 指南 schema 需要进行关联stream records 数据的校验 一旦Target处理了State消息之前流中出现的所有数据,就将状态消息写入stdout.请注意,尽管State消息被发送到目标,但在大多数情况下,Target的进程实际上不会将其存储在任何地方或对其执行任何操作,而不是将其重复到stdout 目标应该能够处理嵌套字段的记录.根据Target的类型,记录可能需要展

springmvc+mybatis学习笔记(汇总)

springmvc+mybatis学习笔记(汇总) 标签 : springmvc mybaits springmvcmybatis学习笔记汇总 目录 联系作者 笔记分为两大部分:mybatis和springmvc mybatis springmvc 笔记内容主要是mybatis和springmvc的一些基本概念和使用方法,涉及概念介绍.环境搭建.编程细节.运行调试等方面. 这套笔记整体偏入门和应用,适合快速上手,对底层实现和机理并未做过多分析.我后续会研读spring源码,并把学习的收获写成博客

【MyBatis学习04】mapper代理方法开发dao

上一篇博文总结了mybatis使用 原始dao的方法存在的一些弊端,我们肯定不会去用它,那么mybatis中该如何开发dao呢?如题所述,这篇博文主要来总结一下使用mapper代理的方法来开发dao的步骤. 使用mapper代理的方法来开发dao时,程序员只需要干两件事即可: 需要编写mapper.xml映射文件 需要编写mapper接口(相当于dao接口) 从做的工作来看,使用mybatis中使用mapper代理来开发dao会很方便,完全不需要我们去写具体的实现类,只需要写出接口即可,但是接口

Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发(转发同上)

前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)--MyBatis的基础知识.MybatisFirst中存在大量重复的代码.这次简化下代码: 原地址:http://www.cnblogs.com/shanheyongmu/p/7121016.html 使用MyBatis开发Dao,通常有两种方法,即原始Dao开发方法和Mapper接口开发方法. 1.SqlSession使用范围 1.1 SqlsessionFactoryBuilder 通过SqlSessionFac

【转】Mybatis学习---MyBatis知识、原始Dao开发和mapper代理开发

[原文]https://www.toutiao.com/i6594610137560777223/ 一.什么是MyBatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录.它对jdbc的操

【MyBatis学习03】原始dao开发方法及其弊端

上一篇博文总结了一下mybatis的入门,接下来就要开发dao方法了,这篇博文主要总结一下mybatis中原始dao开发的方法,最后并总结一下原始dao开发方法的弊端.mybatis中dao开发应该使用mapper代理的方法,这将在下一篇博文中介绍. 原始dao开发思路比较简单,写个dao接口和dao实现类即可.需要向dao实现类中注入sqlSessionFactory,在方法体内通过sqlSessionFactory创建sqlSession.为什么在方法体内创建呢?因为mybatis中sqlS

mybatis(Mybatis与hibernate的不同、原始Dao开发、Mapper动态代理开发)

1.Mybatis与hibernate的不同 (1)Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句.mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象. mybatis需要在配置文件中书写sql语句: <delete id="deleteStudentById" parameterType="

mybatis入门基础(二)----原始dao的开发和mapper代理开发

阅读目录 一:原始dao开发方法 二:mapper代理方法(只需要mapper接口,相当于dao接口) 承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先苦后甜嘛! 回到顶部 一:原始dao开发方法 概要:1.在上篇中搭建好的框价中编写dao接口和dao实现类 2.向dao接口实现类中注入SqlSessionFactory,在方法体内通过SqlSe