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

javaweb1基础知识入门-Mybatis框架的crud

      • HTTP协议
          • 1.HTTP-概述
          • 2.HTTP-请求协议
          • 3.HTTP-响应协议
      • 请求和响应
          • 1.请求
          • 2.响应
      • 分层解耦
          • 1.三层架构
          • 2.分层解耦
          • 3.IOC & DI入门
          • 4.IOC详解
          • 5.DI详解
      • springbootweb案例练习(Mybatis框架实现)
          • 开发规范和环境准备
      • 部门管理
          • 1.查询部门
          • 2.删除部门
          • 3.新增部门
      • 员工管理
          • 1.分页查询
          • 2.分页查询(带条件)
          • 3.文件上传
          • 4.删除员工
          • 5.新增员工
          • 6.修改员工
      • 配置文件

HTTP协议

1.HTTP-概述

JavaWeb基础知识入门-Mybatis框架的crud(一)_第1张图片

2.HTTP-请求协议

HTTP请求数据格式

JavaWeb基础知识入门-Mybatis框架的crud(一)_第2张图片
JavaWeb基础知识入门-Mybatis框架的crud(一)_第3张图片

3.HTTP-响应协议

常见的响应状态码

JavaWeb基础知识入门-Mybatis框架的crud(一)_第4张图片
JavaWeb基础知识入门-Mybatis框架的crud(一)_第5张图片

HTTP响应数据格式

JavaWeb基础知识入门-Mybatis框架的crud(一)_第6张图片##### HTTP-协议解析
JavaWeb基础知识入门-Mybatis框架的crud(一)_第7张图片
JavaWeb基础知识入门-Mybatis框架的crud(一)_第8张图片

请求和响应

JavaWeb基础知识入门-Mybatis框架的crud(一)_第9张图片

1.请求

接口测试工具

JavaWeb基础知识入门-Mybatis框架的crud(一)_第10张图片
JavaWeb基础知识入门-Mybatis框架的crud(一)_第11张图片
JavaWeb基础知识入门-Mybatis框架的crud(一)_第12张图片
JavaWeb基础知识入门-Mybatis框架的crud(一)_第13张图片
JavaWeb基础知识入门-Mybatis框架的crud(一)_第14张图片
JavaWeb基础知识入门-Mybatis框架的crud(一)_第15张图片
JavaWeb基础知识入门-Mybatis框架的crud(一)_第16张图片
JavaWeb基础知识入门-Mybatis框架的crud(一)_第17张图片

2.响应

JavaWeb基础知识入门-Mybatis框架的crud(一)_第18张图片
JavaWeb基础知识入门-Mybatis框架的crud(一)_第19张图片

分层解耦

1.三层架构

JavaWeb基础知识入门-Mybatis框架的crud(一)_第20张图片

2.分层解耦

JavaWeb基础知识入门-Mybatis框架的crud(一)_第21张图片

3.IOC & DI入门

JavaWeb基础知识入门-Mybatis框架的crud(一)_第22张图片

4.IOC详解

Bean组件扫描
前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描。
@ComponentScan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解@SpringBootApplication中,默认扫描的范围是启动类所在包及其子包。

5.DI详解

JavaWeb基础知识入门-Mybatis框架的crud(一)_第23张图片

@Resource 与@Autowired区别
@Autowired是spring框架提供的注解,而@Resource是JDK提供的注解。
@Autowired 默认是按照类型注入,而@Resource默认是按照名称注入。

springbootweb案例练习(Mybatis框架实现)

开发规范和环境准备

JavaWeb基础知识入门-Mybatis框架的crud(一)_第24张图片

开发风格Restful
JavaWeb基础知识入门-Mybatis框架的crud(一)_第25张图片

注意事项:REST是风格,是约定方式,约定不是规定,可以打破。
描述模块的功能通常使用复数,也就是加s的格式来描述,表示此类资源,而非单个资源。如: users、emps、books…

JavaWeb基础知识入门-Mybatis框架的crud(一)_第26张图片

JavaWeb基础知识入门-Mybatis框架的crud(一)_第27张图片

部门管理

1.查询部门

JavaWeb基础知识入门-Mybatis框架的crud(一)_第28张图片

2.删除部门

JavaWeb基础知识入门-Mybatis框架的crud(一)_第29张图片

3.新增部门

JavaWeb基础知识入门-Mybatis框架的crud(一)_第30张图片

JavaWeb基础知识入门-Mybatis框架的crud(一)_第31张图片

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.分页查询

JavaWeb基础知识入门-Mybatis框架的crud(一)_第32张图片

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

//分页查询结果封装类
@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插件,可以简洁高效的进行开发。
JavaWeb基础知识入门-Mybatis框架的crud(一)_第33张图片

2.分页查询(带条件)

引入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.文件上传

简介

文件上传,是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。
文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。

JavaWeb基础知识入门-Mybatis框架的crud(一)_第34张图片

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

文件上传的实现代码

@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();
    }

JavaWeb基础知识入门-Mybatis框架的crud(一)_第35张图片

String getOriginalFilename();//获取原始文件名
void transferTo(File dest);//将接收的文件转存到磁盘文件中
long getSize(); l/获取文件的大小,单位:字节
byte] getBytes();//获取文件内容的字节数组
Ilnputsteam getlnputStream();//获取接收到的文件内容的输入流

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

引入阿里云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.删除员工

JavaWeb基础知识入门-Mybatis框架的crud(一)_第36张图片

5.新增员工

JavaWeb基础知识入门-Mybatis框架的crud(一)_第37张图片

6.修改员工

查询回显
JavaWeb基础知识入门-Mybatis框架的crud(一)_第38张图片
修改员工信息
JavaWeb基础知识入门-Mybatis框架的crud(一)_第39张图片

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>

配置文件

JavaWeb基础知识入门-Mybatis框架的crud(一)_第40张图片
JavaWeb基础知识入门-Mybatis框架的crud(一)_第41张图片
JavaWeb基础知识入门-Mybatis框架的crud(一)_第42张图片
JavaWeb基础知识入门-Mybatis框架的crud(一)_第43张图片
JavaWeb基础知识入门-Mybatis框架的crud(一)_第44张图片

JavaWeb基础知识入门-Mybatis框架的crud(一)_第45张图片

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

JavaWeb基础知识入门-Mybatis框架的crud(一)_第46张图片
美好的一天到此结束,下次继续努力!

你可能感兴趣的:(mybatis,java,intellij-idea,spring,boot,后端)