MyBatis的CRUD

0-基础知识

        id:唯一标识

        type:映射的类型,支持别名

java里的命名规则是驼峰,而sql里面是下划线,如何对数据库表的字段起别名?

        数据库表的字段名称和实体类的属性名称 不一样,则不能自动封装数据,我们提供了三种解决方法。

1、起别名:对不一样的列名起别名,让别名和实体类的属性名一样。

 缺点:每次查询都要定义一次别名。

  

2、 sql片段

缺点:不灵活。

    
         id, brand_name as brandName, company_name as companyName, ordered, description, status
     

     

 3、resultMap:

1. 定义标签。

 2. 在 select * from tb_user where id = #{};

        //随后通过代理对象调用接口中的方法,Mybatis会自动寻找到xml配置文件中相对应的sql语句并执行
        //List brands = brandMapper.selectAll();
        brand brand = brandMapper.selectByID(id);
        System.out.println(brand);

    特殊字符处理:小于号< 不可以直接食用
    1、转义字符< 相当于小于号,字符比较少的时候使用
    2、CDATA区:字符比较多的时候使用,会将里面的一切都当作纯文本操作

    

创建sql的执行对象

sqlSessionFactory.openSession(true/false) 

设置可以选择是否开启事务,true->自动提交 ;false->手动提交;

1-普通的查询->Mybatis的三种参数接收方式 

多条件查询MyBatis的CRUD_第1张图片

参数接收:

    

所有配置步骤,包括三种处理参数的方法。 

1、散装参数:如果方法中由多个参数,需要使用@param(sql语句占位符名称) 

@Interface
    List selectByCondition(@Param("status")int status,@Param("companyName") String company_name,@Param("brandName")String bramd_name);
@Test
List brands = brandMapper.selectByCondition(status, companyName, brandName);

  2、对象参数:对象属性名称要和参数占位符名称保持一致

@Interface 
List selectByCondition(brand brand);
@Test
List brands = brandMapper.selectByCondition(brand);

3、map集合参数:保证sql中参数名和map集合里面的健的名称对应的上,即可设置成功。

@Interface
List selectByCondition(Map map);
@Test
List brands = brandMapper.selectByCondition(map);

封装数据的过程

        //设置参数
        int status=1;
        String company_name="华为";
        String brand_name="华为";

        //处理参数,用作模糊处理
        company_name="%"+company_name+"%";
        brand_name ="%"+company_name+"%";


        //创建map集合
        Map map=new HashMap();
        map.put("status",status);
        map.put("company_name",company_name);
        map.put("brand_name",brand_name);

        //封装对象
        brand brand=new brand();
        brand.setStatus(status);
        brand.setCompany_name(company_name);
        brand.setBrand_name(brand_name);

2- 动态查询

有一些查询,我们并不要求所有的选项都被用户输入,一旦出现了数据为null的情况,无法从表中查询到有效的数据。

基于此情况,我们需要随着sql语句的变化进行修改,也就是switch判断。Mybatis提供了一套内置的标签,帮助我们进行判断。MyBatis的CRUD_第2张图片


3-插入数据

    
        insert into tb_brand (brand_name, company_name, ordered, description, status)
        values (#{brandName}, #{companyName}, #{ordered}, #{description}, #{status});
    

 返回主键

添加关联数据时。

在订单表和订单项中,他们之间是多对多的关系。即一个订单表和多个商品表对应商品中间表外键。

每当我们插入一个商品的时候, 我们需要将商品和中间表相关联。与此同时,我们需要将订单表也进行更新,更新时我们需要知道添加的是哪件商品,所以需要返回商品的id。

看不懂?以后再来修改。

MyBatis的CRUD_第3张图片

 4-修改数据

在测试类中,我们仅仅对部分数据进行修改,其他保持不变,并对数据封装后提交给方法。这样会让不想修改的数据变成null。为了解决这个问题,我们可以使用标签在配置文件中前进行筛选。


        update tb_brand
        
            
                brand_name = #{brandName},
            
            
                company_name = #{companyName},
            
            
                ordered = #{ordered},
            
            
                description = #{description},
            
            
                status = #{status}
            
        
        where id = #{id};
    

5-删除数据

删除一个数据

    
        delete from tb_brand where id = #{id};
    

批量删除

把选中的id值提交给代码,代码挨个去删除。我们会把待删除的id封装成数组,随后按照顺序一个个删除。

Mbatis中配置了遍历数组的标签,我们随着遍历,随着将获取到的数据放到?处。

我们需要使用seperate将每个输入的?分隔开。

我们同样open=“” close=“”表示开始和结束的时候拼接什么。
Please Attention 

Mybatis会自动的将我们传递去的数组封装成一个map集合.

默认array=你传递的数组数据.

你可以使用@Param注解来改变map集合默认key的名称。

    
        delete from tb_brand where id
        in
            
                #{id}
            
             ;
    

6-Mybatis参数传递-Mybatis是如何封装底层数据的

你可能感兴趣的:(JavaWeb,mybatis,java,mysql)