XML映射文件

发布于:2024-05-16 ⋅ 阅读:(53) ⋅ 点赞:(0)

XML映射文件

规范
  • XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
  • XML映射文件的namespace属性为Mapper接口全限定名一致。
  • XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。
    在这里插入图片描述
package com.itheima.mapper;

import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.*;

import java.time.LocalDate;
import java.util.List;

@Mapper //在运行时,会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器管理
public interface EmpMapper {
    //根据ID删除数据
    //#:占位符;#{id}:动态把id传进去,id不是固定
    //注意事项:如果mapper接口方法形参只有一个普通类型的参数,#{...}里面的属性名可以随便写,如:#{id},#{value}
 


    //List<Emp>:需要返回多条查询结果
    //条件查询员工(名字带张的男性,且入职时间在2020-01-01到2022-01-01之间,最后根据更新时间进行倒序排序
//    "select * from emp where name like '%张%' and gender =1 and" +
//    "entrydate between '2020-01-01' and '2022-01-01' order by update_time desc "

//    方式1:使用${},但是${}里面的内容会直接拼接在sql语句中,如果${}里面的内容是变量,那么${}里面的内容会变成字符串,
    //'%#{name}%':里面的内容会变成字符串,但是字符串不能放在单引号之中;
    // 使用$符可能会导致sql语句注入,消耗低,不安全(均不是最优解),可以使用concat字符串拼接函数
//    @Select("select * from emp where name like '%${name}%' and gender =#{gender} and " +
//            "entrydate between #{begin} and #{end} order by update_time desc ")

//方式2
//    @Select("select * from emp where name like concat('%',#{name},'%') and gender =#{gender} and " +
//            "entrydate between #{begin} and #{end} order by update_time desc ")
//    public List<Emp> list(String name, Short gender, LocalDate begin,LocalDate end);

//方式3:使用xml配置文件
    public List<Emp> list(String name, Short gender, LocalDate begin,LocalDate end);
}
<!--测试类-->
package com.itheima;

import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

@SpringBootTest
class SpringbootMybatisCrudApplicationTests {

    @Autowired
    private EmpMapper empMapper;
  

    @Test
    public void selectList(){
        List<Emp> empList=empMapper.list("张",(short)1,LocalDate.of(2010,1,1),LocalDate.of(2020,1,1));
        System.out.println(empList);
    }
}
<!--xml映射文件-->
<?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.itheima.mapper.EmpMapper">
<!--id名称需要与mapper接口方法名一致-->
<!--resultType:指定查询结果封装成哪个Java类型-->
    <select id="list" resultType="com.itheima.pojo.Emp">
        select * from emp where name like concat('%',#{name},'%') and gender =#{gender} and
           entrydate between #{begin} and #{end} order by update_time desc
    </select>
</mapper>