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>
  • 相关阅读:
    用 Sqlmap 识别 WAF
    OD 实验(九)
    跳转指令及其跳转条件
    Python
    Python 模块
    OD 实验(八)
    OD 实验(七)
    OD 实验(六)
    OD 实验(五)
    OD 实验(四)
  • 原文地址:https://www.cnblogs.com/cplinux/p/9650948.html
Copyright © 2011-2022 走看看