mapper映射文件
当我们在工程中设置好mybatis组件后,我们可以通过定义mapper的定义文件(如stuCardMapper.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.zzh.mybatis.mappers.dao.StuCardMapper">
<!-- 通过select执行查询,id用于标识映射文件中的sql(Statement-id)
将sql语句封装到mappedstatement中
#{}表示占位符
parameterType-指定输入参数的类型
#{id}-id表示输入的参数,参数名称就是id,如如果输入参数是简单类型,#{}中的参数可以任意
resultType-指定sql输出结果所映射的java对象类型
-->
<!--
resultMap标签可以映射select查询出来结果的集合,其主要作用是将实体类中的字段与数据库表中的字段进行关联映射。
-->
<resultMap id="stuCardMap" type="com.zzh.mybatis.mappers.entity.StuCard" >
<result column="stuNo" property="stuNo"/>
</resultMap>
<!--通过stuNo来查询学生信息-->
<select id="getStuCardByStuNo" parameterType="String" resultMap="stuCardMap">
select stuNo, stuName, money from stu_info where stuNo = #{value}
</select>
<!--如果不使用resultMap我们只需要设定正确的resultType就可以正常使用了 -->
<select id="getStuCardByMoney" parameterType="String" resultType="com.zzh.mybatis.mappers.entity.StuCard">
select * from stu_info where money = #{value}
</select>
<!-- if条件查询 -->
<select id="getStuCardByAttrs" parameterType="com.zzh.mybatis.mappers.entity.StuCard" resultMap="stuCardMap">
select stuNo, stuName, money from stu_info
<where>
<if test="stuNo != null and stuNo != ''">
and stuNo = #{stuNo}
</if>
<if test="stuName != null and stuName != ''">
and stuName = #{stuName}
</if>
<if test="money != null and money != ''">
and money = #{money}
</if>
</where>
</select>
<!--这里的 where、if 标签有语法不同于java,需要注意形式-->
<!-- 使用foreach组装sql语句-->
<select id="getStuCardByStuNos" parameterType="List" resultMap="stuCardMap">
select stuNo, stuName, money from stu_info
<where>
<if test="list != null">
<foreach collection="list" item="stuNo" open="and stuNo in(" separator=", " close=")">
#{stuNo}
</foreach>
</if>
</where>
</select>
</mapper>
mapper的接口文件
在定义完mapper.xml后我们还需要写出mapper接口文件
注意:
1、Mapper.xml文件中的namespace与mapper接口的类路径相同。
2、Mapper接口方法名与Mapper.xml(StuCardMapper.xml)中定义的statement的id相同
3、Mapper接口方法的输入参数类型和StuCardMapper.xml中定义的statement的parameterType的类型相同
4、 Mapper接口方法的输出参数类型和StuCardMapper.xml中定义的statement的resultType的类型相同
代码如下:
package com.zzh.mybatis.mappers.dao;
import java.util.List;
import com.zzh.mybatis.mappers.entity.StuCard;
public interface StuCardMapper {
public StuCard getStuCardByStuNo(String stuNo);
// 根据stuNo查询学生信息
public StuCard getStuCardByMoney(String money);
//根据money查询学生信息
//使用多个条件查询
public List<StuCard> getStuCardByAttrs(StuCard stuCard);
public List<StuCard> getStuCardByStuNos(List<String> stuNos);
}
测试类
package com.zzh.mybatis.mappers.dao;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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 org.junit.Before;
import org.junit.Test;
import com.zzh.mybatis.mappers.entity.StuCard;
public class MapperTest {
private SqlSession session;
@Before
public void mybatiesTest() throws IOException {
//先使用SqlSessionFactory创建会话工厂
SqlSessionFactory ssf =new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("config/myBatis/mybatis-config.xml"));
session = ssf.openSession();
}
@Test
public void queryStuByStuNo() {
//创建对象
StuCardMapper cardMapper = session.getMapper(StuCardMapper.class);
//通过学号查询信息
System.out.println("======================>"+cardMapper.getStuCardByStuNo("2018160203"));
//通过money查询信息
System.out.println("======================>"+cardMapper.getStuCardByMoney("10000"));
StuCard stuCard = new StuCard();
stuCard.setStuNo("2018160203");
System.out.println("=================>" + cardMapper.getStuCardByAttrs(stuCard));
List<String> stuNos = new ArrayList<String>();
stuNos.add("2018160201");
stuNos.add("2018160202");
System.out.println("=================>" + cardMapper.getStuCardByStuNos(stuNos));
}
}