zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    poj 2528 Mayor's posters (线段树+离散化)
    poj 1201 Intervals (差分约束)
    hdu 4109 Instrction Arrangement (差分约束)
    poj 1195 Mobile phones (二维 树状数组)
    poj 2983 Is the Information Reliable? (差分约束)
    树状数组 讲解
    poj 2828 Buy Tickets (线段树)
    hdu 1166 敌兵布阵 (树状数组)
    Ubuntu网络配置
    Button控制窗体变量(开关控制灯的状态)
  • 原文地址:https://www.cnblogs.com/cplinux/p/9650948.html
Copyright © 2011-2022 走看看