JavaEE简单示例——动态SQL的<trim>属性

简单介绍:

在之前我们介绍过使用可以帮我们动态的添加和删除一些关键字,但是这些只能操作特定的关键字,比如where和set,但是有一些时候我们需要操作的关键字并不是这些常见的关键字,而是一些没有标签进行直接操作的一些不常用的关键字,这时候如果想要删除或者添加这些关键字就要使用另一个标签标签,这个标签可以自定义我们要删除或者添加的关键字。

简单使用:

标签有四个属性:

prefix:指定SQL语句增加的前缀

prefixOverrides:指定SQL语句中要去掉的前缀字符串

suffix:指定给SQL语句增加的后缀

suffixOverrides:指定SQL语句中要去掉的后缀字符串

代码实现:

SQL映射文件:




  
    





    

    

    
        update student
            
                
                    name = #{name},
                
                
                    password = #{password},
                
            
        where id = #{id}
    

    

接口文件:

package Mappers;

import com.mybatis.POJO.student;

import java.util.List;

public interface dynamicSql {
    List selectByIdOrName(student s);
    List selectStudentByIdAndName(student s);
    List selectByIdAndWhere(student s);
    int updateBySet(student s);
    List selectByTrim(student s);
}

测试类:

package Mappers;

import com.mybatis.POJO.Tools.createSqlSession;
import com.mybatis.POJO.student;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class dynamicSqlTest {
    @Test
    public void selectByIdOrName(){
        SqlSession sqlSession = new createSqlSession().create();
        dynamicSql dynamicSql = new createSqlSession().createdynamicSql();
        student s = new student();
        s.setId(1);
        s.setName("张三");
        List stu = sqlSession.selectList("Mappers.dynamicSql.selectByIdOrName", s);
        for(student student : stu){
            System.out.println(student.toString());
        }
    }
    @Test
    public void selectStudentByIdAndName(){
        dynamicSql dynamicSql = new createSqlSession().createdynamicSql();
        student s =new student();
//        s.setId(1);
//        s.setName("张三");
        for (student student : dynamicSql.selectStudentByIdAndName(s)) {
            System.out.println(student);
        }
    }
    @Test
    public void selectAll(){
        SqlSession sqlSession = new createSqlSession().create();
        dynamicSql dynamicSql = new createSqlSession().createdynamicSql();
        List list = sqlSession.selectList("Mappers.dynamicSql.selectAll");
        for(student student : list){
            System.out.println(student.toString());
        }
    }
    @Test
    public void selectByIdAndWhere(){
        SqlSession sqlSession = new createSqlSession().create();
        dynamicSql dynamicSql = new createSqlSession().createdynamicSql();
        student s = new student();
//        s.setId(1);
//        s.setName("张三");
        for (student student : dynamicSql.selectByIdAndWhere(s)) {
            System.out.println(student.toString());
        }
    }
//    测试set标签插入数据的方法
    @Test
    public void updateBySet(){
        SqlSession sqlSession = new createSqlSession().create();
        dynamicSql dynamicSql = new createSqlSession().createdynamicSql();
        student s = new student();
        s.setId(4);
        s.setName("大海");
        s.setPassword("222333");
        int i = dynamicSql.updateBySet(s);
        if(i > 0){
            System.out.println("修改成功!");
        }
    }
//    使用标签动态的添加where关键字和and关键字
    @Test
    public void selectByTrim(){
        SqlSession sqlSession = new createSqlSession().create();
        dynamicSql dynamicSql = new createSqlSession().createdynamicSql();
        student s = new student();
        s.setId(1);
        s.setName("张三");
        for (student student : dynamicSql.selectByTrim(s)) {
            System.out.println(student.toString());
        }

    }
}

运行结果:

JavaEE简单示例——动态SQL的<trim>属性_第1张图片

我们先放开两个条件,当这两个条件同时存在的时候,应该会正常的查询出一条数据:

JavaEE简单示例——动态SQL的<trim>属性_第2张图片

紧接着我们就关闭id的参数,只保留name的参数作为查询条件,这时候我们能查询出两条数据:

JavaEE简单示例——动态SQL的<trim>属性_第3张图片 可以看到无论是查询单条数据还是多条数据都可以正常的查询出来 

注意点:

在我们使用标签的时候,一定要注意它的四个属性的使用,注意要添加的关键字是前缀还是后缀,以及SQL语句是否拼写错误,条件判断语句的判断条件是否正确合理。

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