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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储OSS,敏感数据保护2.0 200GB 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美好的一天到此结束,下次继续努力!

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
相关文章
|
8月前
|
SQL 缓存 Java
【吐血整理】MyBatis从入门到精通
本文介绍了 MyBatis 的使用指南,涵盖开发环境搭建、基础操作实例和进阶特性。首先,详细描述了 JDK 和 IDE 的安装及依赖引入,确保项目顺利运行。接着,通过创建用户表和实体类,演示了 CRUD 操作的全流程,包括查询、插入、更新和删除。最后,深入探讨了动态 SQL 和缓存机制等高级功能,帮助开发者提升数据库交互效率和代码灵活性。掌握这些内容,能显著提高 Java 编程中的数据库操作能力。
1132 4
|
4月前
|
SQL XML Java
菜鸟之路Day33一一Mybatis入门
本文是《菜鸟之路Day33——Mybatis入门》的教程,作者blue于2025年5月18日撰写。文章介绍了MyBatis作为一款优秀的持久层框架,如何简化JDBC开发。通过创建SpringBoot工程、数据库表`user`及实体类`User`,引入MyBatis依赖并配置数据库连接信息,使用注解方式编写SQL语句实现查询所有用户数据的功能。此外,还展示了如何通过Lombok优化实体类代码,减少冗余的getter/setter等方法,提高开发效率。最后通过单元测试验证功能的正确性。
156 19
|
6月前
|
XML Java 数据库连接
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
195 21
|
6月前
|
Java 关系型数据库 数据库连接
Javaweb之Mybatis入门程序的详细解析
本文详细介绍了一个MyBatis入门程序的创建过程,从环境准备、Maven项目创建、MyBatis配置、实体类和Mapper接口的定义,到工具类和测试类的编写。通过这个示例,读者可以了解MyBatis的基本使用方法,并在实际项目中应用这些知识。
150 11
|
6月前
|
SQL 缓存 Java
框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性
本文详细解构了MyBatis的工作机制,包括解析配置、创建连接、执行SQL、结果封装和关闭连接等步骤。文章还介绍了MyBatis的五大核心功能特性:支持动态SQL、缓存机制(一级和二级缓存)、插件扩展、延迟加载和SQL注解,帮助读者深入了解其高效灵活的设计理念。
|
8月前
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
353 29
|
6月前
|
Oracle 关系型数据库 Java
|
10月前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
199 1
持久层框架MyBatisPlus
|
3月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
537 1
Spring boot 使用mybatis generator 自动生成代码插件
|
6月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
491 0