java操作数据库之模糊查找

首先,在接口里添加模糊查找的方法,代码如下:

---------------------------------代码开始----------------------------------

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();

        }
}

---------------------------------代码结束----------------------------------

猜你喜欢

转载自blog.csdn.net/qq_41857764/article/details/85341372