JavaWeb Day09 Mybatis-基础操作02-XML映射文件&动态SQL

目录

Mybatis动态SQL介绍​编辑

一、案例

①Mapper层

②测试类

③EmpMapper.xml

④结果​

二、标签

(一)if where标签

​①EmpMapper.xml

②案例

③总结

(二)foreach标签

①SQL语句

②Mapper层

③EmpMapper.xml

④测试类

⑤结果

(三)sql&include标签

①EmpMapper.xml

②总结

 XML映射文件(配置文件)

①EmpMapper.xml

②Mapper层

③测试类

④思考

⑤总结


Mybatis动态SQL介绍JavaWeb Day09 Mybatis-基础操作02-XML映射文件&动态SQL_第1张图片

JavaWeb Day09 Mybatis-基础操作02-XML映射文件&动态SQL_第2张图片

一、案例

ctrl+alt+l将SQL语句格式化

        List empList= empMapper.list("z",null,null,null);

当查询条件不完整时,会查询不到数据,因此就需要编写动态SQL

①Mapper层

package com.itheima.mapper;

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

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

@Mapper
public interface EmpMapper {
     
    public List 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 testList(){
        List empList= empMapper.list("z",null,null,null);
        System.out.println(empList);
    }
}

③EmpMapper.xml




    





    

④结果JavaWeb Day09 Mybatis-基础操作02-XML映射文件&动态SQL_第3张图片

二、标签

(一)if where标签

JavaWeb Day09 Mybatis-基础操作02-XML映射文件&动态SQL_第4张图片①EmpMapper.xml




    




    

②案例

JavaWeb Day09 Mybatis-基础操作02-XML映射文件&动态SQL_第5张图片JavaWeb Day09 Mybatis-基础操作02-XML映射文件&动态SQL_第6张图片

③总结

JavaWeb Day09 Mybatis-基础操作02-XML映射文件&动态SQL_第7张图片

(二)foreach标签

JavaWeb Day09 Mybatis-基础操作02-XML映射文件&动态SQL_第8张图片

批量删除员工信息

①SQL语句

delete from emp where id in(18,19,20);



②Mapper层

EmpMapper.java

package com.itheima.mapper;

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

@Mapper
public interface EmpMapper {

    //根据ID批量删除员工信息
    public void deleteByIds(List ids);

}

③EmpMapper.xml




    

    
        delete from emp
        where id in
        
            #{id}
        
    

④测试类

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.Arrays;
import java.util.List;

@SpringBootTest
class SpringbootMybatisCrudApplicationTests {
    @Autowired
    private EmpMapper empMapper;

    @Test
    public void testDeleteByIds(){
        List ids= Arrays.asList(13,14,15);
        empMapper.deleteByIds(ids);
    }
}

⑤结果

(三)sql&include标签

查询的时候不建议使用select *,而是把所有的字段罗列出来

①EmpMapper.xml

JavaWeb Day09 Mybatis-基础操作02-XML映射文件&动态SQL_第9张图片

②总结

JavaWeb Day09 Mybatis-基础操作02-XML映射文件&动态SQL_第10张图片

 XML映射文件(配置文件)

JavaWeb Day09 Mybatis-基础操作02-XML映射文件&动态SQL_第11张图片

源文件放在java中,而配置文件放在resources中

官网:mybatis – MyBatis 3 | 简介

①EmpMapper.xml





    

②Mapper层

package com.itheima.mapper;
 
import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.*;
 
import java.time.LocalDate;
import java.util.List;
 
@Mapper
public interface EmpMapper {
 
    public List 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.util.List;
 
@SpringBootTest
class SpringbootMybatisCrudApplicationTests {
    @Autowired
    private EmpMapper empMapper;
   
    @Test
    public void testList(){
        List empList= empMapper.list("z",(short)1,LocalDate.of(2010,1,1),LocalDate.of(2020,1,1));
        System.out.println(empList);
    }
}

④思考


mapper映射文件还有一个好处,修改sql语句不用重启项目

在方法上实现动态的条件查询就会使接口过于臃肿

如果操作语句多了,直接也在注解上面比较混乱

如果要做手动映射封装实体类的时候 xml方便,项目中会常用

用xml,因为查询的条件会变化,直接写在注解里面的话会使接口过于臃肿

这两个各自找各自对应的,原来是注解绑定,现在是通过路径和方法名绑定

多条件查询要写动态sql用映射文件比较合适,简单的可以直接注解方式

终于找到问题了,xml里的sql语句不能拼接,只能是一长条,运行才不报错

执行list()方法时,根据全限定类名找到对应的namespace ,再找到id为这个方法的SQL语句就可以执行了


⑤总结

JavaWeb Day09 Mybatis-基础操作02-XML映射文件&动态SQL_第12张图片

JavaWeb Day09 Mybatis-基础操作02-XML映射文件&动态SQL_第13张图片

你可能感兴趣的:(JavaWeb,mybatis,sql,数据库)