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


    本文演示了给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天假期后的第一天,今日不调休,不上班.
    -------------------------------------------------------------------------------------------------

  • 相关阅读:
    利用 Makefile 写的小程序
    linux内核学习之进程管理------task_struct结构体
    智能指针
    explicit 关键字
    ant脚本编写
    FROM_UNIXTIME 格式化MYSQL时间戳函数
    Dubbo架构设计详解-转
    Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)转
    SiteMesh详解
    sitemesh使用步骤
  • 原文地址:https://www.cnblogs.com/majestyking/p/16770543.html
Copyright © 2020-2023  润新知