获取数据的方式
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