当前位置:网站首页>Small example of SSM project, detailed tutorial of SSM integration
Small example of SSM project, detailed tutorial of SSM integration
2022-06-26 10:14:00 【Study diary】
SSM Project small example
Today, let's build a SSM The small example of the project is simple , The project template is still our template , Is that we are JavaWeb The last small example , Then SSM How do we achieve , Let's see later springboot How to realize
javaweb Project example in :https://blog.csdn.net/hello_list/article/details/124734814
First of all, let's build one SSM project , It's also SSM Project integration !
web Project creation
Environmental Science :idea2019 、maven、jdk1.8
Create a maven project , direct next


Now it is not a web project

Item right click , Choose this

We put web On the hook

This is a standard web Project , Compared with maven I think the self built one looks good , Ordinary maven The project looks the most pleasing to the eye

The project will be created , We run , Before running, let's put login.jsp page , I found a page on the Internet :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<style> .loginForm {
/* Frame height */ height: 350px; /* Border width */ width: 500px; /* Border color */ border: #4d4d4d solid 1px; /* Border fillet */ border-radius: 4px; /* shadow horizontal direction , In the vertical direction , A fuzzy distance */ box-shadow: 5px 5px 5px #4d4d4d; /* Upper boundary distance */ margin-top: 300px; /* Left boundary distance : Automatically */ margin-left: auto; /* Right border distance : Automatically */ margin-right: auto; /* user name 、 Password spacing */ padding: 20px 40px; } /* Put the user login in the middle */ .loginForm h2 {
text-align: center; } /* modify button attribute */ .button {
text-align: center; vertical-align: middle; } </style>
</head>
<body>
<div class="loginForm">
<h2> The user login </h2>
<form>
<div class="form-group">
<label for="exampleInputEmail1"> user name </label>
<input type="email" class="form-control" id="exampleInputEmail1" placeholder=" Please enter a user name ">
</div>
<div class="form-group">
<label for="exampleInputPassword1"> password </label>
<input type="password" class="form-control" id="exampleInputPassword1" placeholder=" Please input a password ">
</div>
<div class="checkbox">
<label>
<input type="checkbox"> agree!
<a href="#"> xxx Security protocols </a> And <a href="#"> xxx Privacy agreement </a>
</label>
</div>
<div class="button">
<input type="submit" class="btn btn-primary" value=" deng record "/>
</div>
</form>
</div>
</body>
</html>
Package run project , Hand to hand ,


If not packed , Pack your own bag , Do we see lib Catalog , The dependencies of our projects will not necessarily be added , Now there is no dependency , We may need to build one later , May be you idea Dissimilarity , Depending on the situation

Add our project


OK, Successful launch

Now let's start SSM Integrate , Then start writing examples
SSM Integrate
Everything begins with adding dependencies :
<dependencies>
<!--Junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- Database driven -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- Database connection pool -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!--Servlet - JSP -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--Mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<!--Spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
</dependencies>
Be sure to check that your dependencies have been added

Add one maven The filter
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
First we build spring frame :
General profile applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
We first spring Integrate mybatis
database.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/huanying?useSSL=false&useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=
mybatis Configuration file for :mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="com.xxx.pojo"/>
</typeAliases>
<mappers>
<package name="com.xxx.dao.mapper"/>
</mappers>
</configuration>
And then through spring Take over :spring-dao
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- Configuration integration mybatis -->
<!-- 1. Associate database file -->
<context:property-placeholder location="classpath:database.properties"/>
<!-- 2. Database connection pool -->
<!-- Database connection pool dbcp Semi automatic operation Can't automatically connect c3p0 Automation ( Automatically load the configuration file And set it in the object ) -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- Configure connection pool properties -->
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- c3p0 Private properties of connection pool -->
<property name="maxPoolSize" value="30"/>
<property name="minPoolSize" value="10"/>
<!-- Do not automatically close the connection commit -->
<property name="autoCommitOnClose" value="false"/>
<!-- Get connection timeout -->
<property name="checkoutTimeout" value="10000"/>
<!-- Number of retries when get connection failed -->
<property name="acquireRetryAttempts" value="2"/>
</bean>
<!-- 3. To configure SqlSessionFactory object -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- Inject the database connection pool -->
<property name="dataSource" ref="dataSource"/>
<!-- To configure MyBaties Global profile :mybatis-config.xml -->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<!-- 4. Configure scan Dao Interface package , Dynamic implementation Dao Interface injection to spring In the container -->
<!-- explain :https://www.cnblogs.com/jpfss/p/7799806.html-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- Inject sqlSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!-- Give need to scan Dao Interface package -->
<property name="basePackage" value="com.xuerxiriji.dao"/>
</bean>
</beans>
Let's just put service The next layer is finished :spring-service.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- scanning service dependent bean -->
<context:component-scan base-package="com.xuexiriji.service" />
<!-- Configure transaction manager -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- Inject the database connection pool -->
<property name="dataSource" ref="dataSource" />
</bean>
</beans>
OK, Next we integrate springMVC
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
<!--DispatcherServlet-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- Be sure to pay attention to : What we're loading here is the general configuration file , Before I was trapped here !-->
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--encodingFilter-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--Session Expiration time -->
<session-config>
<session-timeout>15</session-timeout>
</session-config>
</web-app>
spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- To configure SpringMVC -->
<!-- 1. Turn on SpringMVC Annotation driven -->
<mvc:annotation-driven />
<!-- 2. Static resource default servlet To configure -->
<mvc:default-servlet-handler/>
<!-- 3. To configure jsp Show ViewResolver view resolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 4. scanning web dependent bean -->
<!-- Actually, a scan like this , We can completely configure a general directness com.xuexiriji But since we want to stay mybatis and service and controller The sense of hierarchy is like this -->
<context:component-scan base-package="com.xuexiriji.controller" />
</beans>
Finally, it was put on us applicationContext.xml In total configuration
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="spring-dao.xml"/>
<import resource="spring-service.xml"/>
<import resource="spring-mvc.xml"/>
</beans>
We can see , Configured file idea Will automatically identify spring Small leaf

Wrote so many configuration files , The project has been set up , But I haven't written the code yet , Let's try a watch CRUD
Table structure , No mistake, we are javaweb Medium Good Cargo list
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for good
-- ----------------------------
DROP TABLE IF EXISTS `good`;
CREATE TABLE `good` (
`goodid` int(20) NOT NULL AUTO_INCREMENT,
`goodname` varchar(20) NOT NULL,
`surplus` int(20) NOT NULL,
`goodprice` int(20) NOT NULL,
PRIMARY KEY (`goodid`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of good
-- ----------------------------
INSERT INTO `good` VALUES ('1', ' Black forest ', '2', '15');
INSERT INTO `good` VALUES ('2', ' Cream cake ', '3', '13');
INSERT INTO `good` VALUES ('3', ' The fruit cake ', '2', '11');
INSERT INTO `good` VALUES ('4', ' Ice cream cake ', '5', '13');
INSERT INTO `good` VALUES ('9', ' Milk cake ', '34', '9');
INSERT INTO `good` VALUES ('11', ' Dried meat floss cake ', '13', '13');
INSERT INTO `good` VALUES ('12', ' Strawberry cake ', '99', '23');
INSERT INTO `good` VALUES ('13', ' Apple cake ', '32', '12');
INSERT INTO `good` VALUES ('14', ' Banana Cake ', '32', '12');
INSERT INTO `good` VALUES ('15', ' Pitaya cake ', '43', '43');
INSERT INTO `good` VALUES ('16', ' Orange cake ', '65', '31');
INSERT INTO `good` VALUES ('17', ' Apple ', '43', '54');
INSERT INTO `good` VALUES ('18', ' Pineapple ', '32', '32');
INSERT INTO `good` VALUES ('19', ' The oranges ', '435', '32');
INSERT INTO `good` VALUES ('20', ' Sichuan Pepper ', '43', '65');
INSERT INTO `good` VALUES ('21', ' garlic ', '23', '54');
INSERT INTO `good` VALUES ('22', ' egg ', '32', '43');
INSERT INTO `good` VALUES ('23', ' tomatoes ', '32', '43');
And that is javaweb Display page in , Because it's all jsp So it's all the same , So no change
We put index.jsp Change to our one
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="zh">
<head>
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
<title> Study diary </title>
</head>
<body>
<!-- Main content of the page -->
<main class="ftdms-layout-content">
<div style="margin-bottom: 90px;">
<div class="row" style="margin-top: 15px;">
<div class="col-lg-12">
<div class="card">
<div class="card-toolbar clearfix">
<form class="pull-right search-bar" method="post" action="GoodGetSearchServlet" role="form">
<div class="input-group">
<input type="hidden" name="search_field" id="search-field"
value="title">
<input type="text" class="form-control col-lg-4" value="${keyword }" name="keyword" placeholder=" Please enter name "/>
<div class="input-group-btn">
<button class="btn btn-default dropdown-toggle" id="search-btn" type="submit">
Search for
<!--<span class="caret"></span>-->
</button>
</div>
<!-- <ul class="dropdown-menu">
<li> <a tabindex="-1" href="javascript:void(0)" data-field="title"> title </a> </li>
<li> <a tabindex="-1" href="javascript:void(0)" data-field="cat_name"> The column </a> </li>
</ul>
-->
</div>
</form>
<div class="toolbar-btn-action">
<a class="btn btn-primary m-r-5 submenuitem"
href="goodinsert.jsp" data-id="link552" data-index="552">
newly added </a>
</div>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr>
<th width="5"><label
class="ftdms-checkbox checkbox-primary"> <input
type="checkbox" id="check-all"><span></span>
</label></th>
<th> Cargo number </th>
<th> Name of goods </th>
<th> The remaining quantity </th>
<th> Price of goods </th>
<th> operation </th>
</tr>
</thead>
<tbody>
<c:forEach items="${goods}" var="good">
<tr>
<td>${good.goodId}</td>
<td>${good.goodName}</td>
<td>${good.surplus}</td>
<td>${good.goodPrice}</td>
<td><font class="text-success"> normal </font></td>
<td>
<div class="btn-group">
<div class="toolbar-btn-action">
<a class="btn btn-success m-r-5 submenuitem" href="GoodGetByIdServlet?goodid=${good.goodId}" data-id="link553" data-index="553"><i class="ftsucai-edit-2"> edit </i></a>
<a class="btn btn-warning m-r-5 submenuitem" href="GoodDeleteByIdServlet?goodId=${good.goodId}" data-id="link554" data-index="554"><i class="ftsucai-edit-2"> Delete </i></a>
</div>
</div>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
<ul class="pagination">
<li class="disabled"><span>«</span></li>
<li class="active"><span>1</span></li>
<li><a class="submenuitem" href="pages_data.html#2">2</a></li>
<li><a href="#3">3</a></li>
<li><a href="#4">4</a></li>
<li><a href="#5">5</a></li>
<li><a href="#1">6</a></li>
<li><a href="#1">7</a></li>
<li><a href="#1">8</a></li>
<li class="disabled"><span>...</span></li>
<li><a href="#">14452</a></li>
<li><a href="#">14453</a></li>
<li><a href="#">»</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</main>
<!--End Main content of the page -->
<!-- new Bootstrap The core CSS file -->
<link
href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css"
rel="stylesheet">
<!-- jQuery file . Be sure to bootstrap.min.js Introduced before -->
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<!-- Abreast of the times Bootstrap The core JavaScript file -->
<script
src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script>
$(function() {
$('.search-bar .dropdown-menu a')
.click(
function() {
var field = $(this).data('field') || '';
$('#search-field').val(field);
$('#search-btn')
.html(
$(this).text()
+ ' <span class="caret"></span>');
});
});
</script>
</body>
</html>
Step by step , Start Good.java
package com.xuexiriji.pojo;
public class Good {
private int goodId;
private String goodName;
private int surplus;
private int goodPrice;
public int getGoodId() {
return goodId;
}
public void setGoodId(int goodId) {
this.goodId = goodId;
}
public String getGoodName() {
return goodName;
}
public void setGoodName(String goodName) {
this.goodName = goodName;
}
public int getSurplus() {
return surplus;
}
public void setSurplus(int surplus) {
this.surplus = surplus;
}
public int getGoodPrice() {
return goodPrice;
}
public void setGoodPrice(int goodPrice) {
this.goodPrice = goodPrice;
}
public Good(int goodId, String goodName, int surplus, int goodPrice) {
super();
this.goodId = goodId;
this.goodName = goodName;
this.surplus = surplus;
this.goodPrice = goodPrice;
}
public Good() {
super();
}
@Override
public String toString() {
return "Good [goodId=" + goodId + ", goodName=" + goodName + ", surplus=" + surplus + ", goodPrice=" + goodPrice
+ "]";
}
}
mapper Interface :goodDao.java
package com.xuexiriji.dao;
import com.xuexiriji.pojo.Good;
import java.util.List;
public interface GoodDao {
public List<Good> selectAllGood();
}
GoodMapper.xml
<?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.xuexiriji.dao.GoodDao">
<select id="selectAllGood" resultType="Good">
select * from good
</select>
</mapper>
service Here I will not face the interface :GoodService
@Service
public class GoodService {
@Autowired
GoodDao GoodDao;
public List<Good> selectAllGood(){
return GoodDao.selectAllGood();
}
}
Here we look at , As long as it is spring All the pipes have small leaves , And click to jump over , If you don't jump over , That's not taking over , Projects don't have to run , You can find the mistake

GoodController
@Controller
public class GoodController {
@Autowired
GoodService goodService;
@RequestMapping("/selectAllGood")
public String selectAllGood(Model model){
List<Good> goods = goodService.selectAllGood();
model.addAttribute("goods",goods);
return "index";
}
}
Let's go to the login page later , Login page form plus request path 
Launch our project , There is no test in writing so much , harm , I hope not to make a lot of mistakes , No error is reported to start successfully :
As expected, I must report an error , Say there is no such class , Actually, seeing me, I thought , Remember to start before web Did you say it during the project ,lib Dependency may not be added , So we have to pack again

So these bags have

Restart , Ook , Successful startup

Click login , Report errors :

This must be our mapper There is a problem with the interface , Take a look at our configuration , It should be , Because this time our class name has not been , Then don't change , Add one mapper.xml Just remember to register here

Ok, Test done

It's OK , I'm almost , This is my third time , Integrate this , In fact, the first integration , The second time is copy and paste , This is almost the first time to replicate , So a project that you have integrated yourself , Keep it , Maybe this is the base of your later projects .
Summary
Here we are going to give you a small example of integration , Let's integrate it here today , We'll do it later , See here , Don't you like it , It's OK to pay attention ,bye~
边栏推荐
- cento7.7安装ELK简单记录
- Introduction to libmagic
- What you need to know to test -- URL, weak network, interface, automation
- The basis of C language grammar -- factoring by function applet
- Automated testing -- Introduction and example of pytest framework
- Battery historian analyzes battery consumption
- Daily-used English phrases
- 测试实践——app 测试注意点
- The third-party extension package of thinkphp6.0 supports uploading to Alibaba cloud and qiniu cloud
- 【LeetCode】59. 螺旋矩阵 II
猜你喜欢

Deep learning (tentsorflow2. version) three good student performance problems (1)

Full introduction to flexboxlayout (Google official flexible implementation of flow layout control)

【LeetCode】59. 螺旋矩阵 II

c语言语法基础之——局部变量及存储类别、全局变量及存储类别、宏定义 学习

Redis notes (14) - persistence and data recovery (data persistence RDB and AOF, data recovery, mixed persistence)

mysql学习总结

String constant pool, class constant pool, and runtime constant pool

Redis novice introduction

WGCLOUD的web ssh服务端口是多少

Cmake / set command
随机推荐
What is a botnet
Deep learning (tentsorflow2. version) three good student performance problems (1)
Test instructions - common interface protocol analysis
Today's headline adaptation scheme code
Crawler related articles collection: pyppeter, burpsuite
In the fragment, the input method is hidden after clicking the confirm cancel button in the alertdialog (this is valid after looking for it on the Internet for a long time)
The basis of C language grammar -- function nesting, Fibonacci sum of recursive applet and factorial
LSP 是什么
WGCLOUD的web ssh服务端口是多少
Redis novice introduction
Svn command
存储过程测试入门案例
Automated testing -- on the coexistence of Unitest and pytest initialization
首批12家企业入驻!广州首个集中展销老字号产品专柜开张
Getting started with Flink - word statistics
Jupyter Notebook遇到的问题
P1296 whispers of cows (quick row + binary search)
Testing practice - App testing considerations
Leetcode intermediate node of linked list
Do you know the //go: instructions in the go source code, go:linkname?