在MyBatis中参数的传递4种方式+代码示例

时间:2022-07-28
本文章向大家介绍在MyBatis中参数的传递4种方式+代码示例,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.索引(不常用)

1.1arg0、arg1(不推荐,而且有些版本会报错)

1.2param1、param2(不推荐)

2.注解(常用):给参数设置别名

3.对象(常用):直接通过属性获取

4.Map(常用):根据key值获取

5.代码

Orders实体类

package entity;

import java.math.BigDecimal;
import java.util.Date;

/**
 * @Description:
 * @Company: 千锋互联
 * @Author: 李丽婷
 * @Date: 2020/9/17
 * @Time: 上午11:00
 */
public class Orders {

    private  String  oid;
    private int uid;
    private int aid;
    private Date otime;
    private BigDecimal ocount;//订单小计
    private int ostate;//订单状态 0 未付款,1已经付款未发货 2发货待收货 3 收货待评价 4订单完成 5 退货状态

    public String getOid() {
        return oid;
    }

    public void setOid(String oid) {
        this.oid = oid;
    }

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public int getAid() {
        return aid;
    }

    public void setAid(int aid) {
        this.aid = aid;
    }

    public Date getOtime() {
        return otime;
    }

    public void setOtime(Date otime) {
        this.otime = otime;
    }

    public BigDecimal getOcount() {
        return ocount;
    }

    public void setOcount(BigDecimal ocount) {
        this.ocount = ocount;
    }

    public int getOstate() {
        return ostate;
    }

    public void setOstate(int ostate) {
        this.ostate = ostate;
    }

}

MyTest测试类

import dao.GuaDao;
import dao.ProductDao;
import entity.Orders;
import entity.Product;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;
import utils.MyBatisUtils;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

/**
 * zt
 * 2020/9/23
 * 20:28
 */
public class MyTest {
    SqlSession sqlSession = null;
    @Before
    public void init(){
        sqlSession = MyBatisUtils.getSqlSession();
    }

    @Test
    public void FindAllByUid1(){
        GuaDao mapper = sqlSession.getMapper(GuaDao.class);
        BigDecimal bigDecimal = new BigDecimal(65967.00);
        System.out.println(mapper.findAllByUidOcount1(8,bigDecimal));
    }
    @Test
    public void FindAllByUid2(){
        GuaDao mapper = sqlSession.getMapper(GuaDao.class);
        BigDecimal bigDecimal = new BigDecimal(65967.00);
        System.out.println(mapper.findAllByUidOcount2(8,bigDecimal));
    }
    @Test
    public void FindAllByUid3(){
        GuaDao mapper = sqlSession.getMapper(GuaDao.class);
        BigDecimal bigDecimal = new BigDecimal(65967.00);
        System.out.println(mapper.findAllByUidOcount3(8,bigDecimal));
    }
    @Test
    public void FindAllByUid4(){
        GuaDao mapper = sqlSession.getMapper(GuaDao.class);
        BigDecimal bigDecimal = new BigDecimal(65967.00);
        Orders orders = new Orders();
        orders.setUid(8);
        orders.setOcount(bigDecimal);
        System.out.println(mapper.findAllByUidOcount4(orders));
    }
    @Test
    public void FindAllByUid5(){
        GuaDao mapper = sqlSession.getMapper(GuaDao.class);
        BigDecimal bigDecimal = new BigDecimal(65967.00);
        HashMap<String, Object> map = new HashMap<>();
        map.put("uid", 8);
        map.put("ocount", bigDecimal);
        Orders allByUidOcount5 = mapper.findAllByUidOcount5(map);
        System.out.println(allByUidOcount5);

    }
    @Test
    public void testFindAll(){
        ProductDao mapper = sqlSession.getMapper(ProductDao.class);
        System.out.println(mapper.findAll());
    }
    @Test
    public void findById(){
        ProductDao mapper = sqlSession.getMapper(ProductDao.class);
        System.out.println(mapper.findById(1));
    }
    @Test
    public void findByIdAndName(){
        ProductDao mapper = sqlSession.getMapper(ProductDao.class);
        System.out.println(mapper.findByNameAndId("红米4", 1));
    }
    @Test
    public void update(){
        Product product = new Product();
        product.setPname("呱呱棒手机");
        product.setPinfo("就是棒!");
        product.setPid(1);
        ProductDao mapper = sqlSession.getMapper(ProductDao.class);
        System.out.println(mapper.update(product));
        sqlSession.commit();
    }

    @Test
    public void findByNameAndInfo(){
        ProductDao mapper = sqlSession.getMapper(ProductDao.class);
        Map<String,Object> map = new HashMap<>();
        map.put("name", "呱呱棒手机");
        map.put("info", "就是棒!");
        System.out.println(mapper.findByNameAndInfo(map));
    }

    @Test
    public void testFind5(){
        //sqlSession.selectOne("namespace+statementid")
        //动态代码
        ProductDao dao =   sqlSession.getMapper(ProductDao.class);//) Proxy.newProxyInstance
        System.out.println( dao.findAll2());
    }
    @Test
    public   void  testFind3(){
        //sqlSession.selectOne("namespace+statementid")
        //动态代码
        ProductDao dao =   sqlSession.getMapper(ProductDao.class);//) Proxy.newProxyInstance


        System.out.println(dao.findByNameAndInfo("绿","绿"));

    }
}

GuaDao.java

package dao;

import entity.Orders;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * zt
 * 2020/9/24
 * 20:03
 */
public interface GuaDao {
    //索引-->#{arg0}
    public List<Orders> findAllByUidOcount1(Integer uid, BigDecimal bigDecimal);
    //索引-->#{param1}
    public List<Orders> findAllByUidOcount2(Integer uid, BigDecimal bigDecimal);

    //注解@Param("a")
    public List<Orders> findAllByUidOcount3(@Param("a") Integer uid, @Param("b")BigDecimal ocount);
    //对象
    public Orders findAllByUidOcount4(Orders orders);
    //Map
    public Orders findAllByUidOcount5(Map<String,Object> map);

}

GuaMapper.xml Mapper中:通过resultMap的type定义为entity包下的Orders实体类,映射到orders的数据库表中的字段,select标签采用resultMap的名字aaa拿到这个映射(否则调用dao层方法的时候返回的对象为null)

<?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">
       <!-- "Orders{" +
        "oid='" + oid + ''' +
        ", uid=" + uid +
        ", aid=" + aid +
        ", otime=" + otime +
        ", ocount=" + ocount +
        ", ostate=" + ostate +
        '}';-->
<mapper namespace="dao.GuaDao">
    <resultMap id="aaa" type="entity.Orders">
        <id property="oid" column="o_id"></id>
        <result property="uid" column="u_id"></result>
        <result property="aid" column="a_id"></result>
        <result property="otime" column="o_time"></result>
        <result property="ocount" column="o_count"></result>
        <result property="ostate" column="o_state"></result>
    </resultMap>
    <select id="findAllByUidOcount1" resultMap="aaa">
        select * from orders where u_id = #{arg0} and o_count = #{arg1};
    </select>
    <select id="findAllByUidOcount2" resultMap="aaa">
        select * from orders where u_id = #{param1} and o_count = #{param2};
    </select>
    <select id="findAllByUidOcount3" resultMap="aaa">
        select * from orders where u_id = #{a} and o_count = #{b};
    </select>
    <select id="findAllByUidOcount4" resultMap="aaa">
        select * from orders where u_id = #{uid} and o_count = #{ocount};
    </select>
    <select id="findAllByUidOcount5" resultMap="aaa">
        select * from orders where u_id = #{uid} and o_count = #{ocount};
    </select>

</mapper>

mybatisConfig.xml

<?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">
<!--mybatis-3-config.dtd xml的约束-->
<configuration>
    <properties resource="dbinfo.properties"></properties>
    <settings>
        <!--配置mybatis底层处理打印日志-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <!--连库环境-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--
        指定映射文件
    -->
    <mappers>
        <mapper resource="mapper/ProductMapper.xml"></mapper>
        <mapper  resource="mapper/ProductDetailMapper.xml"></mapper>
        <mapper  resource="mapper/OrdersMapper.xml"></mapper>
        <mapper  resource="mapper/GuaMapper.xml"></mapper>
    </mappers>
</configuration>

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>0923new02</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.7</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

GuaUtils.java—>MyBatis工具类

package utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

/**
 * zt
 * 2020/9/24
 * 15:22
 */
public class GuaUtils {
    final static ThreadLocal<SqlSession> sessionThreadLocal = new ThreadLocal<>();
    static SqlSessionFactory sqlSessionFactory = null;

    static {
        try {
            InputStream resourceAsStream = Resources.getResourceAsStream("mybatisConfig.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static SqlSession getSqlSession(){
        SqlSession sqlSession = sessionThreadLocal.get();
        if(sqlSession==null){
            sqlSession = sqlSessionFactory.openSession();
        }
        return sqlSession;
    }
    public static void commit(){
        getSqlSession().commit();
        close();
    }
    public static void close(){
        SqlSession s = getSqlSession();
        s.close();
        sessionThreadLocal.remove();
    }
    public void rollback(){
        SqlSession sqlSession = getSqlSession();
        sqlSession.rollback();
    }
    public static <T extends Object> T getMapper(Class<T> tClass){
        return getSqlSession().getMapper(tClass);
    }

    public static void main(String[] args) {
        System.out.println(getSqlSession());
        System.out.println(getSqlSession());
        close();
        System.out.println(getSqlSession());
        System.out.println(getSqlSession());
    }


}

6.FindAllByUid5测试方法的运行结果