当前位置: 首页 > wzjs >正文

网站建设与管理是什么bt搜索引擎

网站建设与管理是什么,bt搜索引擎,广告点击网站源码,wordpress ping_statusrestful 概念引入 REST(表现层状态转移Representional State Transfer)是一种软件架构风格。 旨在构建高效、可拓展的分布式系统,尤其适用于Web服务,其核心思想是通过统一的接口和资源操作实现客户端于服务器之间的交互。REST 凭借其简洁、灵活的特点&a…

restful 概念引入 REST(表现层状态转移Representional State Transfer)是一种软件架构风格。

旨在构建高效、可拓展的分布式系统,尤其适用于Web服务,其核心思想是通过统一的接口和资源操作实现客户端于服务器之间的交互。REST 凭借其简洁、灵活的特点,成为现代 Web 服务的基石。

API接口设计的架构风格

API接口:Web应用暴露出来的让别人访问的请求路径。jar包封装的API接口。

CRUD案例实现:

一 Dao层实现(处理数据库)

结构图

代码实现:

创建一个bean类,用来放数据库用户的信息

package org.example.springmvc.bean;import lombok.Getter;
import lombok.Setter;@Setter
@Getter
public class Employee {private Integer id;private String name;private Integer age;private String gender;public Employee(Integer id, String name, Integer age, String gender) {this.id = id;this.name = name;this.age = age;this.gender = gender;}public Employee() {}@Overridepublic String toString() {return "Employee{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", gender='" + gender + '\'' +'}';}
}

定义一个接口里面写上需要的方法

package org.example.springmvc.dao;import org.example.springmvc.bean.Employee;public interface EmployeeDao {// 查询根据ID查询员工Employee getEmployeeById(Integer id);// 添加员工void addEmployee(Employee employee);// 修改员工void updateEmployee(Employee employee);// 删除员工(根据ID)void deleteEmployee(Integer id);}

接口的实现类(数据库增删改查的具体实现)

package org.example.springmvc.dao.Impl;import org.example.springmvc.bean.Employee;
import org.example.springmvc.dao.EmployeeDao;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;@Component
public class EmployeeDaoImpl implements EmployeeDao {private final JdbcTemplate jdbcTemplate;// 注入JdbcTemplatepublic EmployeeDaoImpl(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}@Overridepublic Employee getEmployeeById(Integer id) {String sql = "select * from first_tb where id = ?";return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Employee.class), id);}@Overridepublic void addEmployee(Employee employee) {String sql = "insert into first_tb(id,name,age,gender) values(?,?,?,?)";jdbcTemplate.update(sql, employee.getId(), employee.getName(), employee.getAge(), employee.getGender());}@Overridepublic void updateEmployee(Employee employee) {String sql = "update first_tb set name = ?,age = ?,gender = ? where id = ?";jdbcTemplate.update(sql, employee.getName(), employee.getAge(), employee.getGender(), employee.getId());}@Overridepublic void deleteEmployee(Integer id) {String sql = "delete from first_tb where id = ?";jdbcTemplate.update(sql, id);}
}

测试类实现:(CRUD)

package org.example.springmvc;import org.example.springmvc.bean.Employee;
import org.example.springmvc.dao.EmployeeDao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class SpringTest {@AutowiredEmployeeDao employeeDao;@Testpublic void test() {// 查Employee employee = employeeDao.getEmployeeById(1);System.out.println(employee);// 增删改employeeDao.addEmployee(new Employee(7, "超哥", 18, "男"));employeeDao.updateEmployee(new Employee(1, "贤哥", 18, "男"));employeeDao.deleteEmployee(5);}
}

二 Sercice层实现(处理业务逻辑)

结构图:

接口:

package org.example.springmvc.service;import org.example.springmvc.bean.Employee;public interface EmployeeService {// 根据id查询员工Employee getEmployeeById(Integer id);// 添加员工void addEmployee(Employee employee);// 修改员工void updateEmployee(Employee employee);// 删除员工void deleteEmployee(Integer id);}

接口的实现类:(实现更新操作的非空判断)

package org.example.springmvc.service.Impl;import org.example.springmvc.bean.Employee;
import org.example.springmvc.dao.EmployeeDao;
import org.example.springmvc.service.EmployeeService;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;@Service
public class EmployeeServiceImpl implements EmployeeService {private final EmployeeDao employeeDao;// 注入daopublic EmployeeServiceImpl(EmployeeDao EmployeeDao) {this.employeeDao = EmployeeDao;}@Overridepublic Employee getEmployeeById(Integer id) {return employeeDao.getEmployeeById(id);}@Overridepublic void addEmployee(Employee employee) {employeeDao.addEmployee(employee);}@Overridepublic void updateEmployee(Employee employee) {//防空处理,考虑到service是被controller调用的,所以要考虑某些属性是空的,需要进行处理//1 去数据库查询到原来的值//2 把页面带来的值覆盖原来的值,页面没带的保持原状Integer id = employee.getId();if (id == null) {return;}// 获取数据库当中的Employee employeeById = employeeDao.getEmployeeById(id);//传过来的值不是空串,将值传递给数据库if (StringUtils.hasText(employee.getName())) {employeeById.setName(employee.getName());}if (StringUtils.hasText(employee.getGender())) {employeeById.setGender(employee.getGender());}if (employee.getAge() != null) {employeeById.setAge(employee.getAge());}employeeDao.updateEmployee(employeeById);}@Overridepublic void deleteEmployee(Integer id) {employeeDao.deleteEmployee(id);}
}

测试类:

    @AutowiredEmployeeService employeeService;@Testpublic void test1() {Employee employee = new Employee();employee.setId(7);employee.setAge(100);employeeService.updateEmployee(employee);}

三 Controller层(处理http请求)

代码实现:

    /*** 统一返回JSON* code: 说明:业务状态码,前后端商定不同的业务状态吗* msg: 说明:提示信息,前端根据业务状态码和提示信息进行业务逻辑处理* data: 说明:返回的数据* 前端统一处理业务逻辑,根据业务状态码和提示信息进行业务逻辑处理* 1 前端发送请求* 2 判断状态码,成功就显示数据,失败就提示提示信息(或其它操作)**/
package org.example.springmvc.common;public class R<T> {private final Integer code;private final String msg;private final T data;// 私有化构造器,强制通过静态工厂方法创建对象private R(Integer code, String msg, T data) {this.code = code;this.msg = msg;this.data = data;}// -------------------- 成功响应快捷方法 --------------------public static R<?> ok() {return new R<>(200, "success", null);}public static <T> R<T> ok(T data) {return new R<>(200, "success", data);}public static <T> R<T> ok(String msg, T data) {return new R<>(200, msg, data);}// -------------------- 错误响应快捷方法 --------------------public static R<?> error(int code, String msg) {return new R<>(code, msg, null);}public static R<?> error(ErrorCode errorCode) {return new R<>(errorCode.getCode(), errorCode.getMsg(), null);}// -------------------- 链式构建方法(可选) --------------------public R<T> withMsg(String msg) {return new R<>(this.code, msg, this.data);}public R<T> withData(T data) {return new R<>(this.code, this.msg, data);}// -------------------- Getter --------------------public Integer getCode() {return code;}public String getMsg() {return msg;}public T getData() {return data;}// -------------------- 状态码枚举(可选) --------------------public enum ErrorCode {BAD_REQUEST(400, "参数错误"),UNAUTHORIZED(401, "未授权"),NOT_FOUND(404, "资源不存在"),INTERNAL_ERROR(500, "服务器内部错误");private final int code;private final String msg;ErrorCode(int code, String msg) {this.code = code;this.msg = msg;}public int getCode() {return code;}public String getMsg() {return msg;}}
}

需求类:

package org.example.springmvc.controller;import org.example.springmvc.bean.Employee;
import org.example.springmvc.common.R;
import org.example.springmvc.service.EmployeeService;
import org.springframework.web.bind.annotation.*;@RestController
public class EmployeeRestController {EmployeeService employeeService;// 构造器注入public EmployeeRestController(EmployeeService employeeService) {this.employeeService = employeeService;}// 根据id查询员工// @RequestMapping(value = "/employee/{id}", method = RequestMethod.GET)@GetMapping(value = "/employee/{id}")public R get(@PathVariable("id") Integer id) {Employee employeeById = employeeService.getEmployeeById(id);return R.ok(employeeById);}// 根据id删除员工// @RequestMapping(value = "/employee/{id}", method = RequestMethod.POST)@DeleteMapping(value = "/employee/{id}")public R delete(@PathVariable("id") Integer id) {employeeService.deleteEmployee(id);return R.ok();}// 添加员工,前端发送请求,把 json 数据封装到 Employee 对象中@PostMapping(value = "/employee")public R add(@RequestBody Employee employee) {employeeService.addEmployee(employee);return R.ok();}// 修改员工@PutMapping(value = "/employee")public R update(@RequestBody Employee employee) {employeeService.updateEmployee(employee);return R.ok();}}

四 补充知识点

1 @PathVariable - 路径变量

2 @CrossOrigin(Origins = "*")允许跨域访问

3 可以在路径之前加上需要访问的路径

http://www.dtcms.com/wzjs/124518.html

相关文章:

  • 网站怎么做pc导流页太原网站建设制作
  • 网站流量被黑长沙网站定制公司
  • 石龙网站建设郑州seo使用教程
  • 丽水网站开发百度新闻首页新闻全文
  • 重庆网上办商品标题优化
  • 黑龙江省鹤岗市城乡建设局网站网址缩短
  • yy怎么一直在模板相关信息圆柱钢模板优势是什么?企业网站建设模板和定制化有什么区别呢?拼命加载中广州新闻发布
  • 自已电脑做网站软文推广多少钱
  • 网站优化软件方案全网营销平台
  • 郑州做网站九零后雷神代刷推广网站
  • 俄文手机网站制作网页设计一般用什么软件
  • 影视网站怎么做原创企业seo推广外包
  • 做拍卖网站什么是seo网站优化
  • 薅羊毛做任务赚钱网站seo技术外包 乐云践新专家
  • 网站做专业团队杭州seo招聘
  • 即墨哪里有做网站的秦皇岛seo优化
  • 推广赚钱app排行榜seo运营招聘
  • 做网站的视频网络营销的招聘信息
  • 网站做新浪图床怎样在百度上发布自己的文章
  • 搜索网站建设推广优化最近10条重大新闻
  • 外贸资讯网站爱站网关键词密度
  • web页面开发关键词优化公司哪家好
  • 织梦建设网站需要什么软件seo综合查询什么意思
  • wordpress论坛模版贵州seo推广
  • 台湾门户网站有哪些郑州seo方案
  • 丽水网站建设专业的公司输入搜索内容
  • 外贸网站产品关键词南京百度网站推广
  • 微信恢复官方网站seo关键词优化报价
  • 专业的设计网站有哪些网络运营seo是什么
  • 云阳营销型网站建设搜索引擎的优化和推广