发布:2023/12/7 15:44:50作者:大数据 来源:大数据 浏览次数:552
条目名称 | .Net(C#) | Spring(java) | 内容描述 |
---|---|---|---|
开发工具 | Visual Studio | Idea/Eclipse/MyEclipse | VS2019/2021、Idea2021 |
包管理器 | nuget | Maven | |
相关依赖 | .net | JDK | .net core和.net framework已经整合为.net5或.net6;JDK1.8、JDK11/16等 |
命名空间 | namespace | package | namespace abc.com;package abc.com |
引用命名空间 | using | import | namespace abc.com;package abc.com |
大小写敏感 | 区分 | 严格区分 | web地址访问时对于.net大小不区分,而spring严格区分 |
类文件扩展名 | .cs | .java | |
视图文件 | Razor | JSP/Thymeleaf/FreeMarker | |
编译生成 | .dll/.exe | .jar/.war | |
部署代理 | IIS/Ngix | Tomcat/Appache | 需要安装上面的依赖 |
ORM框架 | EF/Dapper/SqlSugar | MyBatis/Hibernate/ | Spring Data JPA和EF差不多,可以根据类生成表结构 |
静态文件存储 | Views与wwwroot | resources/templates与static | static下存静态文件,templates存视图模板,视图中写路径时不用写wwwroot和static |
配置文件 | appsettings.json/web.config | application.yml/ application.properties webapp/WEB-INF/web.xml |
.net framework与.net ocre/.net配置也有差异。 spring boot与spring mvc配置文件有差异 |
启动文件 | Startup.cs | xxApplication | DemoApplication |
请求路由 | [Route("/index")] | @RequestMapping("/index") | 修饰在controller或handler类上和其方法名上 |
View方法返回类型 | IActionResult/ActionResult | ModleAndView | |
控制器 | mvc继承Controller [Route("api/[controller]")] [ApiController]继承ControllerBase |
@Controller和@ResponeBody @RestController |
|
Restful | [HttpGet] [HttpPost] [HttpPut] [HttpDelete] |
@RequestMapping("index") @RequestMapping(value = "index",method = RequestMethod.POST) @RequestMapping(value = "index",method = RequestMethod.PUT) @RequestMapping(value = "index",method = RequestMethod.DELETE) |
spring另一种注解 @GetMapping("index") @PostMapping("index") @PutMapping("index") @DeleteMapping("index") 获取参数POST使用 @RequestBody get使用@PathVariable @RequestParam |
View中数据交互 | @Model、@ViewBag、@ViewData["user"] | ${user} | MVC视图中获取对象 |
控制器与视图数据传递与返回值 | ViewBag.Student、ViewData["student"] return View()、Redirect、RedirectToAction |
modelAndView.addObject("student",student) ModelAndView中的setViewName("/user/index")、modelAndView.addObject("student","hello student"); |
1)forword(默认) 一般用于用户登录的时候,根据角色转发到相应的模块2) redirect:/user/index一般用于用户注销登录时返回主页面或者跳转到其他网站 |
热加载 | 运行旁边红色火焰图标 | 运行旁边绿色斧头重新编译Ctr+F9/Ctr+Shift+F9 | vs热加载,老板娘vs2019.16以上及vs2021 |
获取当前日期时间 | DateTime.Now | new Date() | SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z"); Date date = new Date(); System.out.println(formatter.format(date)); |
Controller控制器 | [ [ ] |
] @RestController @RequestMapping("book") |
|
RESTful方法 | [HttpGet][HttpPost] | @GetMapping@PostMapping | put和patch和delete同理 |
Lambda表达式 | C#(使用(入参)=>{方法处理体},与要传入或要实例化的委托方法签名相同即可) | JAVA(使用(入参)->{方法处理体},与要传入或要实例化的方法签名相同,且传入或实例化的类型必需是函数式接口【可以理解为自定义的委托类型】,注意与C#不同,Lambda方法体内不能引用外部非final的变量,与C# Lambda有本质不同) | |
API | 描述 | 请求正文 | 响应正文 |
---|---|---|---|
GET /api/todoitems |
获取所有待办事项 | None | 待办事项的数组 |
GET /api/todoitems/{id} |
按 ID 获取项 | None | 待办事项 |
POST /api/todoitems |
添加新项 | 待办事项 | 待办事项 |
PUT /api/todoitems/{id} |
更新现有项 | 待办事项 | None |
DELETE /api/todoitems/{id} |
删除项 | None | None |
C# .net core RESTful
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using TodoApi.Models; namespace TodoApi.Controllers { [Route("api/[controller]")] [ApiController] public class TodoItemsController : ControllerBase { private readonly TodoContext _context; public TodoItemsController(TodoContext context) { _context = context; } // GET: api/TodoItems [HttpGet] public async Task<ActionResult<IEnumerable<TodoItemDTO>>> GetTodoItems() { return await _context.TodoItems .Select(x => ItemToDTO(x)) .ToListAsync(); } // GET: api/TodoItems/5 [HttpGet("{id}")] public async Task<ActionResult<TodoItemDTO>> GetTodoItem(long id) { var todoItem = await _context.TodoItems.FindAsync(id); if (todoItem == null) { return NotFound(); } return ItemToDTO(todoItem); } // PUT: api/TodoItems/5 // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 [HttpPut("{id}")] public async Task<IActionResult> UpdateTodoItem(long id, TodoItemDTO todoItemDTO) { if (id != todoItemDTO.Id) { return BadRequest(); } var todoItem = await _context.TodoItems.FindAsync(id); if (todoItem == null) { return NotFound(); } todoItem.Name = todoItemDTO.Name; todoItem.IsComplete = todoItemDTO.IsComplete; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) when (!TodoItemExists(id)) { return NotFound(); } return NoContent(); } // POST: api/TodoItems // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 [HttpPost] public async Task<ActionResult<TodoItemDTO>> CreateTodoItem(TodoItemDTO todoItemDTO) { var todoItem = new TodoItem { IsComplete = todoItemDTO.IsComplete, Name = todoItemDTO.Name }; _context.TodoItems.Add(todoItem); await _context.SaveChangesAsync(); return CreatedAtAction( nameof(GetTodoItem), new { id = todoItem.Id }, ItemToDTO(todoItem)); } // DELETE: api/TodoItems/5 [HttpDelete("{id}")] public async Task<IActionResult> DeleteTodoItem(long id) { var todoItem = await _context.TodoItems.FindAsync(id); if (todoItem == null) { return NotFound(); } _context.TodoItems.Remove(todoItem); await _context.SaveChangesAsync(); return NoContent(); } private bool TodoItemExists(long id) { return _context.TodoItems.Any(e => e.Id == id); } private static TodoItemDTO ItemToDTO(TodoItem todoItem) => new TodoItemDTO { Id = todoItem.Id, Name = todoItem.Name, IsComplete = todoItem.IsComplete }; } } |
java spring RESTful
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
@RestController class EmployeeController { private final EmployeeRepository repository; EmployeeController(EmployeeRepository repository) { this.repository = repository; } // Aggregate root // tag::get-aggregate-root[] @GetMapping("/employees") List<Employee> all() { return repository.findAll(); } // end::get-aggregate-root[] @PostMapping("/employees") Employee newEmployee(@RequestBody Employee newEmployee) { return repository.save(newEmployee); } // Single item @GetMapping("/employees/{id}") Employee one(@PathVariable Long id) { return repository.findById(id) .orElseThrow(() -> new EmployeeNotFoundException(id)); } @PutMapping("/employees/{id}") Employee replaceEmployee(@RequestBody Employee newEmployee, @PathVariable Long id) { return repository.findById(id) .map(employee -> { employee.setName(newEmployee.getName()); employee.setRole(newEmployee.getRole()); return repository.save(employee); }) .orElseGet(() -> { newEmployee.setId(id); return repository.save(newEmployee); }); } @DeleteMapping("/employees/{id}") void deleteEmployee(@PathVariable Long id) { repository.deleteById(id); } } |
名称 | C# | Java | 说明描述 |
int | int/Integer | java有包装类 | |
bool | boolean | ||
string | String | ||
float | float/Float | ||
double | double/Double | ||
sealed | final | ||
const | static final | ||
Dictionary<T,K> | Map | ||
Dictionary<T,V>/TreeNode | HashMap/HashTable/LinkedHashMap/TreeMap | ||
Tuple<T1,T2...T8> | |||
List/ArrayList/LinkedList | List/ArrayList/LinkedList | ||
HashSet | Set/HashSet/LinkedHashSet/TreeSet | set不存放重复 | |
Collection是单列集合的根接口,主要用于存储一系列符合某种规则的元素,它有两个重要的子接口List和Set。
List接口的特点是元素有序可重复
Set接口的特点是元素无序,不可重复
ArrayList和LinkedList是List接口的实现类
HashSet和TreeSet是Set接口的实现类
Map是双列集合的根接口,特用蓝色标注,用于存储具有键(Key),值(Value)映射关系的元素,每个元素都包含一个键-值对,在使用该集合时可以通过指定的键找的对应的值。
Map为独立接口
HashMap和TreeMap是Map接口的实现类
注: 假设Collection接口里有a,b,c三个方法,list接口里有d,f方法,set接口里有e,g方法,则它们的实现类里就拥有不同的方法。
C#元组Tuple与值元组ValueTuple
(int x1, string s1) = (1, "a1");
var (x2, s2) = (2, "a2");
int x=x1;
string s=s2;
Spring Framework JdbcTemplate 参考文档
© Copyright 2014 - 2024 柏港建站平台 ejk5.com. 渝ICP备16000791号-4