JavaWeb笔记_Tlias_员工部门管理和配置文件

部门管理

查询

Controller

@Slf4j
@RestController
public class DeptController {

    //private static Logger log = LoggerFactory.getLogger(DeptController.class);
    @Autowired
    private DeptService deptService;

    //@RequestMapping(value = "/depts", method = RequestMethod.GET)
    @GetMapping("/depts")
    public Result list(){
        log.info("查询全部部门数据");
        List<Dept> deptList = deptService.list();
        return Result.success(deptList);
    }
}

Service

接口
public interface DeptService {
    List<Dept> list();
}
实现类
@Service
public class DeptServiceImpl implements DeptService {

    @Autowired
    private DeptMapper deptMapper;

    @Override
    public List<Dept> list() {

        return deptMapper.list();
    }
}

mapper

@Mapper
public interface DeptMapper {

    @Select("select * from dept")
    List<Dept> list();
}

删除

Controller

@Slf4j
@RestController
public class DeptController {

    @Autowired
    private DeptService deptService;

    ...

    // 根据ID删除部门
    @DeleteMapping("/depts/{id}")
    public Result delete(@PathVariable Integer id)
    {
        log.info("根据ID删除部门数据:{}", id);
        deptService.delete(id);
        return Result.success();
    }

    ...
}

Service

接口
public interface DeptService {
    ...

    void delete(Integer id);

}
实现类
@Service
public class DeptServiceImpl implements DeptService {

    @Autowired
    private DeptMapper deptMapper;

    ...

    @Override
    public void delete(Integer id) {

        deptMapper.deleteById(id);

    }
}

mapper

@Mapper
public interface DeptMapper {

    ...

    @Delete("delete from dept where id = #{id}")
    void deleteById(Integer id);
}

新增

Controller

@PostMapping("/depts")
public Result add(@RequestBody Dept dept)
{
    log.info("新增部门: {}", dept);
    deptService.add(dept);
    return Result.success();
}

Service

接口
public interface DeptService {
    ...
    void add(Dept dept);
}
实现类
public void add(Dept dept) {
    dept.setCreateTime(LocalDateTime.now());
    dept.setUpdateTime(LocalDateTime.now());
    deptMapper.insert(dept);

}

mapper

@Insert("insert into dept(name, create_time, update_time)\n" +
            "values(#{name}, #{createTime}, #{updateTime})")
void insert(Dept dept);

优化请求路径

@Slf4j
@RestController
@RequestMapping("/depts")
public class DeptController {
    // 查询全部部门
    @GetMapping
    public Result list(){
        ...
    }

    // 根据ID删除部门
    @DeleteMapping("/{id}")
    public Result delete(@PathVariable Integer id)
    {
        ...
    }

    // 添加部门
    @PostMapping
    public Result add(@RequestBody Dept dept)
    {
        ...
    }
}

完整的请求路径, 应该是类上的@RequestMapping的value属性+方法上的@RequestMapping的value属性.

根据ID查询

// controller
@GetMapping("/{id}")
public Result get(@PathVariable Integer id)
{
    log.info("根据ID查询部门:{}", id);
    Dept dept = deptService.get(id);
    return Result.success(dept);
}
// serviceimpl
public Dept get(Integer id) {
    Dept dept = deptMapper.getById(id);
    return dept;
}
// mapper
@Select("select id, name, create_time, update_time from Dept where id = #{id}")
Dept getById(Integer id);

修改

// controller
@PutMapping
public Result update(@RequestBody Dept dept)
{
    log.info("修改部门: {}", dept);
    deptService.update(dept);
    return Result.success();
}
// serviceimpl
public void update(Dept dept) {
    Integer id = dept.getId();
    String name = dept.getName();
    deptMapper.updateName(id, name);
}
// mapper
@Update("update dept set name = #{name} where id = #{id}")
void updateName(Integer id, String name);

员工管理

分页查询

// PageBean
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean {
    private Long total;
    private List rows;
}

// controller
@Slf4j
@RestController
public class EmpController {

    @Autowired
    private EmpService empService;

    @GetMapping("/emps")
    public Result page(@RequestParam(defaultValue = "1") Integer page,
                       @RequestParam(defaultValue = "10") Integer pageSize)
    {
        log.info("分页查询, 参数: {}, {}", page, pageSize);
        PageBean pageBean = empService.page(page, pageSize);
        return Result.success(pageBean);
    }
}

// serviceimpl
@Service
public class EmpServiceImpl implements EmpService {

    @Autowired
    private EmpMapper empMapper;

    @Override
    public PageBean page(Integer page, Integer pageSize) {
        // 1. 获取总记录数
        Long count = empMapper.count();

        // 2. 获取分页查询结果列表
        Integer start = (page - 1) * pageSize;
        List<Emp> empList = empMapper.page(start, pageSize);

        // 3. 封装PageBean对象
        PageBean pageBean = new PageBean(count, empList);

        return pageBean;
    }
}

// mapper
@Mapper
public interface EmpMapper {
    /**
     * 查询总数
     * @return
     */
    @Select("select count(*) from emp")
    Long count();

    /**
     * 分页查询数据
     * @param start
     * @param pageSize
     * @return
     */
    @Select("select * from emp limit #{start}, #{pageSize}")
    List<Emp> page(Integer start, Integer pageSize);
}

pagehelper 分页插件

maven坐标:

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.4.6</version>
</dependency>
// mapper
@Select("select * from emp")
List<Emp> list();
// service
public PageBean page(Integer page, Integer pageSize) {
    // 1. 设置分页参数
    PageHelper.startPage(page, pageSize);

    // 2. 执行查询
    List<Emp> empList = empMapper.list();
    Page<Emp> p = (Page<Emp>) empList;

    // 3. 封装PageBean对象

    PageBean pageBean = new PageBean(p.getTotal(), p.getResult());

    return pageBean;
}

条件分页查询

// controller
@GetMapping("/emps")
public Result page(@RequestParam(defaultValue = "1") 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);
    PageBean pageBean = empService.page(page, pageSize, name, gender, begin, end);
    return Result.success(pageBean);
}
// service
@Override
public PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {
    // 1. 设置分页参数
    PageHelper.startPage(page, pageSize);

    // 2. 执行查询
    List<Emp> empList = empMapper.list(name, gender, begin, end);
    Page<Emp> p = (Page<Emp>) empList;

    // 3. 封装PageBean对象

    PageBean pageBean = new PageBean(p.getTotal(), p.getResult());

    return pageBean;
}
// mapper
List<Emp> list(String name, Short gender, LocalDate begin, LocalDate end);
// mapper.xml
<select id="list" resultType="com.itheima.pojo.Emp">
    select * 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>

批量删除员工

// controller
@DeleteMapping("/{ids}")
public Result delete(@PathVariable List<Integer> ids)
{
    log.info("批量删除, ids: {}", ids);
    empService.delete(ids);
    return Result.success();
}
// service-interface
void delete(List<Integer> ids);
// service-impl
@Override
public void delete(List<Integer> ids) {
    empMapper.delete(ids);
}
// mapper
void delete(List<Integer> ids);
// mapper.xml
<delete id="delete">
    delete from emp where id in
    <foreach collection="ids" item="id" separator="," open="(" close=")">
        #{id}
    </foreach>
</delete>

新增员工

// controller
@PostMapping
public Result save(@RequestBody Emp emp)
{
    log.info("新增员工, emp: {}", emp);
    empService.save(emp);
    return Result.success();
}
// service
public void save(Emp emp) {
    emp.setCreateTime(LocalDateTime.now());
    emp.setUpdateTime(LocalDateTime.now());
    empMapper.insert(emp);
}
// mapper
@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);

文件上传

简介

前端页面三要素:

  • <input type="file">
  • method="post"
  • enctype="multipart/form-data"

controller:

@Slf4j
@RestController
public class UploadController {

    @PostMapping("/upload")
    public Result upload(String username, Integer age, MultipartFile image)
    {
        log.info("文件上传: {}, {}, {}", username, age, image);
        return Result.success();
    }
}

本地存储

@Slf4j
@RestController
public class UploadController {

    @PostMapping("/upload")
    public Result upload(String username, Integer age, MultipartFile image) throws IOException {
        log.info("文件上传: {}, {}, {}", username, age, image);

        // 获取原始文件名
        String originalFilename = image.getOriginalFilename();
        // 构造唯一的文件名(不能重复) - uuid(通用唯一识别码)
        int index = originalFilename.lastIndexOf(".");
        String extname = originalFilename.substring(index);
        String newFileName = UUID.randomUUID().toString() + extname;
        log.info("新的文件名: {}", newFileName);
        // 存储
        image.transferTo(new File("C:\\Users\\cen\\Desktop\\"+newFileName));
        return Result.success();
    }
}

在SpringBoot中, 文件上传, 默认单个文件允许最大大小为1M. 如果需要上传大文件, 可以在application.properties进行如下配置:

#配置单个文件最大上传大小
spring.servlet.multipart.max-file-size=10MB
#配置单个请求最大上传大小(一次请求可以上传多个文件)
spring.servlet.multipart.max-request-size=100MB

阿里云OSS

maven坐标
<!-- 阿里云OSS -->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.15.1</version>
</dependency>
<!-- java版本大于9需要引入以下依赖 -->
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.3</version>
</dependency>
AliOSSUtils
@Component
public class AliOSSUtils {

    private String endpoint = "xxx";
    private String accessKeyId = "xxx";
    private String accessKeySecret = "xxx";
    private String bucketName = "xxx";

    /**
     * 实现上传图片到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);
    }
}

根据ID查询员工

// controller
@GetMapping("/{id}")
public Result getById(@PathVariable Integer id)
{
    log.info("根据id查询员工, id: {}", id);
    Emp emp = empService.getById(id);
    return Result.success(emp);
}
// service
public Emp getById(Integer id) {
    return empMapper.getById(id);
}
// mapper
@Select("select * from emp where id = #{id}")
Emp getById(Integer id);

修改员工

// controller
@PutMapping
public Result update(@RequestBody Emp emp)
{
    empService.update(emp);
    return Result.success();
}
// service
public void update(Emp emp) {
    emp.setUpdateTime(LocalDateTime.now());
    empMapper.update(emp);
}
// mapper
<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>

配置文件

参数配置化

application.properties

#自定义的阿里云OSS配置信息
aliyun.oss.endpoint=xxx
aliyun.oss.accessKeyId=xxx
aliyun.oss.accessKeySecret=xxx
aliyun.oss.bucketName=xxx

AliOSSUtils.java

@Component
public class AliOSSUtils {

    @Value("${aliyun.oss.endpoint}")
    private String endpoint;
    @Value("${aliyun.oss.accessKeyId}")
    private String accessKeyId;
    @Value("${aliyun.oss.accessKeySecret}")
    private String accessKeySecret;
    @Value("${aliyun.oss.bucketName}")
    private String bucketName;
}

yml配置文件

SpringBoot提供了多种属性配置方式

  • properties
  • yml/yaml

3类配置文件

  • xml
<server>
    <port>8080</port>
    <address>127.0.0.1</address>
</server>
  • properties
server.port=8080
server.address=127.0.0.1
  • yml/yaml
server:
  port: 8080
  address: 127.0.0.1

基本语法

  • 大小写敏感
  • 数值前必须有空格, 作为分隔符
  • 使用缩进表示层级关系, 缩进时, 不允许使用Tab键, 只能用空格(idea中会自动将Tab转换为空格)
  • 缩进的空格数目不重要, 只需相同层级的元素左侧对齐即可
  • #表示注释

yml数据格式

# 对象/Map集合
user:
  name: zhangsan
  age: 18
  password: 123456
  
# 数组/List/Set集合:
hobby:
  - java
  - game
  - sport

@ConfigurationProperties注解

AilOSSProperties.java

@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AilOSSProperties {

    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
}

maven坐标(可选)

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

AilOSSUtils.java

public class AliOSSUtils {

    @Autowired
    private AilOSSProperties ailOSSProperties;
    
}

来源

黑马程序员. JavaWeb开发教程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Y_cen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值