mybatis参数传递

186 阅读2分钟

获取数据的方式

1. 使用内置名称进行调用

使用符号:#{}进行获取

{} 中名字的使用规则:arg0、arg1、argN(N为从0开始的数字,和方法参数顺序对应)或 param1、param2、paramN(N为从1开始的数字,和方法参数顺序对应)

public interface BookMapper {
    public abstract Book selectOneBook(String name, String type);
}
<select id="selectOneBook" resultType="Book">
    select * from t_book where name = #{arg0} and type = #{arg1}
</select>
public class Test2 {
    public static void main(String[] args) throws IOException {
        // 指定核心配置文件路径
        String resource = "mybatis.xml";
        // 获取加载配置文件的输入流:
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 加载配置文件,创建工厂类
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 通过工厂创建一个会话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 动态代理模式:通过接口找到接口的实现类 BookMapper mapper = BookMapper实现类
        BookMapper mapper = sqlSession.getMapper(BookMapper.class);
        Book book = mapper.selectOneBook("张三","Java");
        System.out.println(book.getName());
        // 关闭资源
        sqlSession.close();
    }
}

2. 将参数封装成对象

public interface BookMapper {
    public abstract Book selectOneBook2(Book book);
}
<select id="selectOneBook2" resultType="Book">
    select * from t_book where name = #{name} and type = #{type}
</select>
public class Test2 {
    public static void main(String[] args) throws IOException {
        // 指定核心配置文件路径
        String resource = "mybatis.xml";
        // 获取加载配置文件的输入流:
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 加载配置文件,创建工厂类
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 通过工厂创建一个会话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 动态代理模式:通过接口找到接口的实现类 BookMapper mapper = BookMapper实现类
        BookMapper mapper = sqlSession.getMapper(BookMapper.class);
        //Book book = mapper.selectOneBook("张三","Java");
        Book b = new Book();
        b.setName("张三");
        b.setType("Java");
        Book book = mapper.selectOneBook2(b);
        System.out.println(book.getName());
        // 关闭资源
        sqlSession.close();
    }
}

3. 多个参数多个对象,获取参数

使用符号:#{}进行获取

argM.属性名 或 paramN.属性名【不可省略】

public interface BookMapper {
    public abstract Book selectOneBook3(String name, Book book);
}
<select id="selectOneBook3" resultType="Book">
    select * from t_book where name = #{param1} and type = #{param2.type}
</select>
package com.msb;

import com.msb.mapper.BookMapper;
import com.msb.pojo.Book;
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;

public class Test2 {
    public static void main(String[] args) throws IOException {
        // 指定核心配置文件路径
        String resource = "mybatis.xml";
        // 获取加载配置文件的输入流:
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 加载配置文件,创建工厂类
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 通过工厂创建一个会话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 动态代理模式:通过接口找到接口的实现类 BookMapper mapper = BookMapper实现类
        BookMapper mapper = sqlSession.getMapper(BookMapper.class);
        //Book book = mapper.selectOneBook("张三","Java");
        Book b = new Book();
        b.setName("张三");
        b.setType("Java");
        //Book book = mapper.selectOneBook2(b);
        Book book = mapper.selectOneBook3("张三",b);
        System.out.println(book.getName());
        // 关闭资源
        sqlSession.close();
    }
}

以上操作都为查询,下面写一个增加的案例

接口部分:

insertBook(Book book)

映射文件部分:

<insert id="addBook">
    insert into t_book(id,name,type,description) values (#{id},#{name},#{type},#{description})

测试代码部分:【注意事务操作】

BookMapper mapper = sqlSession.getMapper(BookMapper.class);
Book b = new Book();
b.setId(5);
b.setName("李四");
b.setType("c++");
b.setDescription("有点难");
int n = mapper.insertBook(b);
if (n > 0) {
    System.out.println("插入成功");
}
//事务相关操作
sqlSession.commit();
//关闭资源
sqlSession.close();

log4j日志打印sql

# 映射文件mapper的namespace
log4j.logger.com.msb.mapper.BookMapper = TRACE