当前位置: 首页 > news >正文

JavaWeb 课堂笔记 —— 15 MyBatis 基础操作

本系列为笔者学习JavaWeb的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程,实现javaweb企业开发全流程(涵盖Spring+MyBatis+SpringMVC+SpringBoot等)》,章节分布参考视频教程,为同样学习JavaWeb系列课程的同学们提供参考。

根据资料中提供的《tlias智能学习辅助系统》页面原型及需求,完成员工管理的需求开发。

在这里插入图片描述

01 准备工作

  • 创建一个新的springboot工程,选择引入对应的起步依赖(mybatismysql驱动、lombok)
  • 创建对应的实体类Emp(实体类属性采用驼峰命名)
  • application.properties中引入数据库连接信息
  • 准备Mapper接口EmpMapper

在这里插入图片描述

在这里插入图片描述

Emp.java

package com.itheima.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.time.LocalDateTime;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {private Integer id;private String username;private String password;private String name;private Short gender;private String image;private Short job;private LocalDate entrydate;private Integer deptId;private LocalDateTime createTime;private LocalDateTime updateTime;
}

02 删除

在这里插入图片描述

在这里插入图片描述

注:如果mapper接口方法形参只有一个普通类型的参数,#{...}里面的属性名可以随便写,比如#{id}、#{value}

EmpMapper.java

package com.itheima.mapper;import org.apache.ibatis.annotations.*;@Mapper
public interface EmpMapper {@Delete("delete from emp where id = #{id}")public void delete(Integer id);
}

SpringbooyMybatisCrudApplicationTests.java

package com.itheima;import com.itheima.mapper.EmpMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class SpringbootMybatisCrudApplicationTests {@Autowiredprivate EmpMapper empMapper;@Testpublic void testDelete(){empMapper.delete(17);}}

03 日志输出

application.proporties

#指定mybatis输出日志的位置,输出控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

在这里插入图片描述

在这里插入图片描述

04 预编译SQL

预编译SQL的性能更高,更安全。

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

05 参数占位符

在这里插入图片描述

06 新增

EmpMapper.java

package com.itheima.mapper;import org.apache.ibatis.annotations.*;@Mapper
public interface EmpMapper {@Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time) values(#{username}, #{name}, #{gender}, #{image}, #{job}, #{entrydate}, #{deptId}, #{createTime}, #{updateTime})")public void insert(Emp emp);
}

SpringbooyMybatisCrudApplicationTests.java

package com.itheima;import com.itheima.mapper.EmpMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class SpringbootMybatisCrudApplicationTests {@Autowiredprivate EmpMapper empMapper;@Testpublic void testInsert(){Emp emp = new Emp();emp.setUsername("Tom");emp.setName("汤姆");emp.setImage("1.jpg");emp.setGender((short)1);emp.setJob((short)1);emp.setEntrydate(LocalDate.of(2000, 1, 1));emp.setDeptId(1);emp.setCreateTime(LocalDateTime.now());emp.setUpdateTime(LocalDateTime.now());empMapper.insert(emp);}
}

主键返回是指在数据添加成功后,需要获取插入数据库数据的主键。eg.添加套餐数据时,需要维护套餐菜品关系表数据。

在这里插入图片描述

在这里插入图片描述

07 更新

EmpMapper.java

package com.itheima.mapper;import org.apache.ibatis.annotations.*;@Mapper
public interface EmpMapper {@Update("update emp set username=#{username}, name=#{name}, gender=#{gender}, image=#{image}, job=#{job}, entrydate=#{entrydate}, dept_id=#{deptId}, create_time=#{createTime}, updateTime=#{updateTime} where id=#{id}")public void update(Emp emp);
}

SpringbooyMybatisCrudApplicationTests.java

package com.itheima;import com.itheima.mapper.EmpMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class SpringbootMybatisCrudApplicationTests {@Autowiredprivate EmpMapper empMapper;@Testpublic void testUpdate(){Emp emp = new Emp();emp.setId(18); //1 ⭐emp.setUsername("Tom1"); //2emp.setName("汤姆1"); //3emp.setImage("1.jpg");emp.setGender((short)1);emp.setJob((short)1);emp.setEntrydate(LocalDate.of(2000, 1, 1));emp.setDeptId(1);emp.setCreateTime(LocalDateTime.now());emp.setUpdateTime(LocalDateTime.now());empMapper.update(emp); //执行更新员工操作}
}

08 查询

EmpMapper.java

package com.itheima.mapper;import org.apache.ibatis.annotations.*;@Mapper
public interface EmpMapper {@Select("select * from emp where id=#{id}")public Emp getById(Integer id);//数据封装//方案一:给数据起别名,让别名与实体类属性名一致@Select("select username, name, gender, image, job, entrydate, dept_id deptId, create_time createTime, update_time updateTime from emp where id=#{id}")public Emp getById(Integer id);//方案二:通过@results,@Result注解手动映射封装@Results({@Result(column = "dept_id", proporty = "deptId"),@Result(column = "create_time", proporty = "createTime"),@Result(column = "update_time", proporty = "updateTime")})@Select("select * from emp where id=#{id}")public Emp getById(Integer id);//方案三:proporties文件中开启mybatis的驼峰命名自动映射开关
}
#a_column ————> aColumn
mybatis.configuration.map-underscore-to-camel-case=true

SpringbooyMybatisCrudApplicationTests.java

package com.itheima;import com.itheima.mapper.EmpMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class SpringbootMybatisCrudApplicationTests {@Autowiredprivate EmpMapper empMapper;@Testpublic void testSelect(){Emp emp = empMapper.getById(1);System.out.printLn(emp);}
}

数据封装是指实体类属性名和数据库表查询返回的字段名已知,mybatis会自动封装,不一致,则不能自动封装。

在这里插入图片描述

09 条件查询

在这里插入图片描述

select * from emp where name like '%张%' and gender = 1 and entryDate between '2010-01-01' and '2020-01-01' order by undate_time desc;
concat('hello', 'MySQL');select * from emp where name like concat('%', '张', '%') and gender = 1 and entryDate between '2010-01-01' and '2020-01-01' order by update_time desc;

EmpMapper.java

package com.itheima.mapper;import org.apache.ibatis.annotations.*;@Mapper
public interface EmpMapper {@Select("select * from emp where name like '%${name}%' and gender = #{gender} and entryDate between #{begin} and #{end} order by undate_time desc")public List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);
}

SpringbooyMybatisCrudApplicationTests.java

package com.itheima;import com.itheima.mapper.EmpMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class SpringbootMybatisCrudApplicationTests {@Autowiredprivate EmpMapper empMapper;@Testpublic void testList(){List<Emp> empList = empMapper.list("张", (short)1, LocalDate.of(2010, 1, 1), LocalDate.of(2020, 1, 1));System.out.println(empList);}
}

相关文章:

  • PG psql --single-transaction 参数功能
  • JavaScript 位掩码常量教程
  • Python range 使用详解
  • Oracle--用户管理
  • React 路由入门秘籍:BrowserRouter 的江湖之道
  • C++STL教程入门
  • python生成项目依赖文件requirements.txt
  • Rocky Linux 9.1 修改网卡和DNS
  • 操作系统中的虚拟化技术深度对话
  • 认知升级:把握人工智能教育化转型的历史机遇
  • trae海外版无限流白嫖指南,解决有限流,总提示在排队难题
  • 主机运行状态的监控命令(top命令)
  • React基础知识(补充中)
  • 19. git reflog
  • GIS开发笔记(9)结合osg及osgEarth实现三维球经纬网格绘制及显隐
  • Nginx静态资源跳转添加权限验证
  • optool为macho文件增加动态库
  • 从零创建 Docker 镜像(基于 OCI 格式)
  • Datawhale 春训营 创新药赛道
  • Linux 进程概念补充 (自用)
  • 广电总局加快布局超高清视听产业链,多项成果亮相
  • 消息人士称哈马斯愿与以色列达成长期停火
  • 上海明天有雷雨、大风,下周气温在春日舒适区间
  • 建投读书会·东西汇流|西风东渐中的上海营造
  • 摩根大通首席执行官:贸易战损害美国信誉
  • 许志强评《伐木》|伯恩哈德的文人共和国