JavaWeb基础知识入门-Mybatis框架的crud(一)

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: HTTP协议1.HTTP-概述2.HTTP-请求协议HTTP请求数据格式

部门管理

1.查询部门

177f3e3a2fba4e2dafe1048f23d38d1a.png

2.删除部门

8342dfd2024e47eda9e0fbddc0e84720.png

3.新增部门

faa4633667d741b6a0cdd4c2804f1131.png

797886e8068444de9bd0824f12a53dfe.png

DeptMapper

@Mapper
public interface DeptMapper {
    //查询全部部门数据
    @Select("select * from dept")
    List<Dept> list();
    //根据主键id删除
    @Delete("delete from dept where id=#{id}")
    void deleteById(Integer id);
    //新增部门
    @Insert("insert into dept (name,create_time,update_time) values (#{name},#{createTime},#{updateTime})")
    void insert(Dept dept);
    //根据id查询
    @Select("select * from dept where id=#{id}")
    Dept getById(Integer id);
    //修改部门信息
    @Update("update dept set name=#{name},update_time=#{updateTime} where id=#{id}")
    void update(Dept dept);
}

DeptService

public interface DeptService {
    //查询全部部门信息
    List<Dept> list();
     //删除部门
    void delete(Integer id);
    //新增部门
    void add(Dept dept);
   //根据id查询
    Dept getById(Integer id);
//修改部门
    void update(Dept dept);
}

DeptServiceimpl

@Service
public class DeptServiceImpl implements DeptService {
    @Autowired
    private DeptMapper deptMapper;
    //查询部门信息
    @Override
    public List<Dept> list() {
        return deptMapper.list();
    }
//删除部门信息
    @Override
    public void delete(Integer id) {
   deptMapper.deleteById(id);
    }
//新增部门
    @Override
    public void add(Dept dept) {
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());
        deptMapper.insert(dept);
    }
//根据id查询部门
    @Override
    public Dept getById(Integer id) {
return deptMapper.getById(id);
    }
//修改部门信息
    @Override
    public void update(Dept dept) {
        dept.setUpdateTime(LocalDateTime.now());
         deptMapper.update(dept);
    }

DeptController

//部门管理
@Slf4j
@RestController
@RequestMapping("/depts")
public class DeptController {
    @Autowired
    private DeptService deptService;
//  查询全部部门的数据
    @GetMapping
    public Result list() {
        log.info("查询全部部门数据");
   //调用service查询部门数据
        List<Dept> deptList =deptService.list();
        return Result.success(deptList);
    }
       //删除部门
    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Integer id){
      deptService.delete(id);
         return Result.success();
    }
//新增部门·
    @PostMapping
    public Result add(@RequestBody Dept dept){
        deptService.add(dept);
        return Result.success();
    }
    //根据id查询部门信息
         @GetMapping("/{id}")
        public Result getById(@PathVariable Integer id){
       Dept dept=deptService.getById(id);
        return Result.success(dept);
        }
//修改部门信息
    @PutMapping
    public Result update(@RequestBody Dept dept){
      deptService.update(dept);
        return Result.success();
    }


员工管理

1.分页查询

image.png

分页查询结果封装类(属性名要与前端所传属性名保持一致)

//分页查询结果封装类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {
    private Long total;//总记录数
    private List rows;//数据列表
}


Empcontroller

@Slf4j
@RestController
@RequestMapping("/emps")
public class EmpController {
    @Autowired
    private EmpService empService;
    @GetMapping
    public Result page(@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10")  Integer pageSize){
       log.info("分页查询{},{}",page,pageSize);
       //调用service分页查询
     PageBean pageBean =empService.page(page,pageSize);
        return Result.success(pageBean);
    }

Empservice

public interface EmpService {
    PageBean page(Integer page, Integer pageSize);
}

EmpServiceimpl

@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;
    @Override
    public PageBean page(Integer page, Integer pageSize) {
       //获取总记录数
Long count= empMapper.count();
        //1获取分页查询的结果列表
        Integer start=(page-1)*pageSize;
      List<Emp> empList=empMapper.page(start,pageSize);
        //封装pagebean对象
        PageBean pageBean=new PageBean(count,empList);
        return pageBean;
    }

EmpMapper

@Mapper
public interface EmpMapper {
    //查询总记录数
    @Select("select count(*) from emp")
    public Long count();
//分页查询 获取列表数据
    @Select("select * from emp limit #{start},#{pageSize}")
public List<Emp> page(Integer start,Integer pageSize);
}

在使用原始方法时会发现,分页查询步骤固定,代码繁琐,而Mybatis有专门的分页查询PageHelper插件,可以简洁高效的进行开发。


image.png

.分页查询(带条件)

引入pagehelper插件依赖

< dependency>

< groupId>com.github.pagehelper< /groupId>

< artifactId>pagehelper-spring-boot-starter< /artifactId>

< version>1.4.2< /version>

< /dependency>

EmpCOntroller

    @Autowired
    private EmpService empService;
    @GetMapping
    public Result page(@RequestParam(defaultValue = "10") Integer page,
                         @RequestParam(defaultValue = "10") Integer pageSize,
                         String name,Short gender,
                         @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
                         @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end){
        log.info("分页查询{},{},{},{},{},{}",page,pageSize,name,gender,begin,end);
        //调用service分页查询
        PageBean pageBean =empService.page(page,pageSize,name,gender,begin,end);
        return Result.success(pageBean);
    }

EmpService

//分页条件查询
    PageBean page(Integer page, Integer pageSize,String name,Short gender, LocalDate begin,LocalDate end);

EmpServiceImpl

@Override
public PageBean page(Integer page,Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {
   PageHelper.startPage(page,pageSize);
    List<Emp> empList = empMapper.list(name,gender,begin,end);
    Page<Emp> p=(Page<Emp>) empList;
    //封装pagebean对象
    PageBean pageBean=new PageBean(p.getTotal(),p.getResult());
    return pageBean;
}

Empmaapper.java

//条件查询
    //@Select("select * from emp")
    public List<Emp> list(String name,Short gender, LocalDate begin,LocalDate end);

Empmaapper.xml

 <select id="list" resultType="com.itheima.pojo.Emp">
        select id, username, password,name,gender,image,job,entrydate,
        dept_id as deptId, create_time as createTime, update_time as updateTime from emp
        <where>
            <if test="name != null and name != ''">
                name like concat('%',#{name},'%')
            </if>
            <if test="gender != null">
                and gender = #{gender}
            </if>
            <if test="begin != null and end != null">
                and entrydate between #{begin} and #{end}
            </if>
        </where>
        order by update_time desc
    </select>
3.文件上传

简介

文件上传,是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。

文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。

fc6ee32689a6497b9ecd32f883692d32.png

本地存储

在服务端,接收到上传上来的文件之后,将文件存储在本地服务器磁盘中。

文件上传的实现代码

@Slf4j
@RestController
public class UploadController {
    @PostMapping("/upload")
    public Result upload(String username, Integer age, MultipartFile image) throws Exception {
log.info("文件上传:{},{},{}",username,age,image);
//获取原始文件名
        String originalFilename = image.getOriginalFilename();
        //构造唯一文件名 不能重复uuid
        String extname=originalFilename.substring(originalFilename.lastIndexOf("."));
        //拼接新名字
        String newfilename= UUID.randomUUID().toString()+extname;
   log.info("新文件名,{}",newfilename);
//将文件存储在服务器磁盘目录中
        image.transferTo(new File("C:\\Users\\86178\\Desktop\\瑞吉外卖资料\\瑞吉外卖项目\\资料\\图片资源\\"+newfilename));
return Result.success();
    }


07713ff9fcae437ba145fe1e19ae1ea4.png

String getOriginalFilename();//获取原始文件名

void transferTo(File dest);//将接收的文件转存到磁盘文件中

long getSize(); l/获取文件的大小,单位:字节

byte] getBytes();//获取文件内容的字节数组

Ilnputsteam getlnputStream();//获取接收到的文件内容的输入流

阿里云OSS

阿里云对象存储OSS (0bject Storage Service),是一款海量、安全、低成本、高可靠的云存储服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。

469f58a766b9486cb7b473ebddcffe10.png

引入阿里云AliOSSUtils工具类

 /**
 * 阿里云 OSS 工具类
 */
@Component
public class AliOSSUtils {
    private String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    private String accessKeyId = "***********";
    private String accessKeySecret = "************";
    private String bucketName = "hmleadnews-tlias";
    /**
     * 
     * 
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();
        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);
        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }
}

文件上传和下载的实现UploadController

@Slf4j
@RestController
public class UploadController {
    @Autowired
    private AliOSSUtils aliOSSUtils;
@PostMapping("/upload")
public Result upload(MultipartFile image) throws IOException {
    log.info("文件上传, 文件名: {}", image.getOriginalFilename());
    //调用阿里云OSS工具类进行文件上传
    String url = aliOSSUtils.upload(image);
    log.info("文件上传完成,文件访问的url: {}", url);
    return Result.success(url);
}
}
4.删除员工


61711e63151d44578fa3857ddef78f26.png

5.新增员工


ce1d110137d041f9802e3c1db78ca439.png

6.修改员工

查询回显


1a6d15e0ea5b4b51a8b51f689ec51a66.png

修改员工信息

aebf83e87fc14c018b1bb5f61c08fd74.png

EmpControoler

//删除员工
@DeleteMapping("/{ids}")
    public Result delete(@PathVariable List<Integer> ids){
        log.info("批量删除{}",ids);
        empService.delete(ids);
return Result.success();
}
//新增员工
@PostMapping
    public Result save(@RequestBody Emp emp){
        log.info("新增员工{}",emp);
        empService.save(emp);
        return Result.success();
}
//根据id查询员工
    @GetMapping("/{id}")
    public Result getById(@PathVariable Integer id){
        log.info("根据id查询员工信息,{}",id);
        Emp emp=empService.getById(id);
        return Result.success(emp);
    }
//修改部门信息
    @PutMapping
    public Result update(@RequestBody Emp emp){
        log.info("更新员工信息,{}",emp);
        empService.update(emp);
return Result.success();
    }

EmpService

//批量删除
    void delete(List<Integer> ids);
//新增员工
    void save(Emp emp);
//根据id查询
    Emp getById(Integer id);
//修改员工信息
    void update(Emp emp);

EmpServceImpl

//删除员工
    @Override
    public void delete(List<Integer> ids) {
        empMapper.delete(ids);
    }
//新增员工信息
    @Override
    public void save(Emp emp) {
  emp.setCreateTime(LocalDateTime.now());
  emp.setUpdateTime(LocalDateTime.now());
  empMapper.insert(emp);
    }
//根据id查询
    @Override
    public Emp getById(Integer id) {
        return empMapper.getById(id);
    }
//修改员工信息
    @Override
    public void update(Emp emp) {
        emp.setUpdateTime(LocalDateTime.now());
        empMapper.update(emp);
    }

EmpMapper.java

    //批量删除
    void delete(List<Integer> ids);
    //新增员工信息
@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})")
    void insert(Emp emp);
//根据id查询
@Select("select * from emp where id=#{id}")
    Emp getById(Integer id);
//修改员工信息
    void update(Emp emp);

EmpMapper.xml

<!--批量删除-->
    <delete id="delete">
        delete from emp where id in
        <foreach collection="ids" item="id" separator="," open="(" close=")">#{id}</foreach>
</delete>
<!-- 修改员工信息-->
    <update id="update">
update emp
<set>
        <if test="username!=null and username!=''">username=#{username},</if>
        <if test="password!=null and password!=''">password=#{password},</if>
        <if test="name!=null and name!=''">name=#{name},</if>
        <if test="gender!=null">gender=#{gender},</if>
        <if test="image!=null and image!=''">image=#{image},</if>
        <if test="job!=null">job=#{job},</if>
        <if test="entrydate!=null">entrydate=#{entrydate},</if>
        <if test="deptId!=null">dept_id=#{deptId},</if>
        <if test="updateTime!=null">update_time=#{updateTime}</if>
</set>
where id=#{id}
    </update>

配置文件

de0b5148ea284a28aefe8240862a5665.png

86e90f1fbb77467d847c7cbf39b975f7.png

9710108fe5e24ba68aa55509b9e153c5.png


2e50440ba904430781663b0c0c76d059.png

ab90f1a2072b415bab91dc9e664d743e.png

工具类中通过get可以获取所配置的属性值


229a700b97df4fae81df282f5805d0e8.png美好的一天到此结束,下次继续努力!

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
1月前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
43 1
持久层框架MyBatisPlus
|
2月前
|
SQL Java 数据库连接
MyBatis-Plus:简化 CRUD 操作的艺术
MyBatis-Plus 是一个基于 MyBatis 的增强工具,它旨在简化 MyBatis 的使用,提高开发效率。
80 1
MyBatis-Plus:简化 CRUD 操作的艺术
|
2月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
501 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
3月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
2月前
|
SQL Java 数据库连接
Mybatis入门(select标签)
这篇文章介绍了Mybatis中`select`标签的基本用法及其相关属性,并通过示例展示了如何配置和执行SQL查询语句。
52 0
Mybatis入门(select标签)
|
2月前
|
缓存 Cloud Native 安全
探索阿里巴巴新型ORM框架:超越MybatisPlus?
【10月更文挑战第9天】在Java开发领域,Mybatis及其增强工具MybatisPlus长期占据着ORM(对象关系映射)技术的主导地位。然而,随着技术的发展,阿里巴巴集团推出了一种新型ORM框架,旨在提供更高效、更简洁的开发体验。本文将对这一新型ORM框架进行探索,分析其特性,并与MybatisPlus进行比较。
50 0
|
2月前
|
SQL Java 数据库连接
Mybatis方式完成CRUD操作
Mybatis方式完成CRUD操作
52 0
|
3月前
|
SQL Java 数据库连接
JavaWeb基础3——Maven基础&MyBatis
构建工具Maven、Maven安装配置、基本使用、IDEA使用Maven、依赖管理、插件、Mybatis、核心配置文件mybatis-config.xml、Mapper代理开发、配置文件实现增删改查、Mybatis参数传递、注解实现增删改查
JavaWeb基础3——Maven基础&MyBatis
|
4月前
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
277 0
|
4月前
|
SQL Java 数据库连接
【Java 第十三篇章】MyBatis 框架介绍
MyBatis 原名 iBATIS,2001 年由 Clinton Begin 创建,以其简易灵活著称。2010 年更名以重塑品牌形象。MyBatis 通过 SQL 映射文件将 SQL 语句与 Java 代码分离,支持编写原生 SQL 并与方法映射。具备对象关系映射功能,简化数据库记录处理。支持动态 SQL 构建,灵活应对不同查询条件。内置缓存机制,提升查询效率。相比全功能 ORM,MyBatis 提供更高 SQL 控制度和更好的维护性,并易于与 Spring 等框架集成,广泛应用于 Java 数据访问层。
44 0
下一篇
DataWorks