创建session
开启一个session需要使用到SqlSessionFactory,而SqlSessionFactory是由SqlSessionFactoryBuilder创建的。具体的代码就是:
String resource = "configuration.xml";
InputStream stream = Resources.getResourceAsStream(resource);
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(stream);
SqlSession session = ssf.openSession();
session的增删改查
在session里进行增删改查一系列的操作,对应的方法都由session提供,可以传递参数给sql语句。比如说:
Order order = session.selectOne("domain.Order.selectOrder", "0001");
session的方法还有:selectList、selectMap、delete、update、insert等,select操作的方法最多。
就上面的selectOne(xxx, xxx)而言,这里接收两个参数。第一个用于定位到所要执行的sql语句,第二个是传递的参数。这里的意思是查询一个id为”0001”的订单信息。
mapper配置文件
order.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="domain.Order">
<select id="selectOrder" parameterType="String" resultType="domain.Order">
select * from orders where id = #{id}
</select>
</mapper>
这里的namespace用于区分相同的id,和java里的package效果类似。parameterType是传入参数的类型,resultType是返回的数据类型。<select></select>
里面就是所需要的查询语句,这里的#{}
是占位符,会被传入的参数所替代。
多个传递参数
在where查询条件中,常常是会有多个条件的,所以参数也会有多个,那该如何做呢?看下面这个例子:
1.首先需要将参数用Map封装起来
Map<String, String> params = new HashMap<String, String>();
params.put("receiverAddress", "China");
params.put("receiverName", "Bean");
List<Order> orders = session.selectList("domain.Order.selectOrders", params);
for(Order ord : orders) {
System.out.println(ord);
}
2.在order.xml文件中,parameterType的类型改为Map,同时在sql语句中增加相应的参数即可:
<select id="selectOrders" parameterType="Map" resultType="domain.Order">
select * from orders where receiverAddress = #{receiverAddress} and receiverName = #{receiverName}
</select>
关于configuration.xml配置文件
对于configuration.xml文件,这里需要引入所需的各种mapper配置文件,也就是<mapper></mapper>
节点。
<mappers>
<mapper resource="domain/order.xml" />
<mapper resource="domain/user.xml" />
</mappers>