java web 开发框架编

学习web 框架上开发需要的是安装  mysql 8.0  idea 2022 git  2.2.23  node 16以上 (新版本不好拉有些库了)jdk 最好是17以上

jdk8也是行的,反正不管新版如何发布,我们都是你发任你发,永远jjava 8

第一步新建项目一定要设文件编吗,然后才开如开发

2.配置maven  

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                              https://maven.apache.org/xsd/settings-1.0.0.xsd">
   <localRepository>C:/Users/甲蛙/.m2/repository</localRepository>
   <mirrors>
       <mirror>
            <id>alimaven</id>
           <mirrorOf>central</mirrorOf>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/repositories/central</url>
        </mirror>
    </mirrors>
    <!-- 其他配置,如pluginGroups, proxies, servers等 -->
</settings>

 第三仓库管理,由于我是新建代码,后来想放在仓库中,以前在本地建个仓库也经不用了,所以提交总是找到上一个仓库。解决方法

首先,查看当前远程仓库的列表。运行以下命令:

  1. git remote -v

    您将看到一个或多个已配置的远程仓库及其对应的URL。

  2. 如果现有的远程仓库指向了错误的URL,您可以使用以下命令更新它的URL: 

    git remote set-url origin https://gitee.com/xie_bi_yuan/ctboot.git

    这将把名为origin的远程仓库的URL更新为https://gitee.com/xie_bi_yuan/ctboot.git

  3. 如果您想要保留现有的远程仓库并添加一个新的远程仓库,您可以为新的远程仓库指定一个不同的名称。例如,您可以将其命名为gitee 

    git remote add gitee https://gitee.com/xie_bi_yuan/ctboot.git

    查看本地仓库key
    在安装好的git 的菜单中 点帮助。然后查看key 复制到仓库配置key中,当然我说的是也经有key 的情况

     

 启动日志优化:

修改主入口文件:

@SpringBootApplication
public class GRskgApplication {
    private static final Logger LOG = LoggerFactory.getLogger(GRskgApplication.class);

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(GRskgApplication.class, args);
        LOG.info("杰哥系统也启动");
        Environment env = context.getEnvironment();
        LOG.info("启动成功!!");
        LOG.info("地址: http://127.0.0.1:{}", env.getProperty("server.port"));
    }
}

第三部份 利用idea 工具自带的http 测试,在根根目录新建一个文件夹,取名http 在下面新建一个文件test.http

  程序启动后 这个文件的类,和测试类一样 可以运行测试方法

 如果是测试post  一定要加空行

代码如下

###http文件如下
###
POST http://localhost:8080/hello/post
Content-Type: application/x-www-form-urlencoded

name=worldxsy

###控制器类代码如下
    @PostMapping("/hello/post")
    public String helloPost(String name) {
        return "Hello, " + name + "! (POST)";
    }

  配置文件读取

1,支持格式说明:

在reources 文件夹下面的配置文件都 可以被boot 识别,只是默认是这个文件下面的根目录而己。支持 的格式如

.properties  .yml    在coud 开发中还支持 bootstrap.properties  动态配置,这个如果这儿没有说清在百度理解

总结就是SpringBoot会自动识别下面这组配置文件application.properties/ymlconfig/application.properties/ym1如果是Springcloud,还会自动识别下面这组配置文件:bootstrap.properties/ymlconfig/bootstrap.properties/ym1

以下是支持 的格式

 

  2  配置文件格式转换  ToYaml.com   网址:toyaml.com/index.html

3 自定义配置属性

我们在配置文件定义一个属性 。比如定一个叫xsy = hello  

然后我们在控制器上加一个注解,便 可以在属性中设置这个属性的值

 

使用mybatis 步骤

第一导入包

<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version> <!-- 使用适合您项目的版本 -->
</dependency>

第二配置数据库存连接(上面是配连接,下面是配扫描)
spring.datasource.url=jdbc:mysql://192.168.3.21:3306/sams?characterEncoding=UTF8&autoReconnect=true&serverTimezone=Asia/Shanghai&allowMultiQueries=true
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

mybatis.mapper-locations=classpath:/mapper/**/*.xml

第三步,在主类配扫描mappe的包
@SpringBootApplication
@ComponentScan("com.rskg")
@MapperScan("com.rskg.g_rskg.Mapper")
public class GRskgApplication {
    private static final Logger LOG = LoggerFactory.getLogger(GRskgApplication.class);

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(GRskgApplication.class, args);
        LOG.info("杰哥系统也启动");
        Environment env = context.getEnvironment();
        LOG.info("启动成功!!");
        LOG.info("地址: http://127.0.0.1:{}", env.getProperty("server.port"));
    }
}

  

额外注意,我们在service  在导入类的时候加上注解,
package com.rskg.g_rskg.service;

import com.rskg.g_rskg.Mapper.UserMappe;
import com.rskg.g_rskg.domin.User;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class TestService {
    @Resource
//    @Autowired  这是sprintboot 带的,上面那个jdk带的
    private UserMappe userMappe;
    public List<User> list(){
        return userMappe.list();
    }

}

 mapper 类文件如下,这儿只是参考,不在这儿是重点,

package com.rskg.g_rskg.Mapper;
import com.rskg.g_rskg.domin.User;
import java.util.List;
public interface UserMappe {
    public List<User> list();
}

  最后就是针对mybatis 映射 的配置文件,示例

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 定义映射器接口的完全限定名 -->
<mapper namespace="com.rskg.g_rskg.Mapper.UserMappe">
    <!-- 定义插入用户的 SQL 映射 -->
    <select id="list" resultType="com.rskg.g_rskg.domin.User">
        select * from User
    </select>
</mapper>

  统一返回

1,我们可以建一个对象,对象其中属性有状态 mession    了内容体,将要返回的数据放到内容体就可以完成统一统回,

2  问题是  返回的时候我们要清楚一些不要的东西,我们还要做统一响应,统一接收参数的方法为绿色部分

package com.rskg.g_rskg.resp;

public class CommonResp<T> {

    /**
     * 业务上的成功或失败
     */
    private boolean success = true;

    /**
     * 返回信息
     */
    private String message;

    /**
     * 返回泛型数据,自定义类型
     */
    private T content;

    public boolean getSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getContent() {
        return content;
    }

    public void setContent(T content) {
        this.content = content;
    }

    @Override
    public String toString() {
        final StringBuffer sb = new StringBuffer("ResponseDto{");
        sb.append("success=").append(success);
        sb.append(", message='").append(message).append('\'');
        sb.append(", content=").append(content);
        sb.append('}');
        return sb.toString();
    }
}
统一返回代码
    @GetMapping("/list")
    public CommonResp  list(EbookReq req){
        CommonResp<List<EbookResp>> rest = new CommonResp<>();
        List<EbookResp> list = ebookService.list(req);
        rest.setContent(list);
        return rest;
    }
}有

有时候要返回的值要处理一下就是将将结查复制到别一个对象,去掉某一些字段,比如密码,需要是处理结果的

注掉的部份是原生方法,后面是工具的方法

    public List<EbookResp> list(EbookReq Req) {
        EbookExample ebookExample = new EbookExample();
        ebookExample.createCriteria().andNameLike("%" + Req.getName() + "%");
        List<Ebook> ebooklist = ebookMapper.selectByExample(ebookExample);
        List<EbookResp> respList =new ArrayList<>();
        for (Ebook ebook : ebooklist) {
//            EbookResp ebookResp = new EbookResp();
//            ebookResp.setId(ebook.getId());
//            ebookResp.setName(ebook.getName());
//            ebookResp.setCategory1Id(ebook.getCategory1Id());
//            ebookResp.setCategory2Id(ebook.getCategory2Id());
//            ebookResp.setDescription(ebook.getDescription());
//            ebookResp.setCover(ebook.getCover());
//            respList.add(ebookResp);
//            BeanUtils.copyProperties(ebook,ebookResp);
//            respList.add(ebookResp);
            EbookResp ebookResp = CopyUtil.copy(ebook, EbookResp.class);
            respList.add(ebookResp);
        }
        return respList;
    }
}

  封装这个复制别个对象的方法代码在下面,来自课堂笔记

package com.rskg.g_rskg.util;

import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

public class CopyUtil {

    /**
     * 单体复制
     */
    public static <T> T copy(Object source, Class<T> clazz) {
        if (source == null) {
            return null;
        }
        T obj = null;
        try {
            obj = clazz.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        BeanUtils.copyProperties(source, obj);
        return obj;
    }

    /**
     * 列表复制
     */
    public static <T> List<T> copyList(List source, Class<T> clazz) {
        List<T> target = new ArrayList<>();
        if (!CollectionUtils.isEmpty(source)){
            for (Object c: source) {
                T obj = copy(c, clazz);
                target.add(obj);
            }
        }
        return target;
    }
}
复制对象成对象

使用这个工具的示例:

EbookResp ebookResp = CopyUtil.copy(ebook, EbookResp.class);
respList.add(ebookResp);
过滤器使用
在项目中建一个文件夹,下面建一个文件 取名filter 为了这个类可以被系统知道 要加一下注解 @Component 最后一步增加一个配置文件指明路径
// package com.jiawa.wiki.filter;
//
// import org.slf4j.Logger;
// import org.slf4j.LoggerFactory;
// import org.springframework.stereotype.Component;
//
// import javax.servlet.*;
// import javax.servlet.http.HttpServletRequest;
// import java.io.IOException;
//
// @Component
// public class LogFilter implements Filter {
//
//     private static final Logger LOG = LoggerFactory.getLogger(LogFilter.class);
//
//     @Override
//     public void init(FilterConfig filterConfig) throws ServletException {
//
//     }
//
//     @Override
//     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//         // 打印请求信息
//         HttpServletRequest request = (HttpServletRequest) servletRequest;
//         LOG.info("------------- LogFilter 开始 -------------");
//         LOG.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod());
//         LOG.info("远程地址: {}", request.getRemoteAddr());
//
//         long startTime = System.currentTimeMillis();
//         filterChain.doFilter(servletRequest, servletResponse);
//         LOG.info("------------- LogFilter 结束 耗时:{} ms -------------", System.currentTimeMillis() - startTime);
//     }
// }
过滤器

 

 

2 挡截器先新建这样的配置

SpringMvcConfig
package com.jiawa.wiki.config;
import
@Configuration
public class SpringMvcConfig implements WebMvcConfigurer {
@Resource
LogInterceptor logInterceptor;
public void addInterceptors(InterceptorRegistry registry){registry.addInterceptor(logInterceptor)
.addPathPatterns("/**").excludePathPatterns("/login");

  这儿笔记做得乱,可以复习相关

打印日志,要显示sql 的话。只需要在配置上加一句

 

 



 

 

 

 

posted @ 2024-06-14 23:11  谢双元小号  阅读(23)  评论(0)    收藏  举报