首页 > 编程语言 >Mybatis传递参数的各种方式:简单类型,@Param,map,java对象等等

Mybatis传递参数的各种方式:简单类型,@Param,map,java对象等等

时间:2022-10-08 22:46:01浏览次数:56  
标签:map account java country Account Param sqlSession balance public

本文演示了给mybatis的mapper文件当中的SQL语句传递参数或者参数值的各种方式.

xml格式mapper文件:

<?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.galaxy.bank.dao.AccountDao">
    <select id="selectOneAccountByNo" resultType="com.galaxy.bank.pojo.Account">
        select id, actno, balance, holder_name, country
        from bankdb.t_account
        where actno = #{actno}
    </select>

    <select id="selectAccountById" parameterType="java.lang.Integer" resultType="com.galaxy.bank.pojo.Account">
        select id, actno, balance, holder_name, country
        from bankdb.t_account
        where id = #{id}
    </select>
    <select id="selectAccountByMultiParam" resultType="com.galaxy.bank.pojo.Account">
        select id, actno, balance, holder_name, country
        from bankdb.t_account
        where balance > #{myBalance}
          and country = #{myCountry}
    </select>
    <!--    把java对象作为参数传给mapper,对象的属性的值就是SQL语句中的#{}-->
    <select id="selectMultipleAccountByObject" resultType="com.galaxy.bank.pojo.Account">
        select id, actno, balance, holder_name, country
        from bankdb.t_account
        where balance > #{balance}
           or country = #{country}
    </select>

    <!--按照位置传递参数值-->
    <select id="selectAccountByBalanceAndCountry" resultType="com.galaxy.bank.pojo.Account">
        select id, actno, balance, holder_name, country
        from bankdb.t_account
        where balance > #{arg0}
          and country = #{arg1}
    </select>

    <!--使用${}传递参数,替换列名-->
    <select id="selectAccount$Order" resultType="com.galaxy.bank.pojo.Account">
        select id, actno, balance, holder_name, country
        from bankdb.t_account
        where balance > 1000.00
          order by ${myBalance}
    </select>

    <!--用Map传递参数值-->
    <select id="selectAccountByMap" resultType="com.galaxy.bank.pojo.Account">
        select id, actno, balance, holder_name, country
        from bankdb.t_account
        where balance > #{mapBalance}
          and country = #{mapCountry}
    </select>

    <update id="updateOneAccountByAccountNo">
        update bankdb.t_account
        set balance=#{balance}
        where actno = #{actno}
    </update>
    <insert id="insertOneAccount">
        insert into bankdb.t_account
        values (#{id}, #{actno}, #{balance})
    </insert>
</mapper>

 

Java Dao接口:

package com.galaxy.bank.dao;

import com.galaxy.bank.pojo.Account;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface AccountDao {





    /**
     * 1.Mybatis传递参数的方法之一:简单类型参数示例
     */
    Account selectAccountById(int id);

    Account selectAccountByNo(String accountNo);

    /**
     * 2.Mybatis传递参数的方法之二:在Java Dao接口中使用@Param注解给参数取别名
     * @Param注解的属性值就是参数的别名,参数别名将用在xml格式的mapper文件的SQL语句里
     */
    List<Account> selectAccountByMultiParam(@Param("myBalance") Double balance, @Param("myCountry") String country);

    /**
     * 3.1Mybatis传递参数的方法之三:使用Java对象作为参数
     */
    //返回值1表示更新成功,其它值表示失败
    int updateOneAccountByAccountNo(Account account);

    /**
     * 3.2使用java对象作为Mybatis的参数
     * 注意,这个例子里面new了一个Account对象,然后用setter方法给其中两个属性赋值,其余属性没有赋值;
     * 已经赋值的这两个属性的值恰好是xml格式mapper文件当中SQL语句所需要的。
     * 实际上,我们创建任意对象,再把对象属性值赋值给mapper就行。
     */
    List<Account> selectMultipleAccountByObject(Account account);

    /**
     * 4.按照位置传递参数值
     * 在mapper中用#{arg0},#{arg1}表示参数位置
     */
    List<Account> selectAccountByBalanceAndCountry(Double balance,String country);

    /**
     * 5.用Map传递参数值
     */
    List<Account> selectAccountByMap(Map<String,Object> map);

    /**
     * 6.使用${}替换列名
     * 注意:是”$“字符串替换拼接,不是占位符"#"赋值。
     */
    List<Account> selectAccount$Order(@Param("myBalance") String colBalance);


}

 

Java Pojo 类:

package com.galaxy.bank.pojo;

public class Account {
    private Long id;
    private String actno;
    private Double balance;
    private String holderName;
    private String country;

    public Account() {
    }

    public Account(Long id, String actno, Double balance, String holderName, String country) {
        this.id = id;
        this.actno = actno;
        this.balance = balance;
        this.holderName = holderName;
        this.country = country;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getActno() {
        return actno;
    }

    public void setActno(String actno) {
        this.actno = actno;
    }

    public Double getBalance() {
        return balance;
    }

    public void setBalance(Double balance) {
        this.balance = balance;
    }

    public String getHolderName() {
        return holderName;
    }

    public void setHolderName(String holderName) {
        this.holderName = holderName;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", actno='" + actno + '\'' +
                ", balance=" + balance +
                ", holderName='" + holderName + '\'' +
                ", country='" + country + '\'' +
                '}';
    }
}

 

Java 测试类:

package com.galaxy;


import com.galaxy.bank.dao.AccountDao;
import com.galaxy.bank.pojo.Account;
import com.galaxy.bank.utils.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * date:2022-10-08
 */
public class AppTest{

    /**
     * 1.Mybatis传递参数的方法之一:简单类型参数示例
     */
    @Test
    public void test01(){
        SqlSession sqlSession= MybatisUtil.getSqlSession();
        AccountDao dao = sqlSession.getMapper(AccountDao.class);
        //简单类型参数
        Account account=dao.selectAccountById(2);
        System.out.println("Account:"+account);
        sqlSession.close();

    }

    /**
     * 2.Mybatis传递参数的方法之二:在Java Dao接口中使用@Param注解给参数取别名
     * @Param注解的属性值就是参数的别名,参数别名将用在xml格式的mapper文件的SQL语句里
     */
    @Test
    public void test02(){
        SqlSession sqlSession= MybatisUtil.getSqlSession();
        AccountDao dao = sqlSession.getMapper(AccountDao.class);
        //@Para注解命名参数
        List<Account> accounts=dao.selectAccountByMultiParam(1000.01,"UK");
        accounts.forEach(account -> {System.out.println("Account:"+account);});

        sqlSession.close();

    }

    /**
     * 3.1使用java对象作为Mybatis的参数
     *
     */
    @Test
    public void test03(){
        SqlSession sqlSession= MybatisUtil.getSqlSession();
        AccountDao dao = sqlSession.getMapper(AccountDao.class);

        Account myAccount=new Account(8L,"UK100708",2212.00,"Henry Cavill","UK");
        dao.updateOneAccountByAccountNo(myAccount);

        //@Para注解命名参数
        List<Account> accounts=dao.selectAccountByMultiParam(1000.01,"UK");
        accounts.forEach(account -> {System.out.println("Account:"+account);});

        sqlSession.commit();
        sqlSession.close();

    }

    /**
     * 3.2使用java对象作为Mybatis的参数
     * 注意,这个例子里面new了一个Account对象,然后用setter方法给其中两个属性赋值,其余属性没有赋值;
     * 已经赋值的这两个属性的值恰好是xml格式mapper文件当中SQL语句所需要的。
     * 实际上,我们创建任意对象,再把对象属性值赋值给mapper就行。
     */

    @Test
    public void test04(){
        SqlSession sqlSession= MybatisUtil.getSqlSession();
        AccountDao dao = sqlSession.getMapper(AccountDao.class);

        //只给其中两个属性赋值
        Account myAccount=new Account();
        myAccount.setBalance(1089.01);
        myAccount.setCountry("KR");

        List<Account> accounts=dao.selectMultipleAccountByObject(myAccount);
        accounts.forEach(account -> {System.out.println("Account:"+account);});

        sqlSession.close();

    }


    /**
     * 4.按照位置传递参数值
     * 在mapper中用#{arg0},#{arg1}表示参数位置
     */
    @Test
    public void test05(){
        SqlSession sqlSession= MybatisUtil.getSqlSession();
        AccountDao dao = sqlSession.getMapper(AccountDao.class);
        List<Account> accounts=dao.selectAccountByBalanceAndCountry(2000.01,"UK");
        accounts.forEach(account -> {System.out.println("Account:"+account);});

        sqlSession.close();
    }

    /**
     * 5.用Map传递参数值
     */
    @Test
    public void test06(){
        SqlSession sqlSession= MybatisUtil.getSqlSession();
        AccountDao dao = sqlSession.getMapper(AccountDao.class);

        Map<String,Object> accountMap=new HashMap<>();
        accountMap.put("mapBalance",2001.00);
        accountMap.put("mapCountry","UK");

        List<Account> accounts=dao.selectAccountByMap(accountMap);
        accounts.forEach(account -> {System.out.println("Account:"+account);});

        sqlSession.close();
    }

    /**
     * 6.使用${}替换列名
     * 这里dao.selectAccount$Order("balance")中的"balance"将替换mapper当中的SQL语句的${}的内容
     * 注意:是”$“字符串替换拼接,不是占位符"#"赋值。
     */
    @Test
    public void test07(){
        SqlSession sqlSession= MybatisUtil.getSqlSession();
        AccountDao dao = sqlSession.getMapper(AccountDao.class);
        List<Account> accounts=dao.selectAccount$Order("balance");
        accounts.forEach(account -> {System.out.println("Account:"+account);});

        sqlSession.close();
    }

}

 

------------------------------------------------------------------------------------------------
2022年10月8日,农历九月十三,星期六,阴天有小雨,气温较冷,上海。
国庆节7天假期后的第一天,今日不调休,不上班.
-------------------------------------------------------------------------------------------------

标签:map,account,java,country,Account,Param,sqlSession,balance,public
From: https://www.cnblogs.com/majestyking/p/16770543.html

相关文章

  • java---三个小案例--冒泡---动态扩容--将输入的字母中带x的置为null,不是x的依次向前
    三个案例1.动态录入往数组里录入n个数字,并用冒泡排序2.动态输入n个字母,并将输入的字母中带x的置为null,不是x的依次向前3.动态录入学生成绩并保存到数组中,每录入一个成绩......
  • IDEA创建java项目
    一.创建:1.new-->project2.设置包名:src->New->Package在这里我的包名设置为kecheng3.在包名下创建javaclass右键包名kecheng->New->javaclass然后输入class的名字,......
  • java异常机制
    异常异常的概述异常就是程序出现了不正常的情况 异常(Exception)的概念异常指程序运行过程中出现的非正常现象,例如除数为零、需要处理的文件不存在、数组下标越界......
  • 简述Java编译及运行过程
    .java源文件由编译器编译成.class字节码文件,字节码文件由JVM解释运行。 编译:是指将我们编写的Java源文件翻译成JVM认识的class文件,在这个过程中,javac编译器会检查我......
  • java打印九九乘法表
    ......
  • C++ STL :unordered_multimap
    1、代码#include<iostream>#include<unordered_map>usingnamespacestd;intmain(){unordered_multimap<int,int>myUnorderedMultiMap={{2,10},{1,20}......
  • Java基础合集
    面向对象和面向过程的区别面向过程性能更优一些,所以一般是使用在底层,例如,单片机、嵌入式开发面向对象相对于面向过程效率较低,但是面向对象具有继承封装多态的特性使得面......
  • Java 一个List泛型根据另一个List泛型的属性进行过滤
    这个需求是在批量入库的时候,进行批量校验用到的1.逻辑是传入List参数,需要入库2.根据List去查询库中是否存在3.用传入的List进行过滤,获取苦衷不存在的resList4.插入resLi......
  • Java 内部类内存泄漏
    一、内存泄漏原因  非静态内部类会有持有外部类,如果有地方引用了这个非静态内部类,会导致外部类也被引用,垃圾回收时无法回收这个外部类(即使外部类已经没有其他地方......
  • JavaWeb--CSS基础
    JavaWeb--CSS概念CascadingStyleSheets层叠样式表层叠:多个样式可以作用在同一个html的元素上,同时生效好处:功能强大将内容展示和样式控制分离降低耦......