• MyBatis基础操作


    准备工作:

            准备数据库表emp

    1. -- 部门管理
    2. create table dept(
    3. id int unsigned primary key auto_increment comment '主键ID',
    4. name varchar(10) not null unique comment '部门名称',
    5. create_time datetime not null comment '创建时间',
    6. update_time datetime not null comment '修改时间'
    7. ) comment '部门表';
    8. insert into dept (id, name, create_time, update_time) values(1,'学工部',now(),now()),(2,'教研部',now(),now()),(3,'咨询部',now(),now()), (4,'就业部',now(),now()),(5,'人事部',now(),now());
    9. -- 员工管理
    10. create table emp (
    11. id int unsigned primary key auto_increment comment 'ID',
    12. username varchar(20) not null unique comment '用户名',
    13. password varchar(32) default '123456' comment '密码',
    14. name varchar(10) not null comment '姓名',
    15. gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',
    16. image varchar(300) comment '图像',
    17. job tinyint unsigned comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师',
    18. entrydate date comment '入职时间',
    19. dept_id int unsigned comment '部门ID',
    20. create_time datetime not null comment '创建时间',
    21. update_time datetime not null comment '修改时间'
    22. ) comment '员工表';
    23. INSERT INTO emp
    24. (id, username, password, name, gender, image, job, entrydate,dept_id, create_time, update_time) VALUES
    25. (1,'jinyong','123456','金庸',1,'1.jpg',4,'2000-01-01',2,now(),now()),
    26. (2,'zhangwuji','123456','张无忌',1,'2.jpg',2,'2015-01-01',2,now(),now()),
    27. (3,'yangxiao','123456','杨逍',1,'3.jpg',2,'2008-05-01',2,now(),now()),
    28. (4,'weiyixiao','123456','韦一笑',1,'4.jpg',2,'2007-01-01',2,now(),now()),
    29. (5,'changyuchun','123456','常遇春',1,'5.jpg',2,'2012-12-05',2,now(),now()),
    30. (6,'xiaozhao','123456','小昭',2,'6.jpg',3,'2013-09-05',1,now(),now()),
    31. (7,'jixiaofu','123456','纪晓芙',2,'7.jpg',1,'2005-08-01',1,now(),now()),
    32. (8,'zhouzhiruo','123456','周芷若',2,'8.jpg',1,'2014-11-09',1,now(),now()),
    33. (9,'dingminjun','123456','丁敏君',2,'9.jpg',1,'2011-03-11',1,now(),now()),
    34. (10,'zhaomin','123456','赵敏',2,'10.jpg',1,'2013-09-05',1,now(),now()),
    35. (11,'luzhangke','123456','鹿杖客',1,'11.jpg',5,'2007-02-01',3,now(),now()),
    36. (12,'hebiweng','123456','鹤笔翁',1,'12.jpg',5,'2008-08-18',3,now(),now()),
    37. (13,'fangdongbai','123456','方东白',1,'13.jpg',5,'2012-11-01',3,now(),now()),
    38. (14,'zhangsanfeng','123456','张三丰',1,'14.jpg',2,'2002-08-01',2,now(),now()),
    39. (15,'yulianzhou','123456','俞莲舟',1,'15.jpg',2,'2011-05-01',2,now(),now()),
    40. (16,'songyuanqiao','123456','宋远桥',1,'16.jpg',2,'2010-01-01',2,now(),now()),
    41. (17,'chenyouliang','123456','陈友谅',1,'17.jpg',NULL,'2015-03-21',NULL,now(),now());

            创建一个新的spring boot工程,选择引入对应的起步依赖(mybatis、mysql驱动、Lombok)

            application.properties中引入数据库连接信息

    1. #驱å¨ç±»åç§°
    2. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    3. #æ°æ®åºè¿æ¥çurl
    4. spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
    5. #è¿æ¥æ°æ®åºçç¨æ·å
    6. spring.datasource.username=root
    7. #è¿æ¥æ°æ®åºçå¯ç 
    8. spring.datasource.password=1234

            创建对应的实体类Emp(实体类属性采用驼峰命名)   

            准备Mapper接口EmpMapper

    1. package com.itheima.mapper;
    2. import org.apache.ibatis.annotations.*;
    3. @Mapper
    4. public interface EmpMapper {
    5. }

    根据主键删除

    接口方法:

    1. @Mapper
    2. public interface EmpMapper {
    3. @Delete("delete from emp where id=#{id}")
    4. public void delete(Integer id);
    5. }
    mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

    日志输出:

            可以在application。properties中,打开mybatis的日志,并指定输出到控制台

    mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
    

     预编译SQL

            优势:性能更高

            更安全(防止SQL注入)

    SQL注入师通过操作输入的数据来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法

    参数占位符

    #{...}:

            执行SQL时,会将#{...}替换为?,生成预编译SQL,会自动设置参数值

            使用时机:参数传递,都使用#{...}

    ${...}:

            拼接SQL,直接将参数拼接在SQL语句中,存在SQL注入问题

            使用时机:如果对表名、列表进行动态设置时使用

    新增

    SQL语句

    1. insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time)
    2. value ('tom', '汤姆', 1, '1.jpg', 1, 2002 - 12 - 12, now(), now());

    接口方法:

    1. @Insert("insert into emp(username, name, gender, image, job, entrydate, create_time, update_time)" +
    2. " value (#{usename}, #{name},#{gender}, #{image}, #{job},#{CreatTime}, #{Update Time});")
    3. public void insert(Emp emp);

     新增(主键返回)

            描述:在数据添加成功后,需要获取插入数据库的主键

               如:添加套餐数据时,还需要维护套餐菜品关系表数据

    实现:

    1. @Options(useGeneratedKeys = true, keyProperty = "id")
    2. @Insert("insert into emp(username, name, gender, image, job, entrydate, create_time, update_time)" +
    3. " value (#{usename}, #{name},#{gender}, #{image}, #{job},#{CreatTime}, #{Update Time});")
    4. public void insert(Emp emp);

     SQL语句:

     接口方法:

     查询(根据ID)

    接口方法:

     数据封装

            实体类属性名和数据库表查询返回的字段名一致,mybatis会自动封装

            如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装

    方案一:给字段起别名,让别名与实体类属性一致

     方案二:通过@Results,@Result注解手动映射封装

     方案三:开启mybatis的驼峰命名自动映射开关

     查询(根据条件)

    解决like模糊匹配预编译的问题:

            使用concat()函数:         

  • 相关阅读:
    30秒完成在Docker Desktop中搭建kafka----你肯定没我快
    MongoDB聚合查询重复值并做标记404处理
    G4012溧宁高速青云岭隧道隧道高清晰广播现场测试效果视频
    EMI测试的应用及相关的测试标准
    Chart.xkcd图表库
    探究美颜算法:直播实时美颜SDK的集成和定制
    JavaScript【History 对象、Cookie 对象 、封装cookie操作、apply、call和bind函数、面向对象简介、new 命令】(十八)
    SQL Server 2012下载和安装配置详细教程手册
    web常见页面错误
    Linux系统编程·进程创建及终止
  • 原文地址:https://blog.csdn.net/jbykmzls/article/details/132709008