@Test
public void showInfo02() throws IOException {
UserMapper userMapper = (UserMapper) MyBatisUtils.getMapper(UserMapper.class);
List userList = userMapper.selectAllUser();
for (User u:userList){
System.out.println(u);
}
}
2.一对多查询
UserMapper.java
List selectUserOrderList();
UserMapper.xml
Test类
@Test
public void showInfo03() throws IOException{
UserMapper userMapper = (UserMapper) MyBatisUtils.getMapper(UserMapper.class);
List userList = userMapper.selectUserOrderList();
for (User u: userList){
System.out.println(u);
}
}
3.嵌套一对一
UserMapper.java
List selectQianOneToOne();
CardMapper.java
List selectCard (Integer uid);
UserMapper.xml
CardMapper.xml
Test类
@Test
public void showInfo08() throws IOException {
UserMapper userMapper = (UserMapper) MyBatisUtils.getMapper(UserMapper.class);
List userList = userMapper.selectQianOneToOne();
for (User u : userList){
System.out.println(u);
}
}
4.嵌套一对多查询
UserMapper.java
List selectQianOneToMany();
OrderMapper.java
List selectOrder(Integer uid);
UserMapper.xml
OrderMapper.xml
Test类
@Test
public void showInfo09() throws IOException{
OrderMapper orderMapper = (OrderMapper) MyBatisUtils.getMapper(OrderMapper.class);
List orderList = orderMapper.selectOrder(45);
for (Order a: orderList) {
System.out.println(a);
}
}
5.关系总结
5.1 < if >
UserMapper.java
List selectByNameAndSex(@Param("username") String username, @Param("sex") String sex);
UserMapper.xml
Test类
@Test
public void showInfo10() throws IOException {
UserMapper userMapper = (UserMapper) MyBatisUtils.getMapper(UserMapper.class);
List userList = userMapper.selectByNameAndSex("小二王","女");
System.out.println(userList);
}
5.2 < where >
UserMapper.java
List selectBySex(@Param("username") String username, @Param("sex") String sex);
UserMapper.xml
Test类
@Test
public void showInfo11() throws IOException {
UserMapper userMapper = (UserMapper) MyBatisUtils.getMapper(UserMapper.class);
List userList = userMapper.selectBySex("小二王","女");
for (User u :userList) {
System.out.println(u);
}
}
5.3 choose
UserMapper.java
List selectBySex(@Param("username") String username, @Param("sex") String sex);
UserMapper.xml
Test类
@Test
public void showInfo11() throws IOException {
UserMapper userMapper = (UserMapper) MyBatisUtils.getMapper(UserMapper.class);
List userList = userMapper.selectBySex("小二王","女");
for (User u :userList) {
System.out.println(u);
}
}
5.4 < set >
UserMapper.java
int updateUser(User user);
UserMapper.xml
update `user`
username =#{username},
sex =#{sex},
birthday =#{birthday},
address =#{address},
where id = #{id}
Test类
@Test
public void showInfo12() throws IOException {
UserMapper userMapper = (UserMapper) MyBatisUtils.getMapper(UserMapper.class);
User user = new User();
user.setId(76);
user.setUsername("卢伟亮");
user.setBirthday(new Date());
user.setSex(null);
user.setAddress(null);
int num = userMapper.updateUser(user);
System.out.println(num);
MyBatisUtils.commit();
}
5.5 < trim >
UserMapper.java
int updateUserById(User user);
UserMapper.xml
update `user`
username =#{username},
sex =#{sex},
birthday =#{birthday},
address =#{address},
Test类
@Test
public void showInfo13() throws IOException {
UserMapper userMapper = (UserMapper) MyBatisUtils.getMapper(UserMapper.class);
User user = new User();
user.setId(76);
user.setUsername("卢小宝");
user.setBirthday(new Date());
user.setSex(null);
user.setAddress(null);
int num = userMapper.updateUserById(user);
System.out.println(num);
MyBatisUtils.commit();
}
5.6 < foreach >的批量查询
5.6.1 参数名了解
参数 描述 取值
collection 容器类型 list、array、map
open 起始符 (
close 结束符 )
separator 分隔符 ,
index 下标号 从0开始,依次递增
item 当前项 任意名称(循环中通过 #{任意名称} 表达式访问)
UserMapper.java
List selectByArrayMap(Map map);
UserMapper.xml
Test类
@Test
public void showInfo16() throws IOException {
UserMapper userMapper = (UserMapper) MyBatisUtils.getMapper(UserMapper.class);
Map map = new HashMap();
List li = new ArrayList();
li.add(41);
li.add(42);
li.add(43);
map.put("ids",li);
List userList = userMapper.selectByArrayMap(map);
for (User u :userList) {
System.out.println(u);
}
}
@Test
public void showInfo17() throws IOException {
UserMapper userMapper = (UserMapper) MyBatisUtils.getMapper(UserMapper.class);
List userList = new ArrayList();
User u1 = new User();
u1.setUsername("ll");
u1.setAddress("kk");
u1.setBirthday(new Date());
u1.setSex("男");
User u2 = new User();
u2.setUsername("ll");
u2.setAddress("kk");
u2.setBirthday(new Date());
u2.setSex("男");
userList.add(u1);
userList.add(u2);
int num = userMapper.addUser(userList);
System.out.println(num);
MyBatisUtils.commit();
}
5.8 < foreach >** 的批量删除
UserMapper.java
int deleteByUid(List list);
UserMapper.xml
delete
from `user` where
#{ik}
Test类
@Test
public void showInfo18() throws IOException {
UserMapper userMapper = (UserMapper) MyBatisUtils.getMapper(UserMapper.class);
List li = new ArrayList();
li.add(41);
li.add(42);
li.add(43);
int num = userMapper.deleteByUid(li);
System.out.println(num);
MyBatisUtils.commit();
}
public List selectAllUsers1(User user); // ${name} ${id} 可获取user中的属性值
public List selectAllUsers2(@Param("rule") String rule); //必须使用@Param否则会作为属性解析
User user = new User(....);
List ulist1 = userDAO.selectAllUsers1(user); //调用时传入user对象
List ulist2 = userDao.selectAllUsers2("desc"); //调用时传入asc | desc
10.2 $符号注入攻击
SELECT * FROM t_user
WHERe name = '${name}'
注入攻击,拼接的内容,改变了原sql语义,被攻击!
ps:数据库表
;
;
;
;
;
;
CREATE DATABASE `mybatis-one` ;
USE `mybatis-one`;
DROP TABLE IF EXISTS `actor`;
CREATE TABLE `actor` (
`aid` int(11) NOT NULL AUTO_INCREMENT,
`aname` varchar(20) COLLATE utf8_czech_ci DEFAULT NULL,
PRIMARY KEY (`aid`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
insert into `actor`(`aid`,`aname`) values (1,'杨幂'),(2,'杨颖');
DROP TABLE IF EXISTS `card`;
CREATE TABLE `card` (
`cid` int(4) NOT NULL AUTO_INCREMENT,
`cnumid` varchar(20) COLLATE utf8_czech_ci DEFAULT NULL,
`uid` int(4) DEFAULT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
insert into `card`(`cid`,`cnumid`,`uid`) values (1,'1234',45),(2,'6789',46);
DROP TABLE IF EXISTS `order`;
CREATE TABLE `order` (
`oid` int(11) NOT NULL AUTO_INCREMENT,
`oname` varchar(20) COLLATE utf8_czech_ci DEFAULT NULL,
`onum` int(11) DEFAULT NULL,
`uid` int(11) DEFAULT NULL,
PRIMARY KEY (`oid`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
insert into `order`(`oid`,`oname`,`onum`,`uid`) values (1,'坚果',20,45),(2,'书籍',30,46),(3,'衣服',1,45);
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
`rid` int(11) NOT NULL AUTO_INCREMENT,
`rname` varchar(20) COLLATE utf8_czech_ci DEFAULT NULL,
PRIMARY KEY (`rid`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
insert into `role`(`rid`,`rname`) values (1,'宫女'),(2,'皇后'),(3,'太监');
DROP TABLE IF EXISTS `u_r`;
CREATE TABLE `u_r` (
`u_r_id` int(11) NOT NULL AUTO_INCREMENT,
`aid` int(11) DEFAULT NULL,
`rid` int(11) DEFAULT NULL,
PRIMARY KEY (`u_r_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
insert into `u_r`(`u_r_id`,`aid`,`rid`) values (1,1,1),(2,1,2);
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` datetime DEFAULT NULL COMMENT '生日',
`sex` char(1) DEFAULT NULL COMMENT '性别',
`address` varchar(256) DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=77 DEFAULT CHARSET=utf8;
insert into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (41,'李东','2020-08-25 20:44:41','男','hh'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),(45,'小黑','2018-03-04 12:04:06','男','北京金燕龙'),(46,'老王','2018-03-07 17:37:26','男','北京'),(76,'dfff','2020-08-22 21:23:26','男','ddd');
;
;
;
;