[SpringBoot]xml写mapper&设置自动提示

目录

创建工程[SpringBoot框架]如何使用SpringBoot框架_万物更新_的博客-CSDN博客

 实现步骤:

设置自动提示

动态sql

 第一种批量删除 

第二种批量删除 参数为list集合

   第三种批量删除 参数为Integer... 和Array数组一样

批量插入 

动态修改 

sql片段 

 当使用MyBatis框架查询数据,自定义对象的属性名和表字段的名不一致时如何解决?

useGeneratedKeys="true" keyProperty="id"的作用


创建工程
[SpringBoot框架]如何使用SpringBoot框架_万物更新_的博客-CSDN博客

 实现步骤:

[SpringBoot]xml写mapper&设置自动提示_第1张图片

[SpringBoot]xml写mapper&设置自动提示_第2张图片

[SpringBoot]xml写mapper&设置自动提示_第3张图片

[SpringBoot]xml写mapper&设置自动提示_第4张图片

[SpringBoot]xml写mapper&设置自动提示_第5张图片

[SpringBoot]xml写mapper&设置自动提示_第6张图片

 [SpringBoot]xml写mapper&设置自动提示_第7张图片

[SpringBoot]xml写mapper&设置自动提示_第8张图片

[SpringBoot]xml写mapper&设置自动提示_第9张图片

[SpringBoot]xml写mapper&设置自动提示_第10张图片

测试:  

[SpringBoot]xml写mapper&设置自动提示_第11张图片




    
        INSERT INTO cs.product(id,title,price,num) VALUES (NULL,#{title},#{price},#{num})
    
    
    
        DELETE FROM cs.product WHERE id=#{id}
    
    
        UPDATE cs.product SET title=#{title},price=#{price},num=#{num} WHERE id=#{id}
    

设置自动提示

 在xml里面写sql语句它不提示代码是因为他不知道你要使用哪种方言,我们设置它的方言就会自动提示了。

[SpringBoot]xml写mapper&设置自动提示_第12张图片

 配置成功后颜色是蓝色

[SpringBoot]xml写mapper&设置自动提示_第13张图片

动态sql

 第一种批量删除 

foreach循环遍历标签,collection用来设置遍历对象的类型,#{id}代表的是遍历出来的每一个item里面的id,separator=","是分割符号

  //第一种批量删除
    int deleteByIds1(Integer[] ids);

    
        DELETE FROM cs.product WHERE id IN(
            #{id}
            )
    
   @Test
    void delete1(){
        Integer[] ids = {10,11,12,13};
        System.out.println(productMapper.deleteByIds1(ids));
    }

第二种批量删除 参数为list集合

    //第二种批量删除
    int deleteByIds2(List ids);
    
        DELETE FROM cs.product WHERE id IN(
        #{id}
        )
    

    @Test
    void delete2(){
        ArrayList list = new ArrayList<>();
        list.add(18);
        list.add(19);
        list.add(20);
        System.out.println(productMapper.deleteByIds2(list));
    }

   第三种批量删除 参数为Integer... 和Array数组一样

 //第三种批量删除
    int deleteByIds3(Integer... ids);
    
        DELETE FROM cs.product WHERE id IN(
        #{id}
        )
    
    @Test
    void delete3(){
        System.out.println(productMapper.deleteByIds3(21,22,23,24));
    }

批量插入 

//批量插入管理员与角色的关联数据
int insertBatch(AdminRole[] adminRoleList);
    
    
        INSERT INTO ams_admin_role
            (admin_id, role_id, gmt_create, gmt_modified)
        VALUES
            
                (#{adminRole.adminId}, #{adminRole.roleId}, #{adminRole.gmtCreate}, #{adminRole.gmtModified})
            
    

动态修改 

和上面普通修改的区别在于,如果set修改的字段没给值,那么根据实体类的包装类型会把原字段改为null,动态修改则只是给值的才修改,没给值的不会改.


把STE 改为标签会把多余的逗号去掉(因为如果修改的字段是空的话就就会多一个逗号)


if标签用来进行动态的判断,满足条件时才会生成标签体内的

  //动态修改
    int dynamicUpdate(Product product);
   
        UPDATE cs.product
        
        title=#{title},
        price=#{price},
        num=#{num}
        
        WHERE id=#{id}
    

@Test
    void dynamicUpdate(){
        Product p = new Product();
        p.setId(25);
        p.setTitle("智能语言机器人");
        System.out.println(productMapper.dynamicUpdate(p));
    }

sql片段 

定义sql片段,如果要查询的字段非常多,就可以定义为片段

    
        id,title,price,num
    
    

也许会飘红,但不影响效果

[SpringBoot]xml写mapper&设置自动提示_第14张图片

 当使用MyBatis框架查询数据,自定义对象的属性名和表字段的名不一致时如何解决?

1.如果仅仅是命名规范不一致 可以通过在application.properties里面添加以下配置解决  

# 配置自动匹配对象属性名和表字段名不一致的问题
mybatis.configuration.map-underscore-to-camel-case=true

2.通过别名的方式解决 可以解决属性名和字段名完全不一致的问题

 3.通过resultMap标签解决,比别名的好处是可以复用



    
    
    
    

useGeneratedKeys="true" keyProperty="id"的作用

 如果插入的这张表主键是自动编号的,就应该配上useGeneratedKeys="true" keyProperty="id"这两个属性,作用是获取自动编号的id值。这是一个规范。

  
        INSERT INTO ams_admin_role
            (admin_id, role_id, gmt_create, gmt_modified)
        VALUES
            
                (#{adminRole.adminId}, #{adminRole.roleId}, #{adminRole.gmtCreate}, #{adminRole.gmtModified})
            
    

比如:

[SpringBoot]xml写mapper&设置自动提示_第15张图片

[SpringBoot]xml写mapper&设置自动提示_第16张图片

[SpringBoot]xml写mapper&设置自动提示_第17张图片

[SpringBoot]xml写mapper&设置自动提示_第18张图片

你可能感兴趣的:(spring,boot,xml,java)