0-基础知识
id:唯一标识
type:映射的类型,支持别名
java里的命名规则是驼峰,而sql里面是下划线,如何对数据库表的字段起别名?
数据库表的字段名称和实体类的属性名称 不一样,则不能自动封装数据,我们提供了三种解决方法。
1、起别名:对不一样的列名起别名,让别名和实体类的属性名一样。
缺点:每次查询都要定义一次别名。
select
id, brand_name as brandName, company_name as companyName, ordered, description, status
from tb_brand;
2、 sql片段
缺点:不灵活。
id, brand_name as brandName, company_name as companyName, ordered, description, status
select
from tb_brand;
3、resultMap:
1. 定义标签。
2. 在标签中,使用resultMap属性替换 resultType属性。
如何传入参数?
#{} 会将等待输入的文本替换成? 如同preparedStatement 防止sql注入。
${}在查询的时候,我们需要使用模糊查询like。这时候只能使用此种方法。
参数类型:parameterType() 可以省略,因为传入什么就赋值什么,在接口中已经定义好了数据类型。
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区:字符比较多的时候使用,会将里面的一切都当作纯文本操作
select *
from tb_brand
where id
#{id};
创建sql的执行对象
sqlSessionFactory.openSession(true/false)
设置可以选择是否开启事务,true->自动提交 ;false->手动提交;
1-普通的查询->Mybatis的三种参数接收方式
多条件查询
参数接收:
select *
from tb_brand
where status = #{status}
and company_name like #{company_name}
and brand_name like #{brand_name}
所有配置步骤,包括三种处理参数的方法。
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提供了一套内置的标签,帮助我们进行判断。
select *
from tb_brand
status = #{status}
company_name like #{companyName}
brand_name like #{brandName}
3-插入数据
insert into tb_brand (brand_name, company_name, ordered, description, status)
values (#{brandName}, #{companyName}, #{ordered}, #{description}, #{status});
返回主键
添加关联数据时。
在订单表和订单项中,他们之间是多对多的关系。即一个订单表和多个商品表对应商品中间表外键。
每当我们插入一个商品的时候, 我们需要将商品和中间表相关联。与此同时,我们需要将订单表也进行更新,更新时我们需要知道添加的是哪件商品,所以需要返回商品的id。
看不懂?以后再来修改。
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是如何封装底层数据的
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
问题:SELinux is not supported with the overlay2 graph driver on this kernel. Either boot into a newer kernel or disable selinux in d…