1.2. 3. 4. 5. 1.list 集合 2.array 数组 6.
首先,我们需要一些配置,当然前面你自己可能已经配置好了,那么久简单来一些数据
使用sql 添加一些数据,那么我们开始吧
create table useradd(id bigint primary key auto_increment comment 'id',username varchar(50) comment '用户名',
password varchar(64) comment '密码',nickname varchar(50) comment '昵称',gender varchar(250) comment '势力'
)comment '用户' charset =utf8;
insert into useradd( username, password, nickname, gender) VALUES
('rod','123456','可莉','蒙德'),
('feng','123456','风神','蒙德'),
('gen','123456','刻晴','璃月'),
('mager','123','神里凌华','稻妻'),
('lei','123','雷电将军','稻妻'),
('chong','123','八重子','稻妻')
1.标签
mapper 接口上: ListgetByUser(UserDto dto); sql 语句上:
select from useradd where nickname=#{nickname} or gender=#{gender} 在sql 中的
里的判断,只要判断有为空,或者错误时,就不会进行条件查询了,也就是不会执行这里的sql语句了 类似于 and 所有你想全部进行条件查询 就改成 or 查询为:
@Test void getById(){ UserDto dto =new UserDto(); dto.setNickname("可莉"); dto.setGender("稻妻"); Listlist = mapper.getByUser(dto); list.forEach(System.out::println); System.out.println(" 方式的选项 类似于 and "); }
2.语句的用法
mapper 接口: ListgetWhere(UserDto dto); sql 语句:
当数值为null或" "的时候,我们依然可以进行where条件的判断,可以查询; 如果不想的话,
把 or 该成 and 就可以了,
由于参数是Java的实体类,所以我们可以把所有条件都附加上,使用时比较灵活, new一个这样的实体类,我们需要限制那个条件,只需要附上相应的值就会where这个条件,相反不去赋值同样在where中判断,但依然可以进行查询 ;
查询为:
void getById01(){ UserDto dto =new UserDto(); dto.setNickname("可莉"); dto.setGender("璃月"); Listlist = mapper.getWhere(dto); list.forEach(System.out::println); System.out.println(" 方式的选项 类似于 and "); }
3. < set > 语句的用法
mapper 接口: void updateName(UserDto dto);sql 语句:
update useradd where id=#{id} username=#{username}, password=#{password}, nickname=#{nickname}, gender=#{gender} 当在update语句中使用if标签时,如果前面的if没有执行,则或导致逗号多余错误。使用set 标签可以将动态的配置SET 关键字,和剔除追加到条件末尾的任何不相关的逗号。
没有使用if标签时,如果有一个参数为null,都会导致错误 ;使用 set+if 标签修改后,如果某项为null则不进行更新,而是保持数据库原值 ;
查询为:
@Test void getUpdateById() { UserDto dto = new UserDto(); dto.setId(7L); dto.setUsername("keq"); dto.setNickname("刻晴-雷"); dto.setGender("稻妻-神里"); dto.setPassword("456789"); mapper.updateName(dto); System.out.println("修改成功!"); Listlist = mapper.getWhere(dto); list.forEach(System.out::println); }
4.语句的用法
trim是更灵活的去处多余关键字的标签,他可以实践where和set的效果。mapper 接口: ListgetWhere02(UserDto dto); void updateName02(UserDto dto);sql 语句:
prefi= 指定代替的类型 where 用:prefixocerrides= " " 类型 里面判断类型 可以自己添加
trim 指定 < set> 的用法 : 这里就是 suffixOverrides="," 用逗号
update useradd where id=#{id} username=#{username}, password=#{password}, nickname=#{nickname}, gender=#{gender} 查询:
@Test void getById03() { UserDto dto = new UserDto(); dto.setId(7L); dto.setUsername("keq"); dto.setNickname("刻晴-雷"); dto.setGender("稻妻-神里"); dto.setPassword("456789"); mapper.updateName02(dto); System.out.println("修改成功!"); Listlist = mapper.getWhere02(dto); list.forEach(System.out::println); } 这个两个一起使用了 , trim -> 指定的类型不用,后面的类型也需要使用不同的类型
5.语句的用法 对于动态SQL 非常必须的,主是要迭代一个集合,通常是用于IN 条件。
List 实例将使用“list”做为键,数组实例以“array” 做为键。
List 集合方式的使用
Mapper 接口: ListgetList(List name); sql 语句:
查询为:
@Test void getList(){ Listlist =new ArrayList<>(); list.add("可莉"); list.add("神里凌华"); List dtos = mapper.getList(list); dtos.forEach(System.out::println); System.out.println( "list 集合 方式,多查询"); }
语句的用法 mapper 接口: ListgetArray(String[] name); sql 语句:
查询为:
@Test void getArray(){ String[] list =new String[3]; list[0] ="可莉"; list[1] ="神里凌华"; list[2] ="神里凌华527"; Listdtos = mapper.getArray(list); dtos.forEach(System.out::println); System.out.println( "Array 数组 方式,多查询"); } 这当中的 List 跟 array 是非常相似的
6.< choose > 的用法 接口: ListgetWhere03(UserDto dto); sql 语句:
查询为:
@Test void getChoos() { UserDto dto = new UserDto(); dto.setId(7L); dto.setNickname("刻晴-雷"); dto.setGender("稻妻-神里"); Listlist =mapper.getWhere03(dto); list.forEach(System.out::println); System.out.println(" 查询也跟前面也是比较相似的! "); }
有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。MyBatis提供了choose 元素,按顺序判断when中的条件出否成立,如果有一个成立,则choose结束。当choose中所有when的条件都不满则时,则执行otherwise中的sql。类似于Java 的switch 语句,choose为switch,when为case,otherwise则为default。
if 是与(and)的关系,而choose是或(or)的关系。



