首先,在接口里添加模糊查找的方法,代码如下:
---------------------------------代码开始----------------------------------
package com.dao;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import com.entity.Teacher;
public interface TeacherDAO {
//这里的注解必须存在,它帮助mapper映射文件识别
//如果是单个基本类型则不用写注解,多个基本类型也要写
public void add(@Param("tea") Teacher tea);
public List<Teacher> findAll();
//方法参数名在任何地方都是可以随便命名的
public Teacher getByIdAndName(Map map);
//这里的返回类型一定要是list,因为模糊查找很容易查出来多条数据,如果不是list就会报错了
public List<Teacher> getByName(String teaName);
}
---------------------------------代码结束----------------------------------
然后,在Mapper文件中准备mysql语言,代码如下:
---------------------------------代码开始----------------------------------
<?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.dao.TeacherDAO">
<!-- 注意返回类型resultType的设置 -->
<insert id="add">
insert into teacher values(null,#{tea.teaName},#{tea.teaAge})
</insert>
<!-- 这里返回类型不写集合,但要写完整类型名,基本类型可不写完整的 -->
<select id="findAll" resultType="com.entity.Teacher">
select * from teacher
</select>
<!-- 别名这里这里竟然不区分大小写 -->
<select id="getByIdAndName" resultType="teacher">
select * from teacher where teaId=#{teaId} and teaName=#{teaName}
</select>
<!-- concat的作用是将多个字符串连接起来,是动态方法 -->
<select id="getByName" resultType="teacher">
select * from teacher where teaName like concat(#{teaName},'%');
</select>
</mapper>
---------------------------------代码结束----------------------------------
测试,代码如下:
---------------------------------代码开始----------------------------------
package com.test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.dao.BaseDAO;
import com.dao.TeacherDAO;
import com.entity.Teacher;
public class TeacherDAOTest {
@Test
public void getByIdAndNameTest(){
SqlSession session=BaseDAO.getSession();
TeacherDAO dao=session.getMapper(TeacherDAO.class);
//键值对都写成string类型就可以给不同类型的对应变量装值了
Map<String,String> map=new HashMap<String, String>();
map.put("teaId","1");
map.put("teaName","张三");
Teacher tea=dao.getByIdAndName(map);
//这个叫断言,比较第一个参数和第二个参数是否相等,省的打印就能判断有没有达到预期,这个测试中用不着
//Assert.assertEquals(1,1);
System.out.println(tea);
session.close();
}
@Test
public void testGetByName(){
SqlSession session=BaseDAO.getSession();
TeacherDAO dao=session.getMapper(TeacherDAO.class);
List<Teacher> list=dao.getByName("张");
System.out.println(list);
session.close();
}
}
---------------------------------代码结束----------------------------------