尚硅谷SSM高级整合
2020.12.5–尚硅谷SSM高级整合
写在前面:本人是看完框神ssm框架系列,然后找的其他的ssm整合的资源来练手的,这个尚硅谷的是用eclipse写的,我觉得可以接受就练习了,需要资源的可以私信我
基本配置:
jdk 1.8
idea 2018
mysql 5.6
maven 3.6.2
tomcat 9.0.30
1,导入依赖
<dependencies><!--常用其他依赖--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version></dependency><!-- https://mvnrepository.com/artifact/junit/junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version><scope>test</scope></dependency><!--数据库驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!-- 数据库连接池 --><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.3</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>
2,前端框架
1,jQuery
使用下载版的
<script src="${pageContext.request.contextPath}/static/jsp/jquery-3.5.1.min.js"></script>
2,Bootstrap
使用在线cdn
<%--引入 Bootstrap,美化界面--%><link href="http://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
3,常用的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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"></beans>
<?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></configuration>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper></mapper>
4,mybatis的逆向工程
mybatis generator
1,导入依赖
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.7</version>
</dependency>
2,mybatis逆向工程xml文件配置
注意
- 需要注意的是xml配置文件的位置,要和pom文件是一级别的
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><context id="DB2Tables" targetRuntime="MyBatis3"><!--1,配置数据库连接--><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/ssm_crud"userId="root"password="123456"></jdbcConnection><javaTypeResolver ><property name="forceBigDecimals" value="false" /></javaTypeResolver><!--2,指定javabean生成位置--><javaModelGeneratortargetPackage="com.zp.pojo"targetProject=".\src\main\java"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" /></javaModelGenerator><!--3,指定sql映射文件生成位置--><sqlMapGeneratortargetPackage="com.zp.dao"targetProject=".\src\main\java"><property name="enableSubPackages" value="true" /></sqlMapGenerator><!--4,指定dao接口生成位置--><javaClientGenerator type="XMLMAPPER"targetPackage="com.zp.dao"targetProject=".\src\main\java"><property name="enableSubPackages" value="true" /></javaClientGenerator><!--5,table:指定每个表的生成策略--><table tableName="tbl_emp" domainObjectName="Employee"/><table tableName="tbl_dept" domainObjectName="Department"/></context>
</generatorConfiguration>
3,java运行文件
注意点:
- File configFile = new File(“mg.xml”);
- 这个是找到逆向工程配置文件的位置
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;import java.io.File;
import java.util.ArrayList;
import java.util.List;public class bgTest {public static void main(String[] args)throws Exception{List<String> warnings = new ArrayList<String>();boolean overwrite = true;File configFile = new File("mg.xml");ConfigurationParser cp = new ConfigurationParser(warnings);Configuration config = cp.parseConfiguration(configFile);DefaultShellCallback callback = new DefaultShellCallback(overwrite);MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);myBatisGenerator.generate(null);}
}
4,运行
- 运行成功就能生成响应的bean,dao接口以及mapper文件了
5,测试Mapper
先看下生辰的Mapper文件,如果需要修改下
因为需要联表查询,所以要加入引用对象
测试使用spring的单元测试
导入依赖
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test --> <dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.2.9.RELEASE</version><scope>test</scope> </dependency>
需要注意的是,因为导入了新的依赖,所以要在lib中引入依赖,
同时还要注意在spring各个依赖之间可能会因为版本问题而报错
6,spring 的单元测试
第10集:修改mybatis逆向工程所产生的mapper
1,新建两个带部门信息的查询
思考:字符集映射 result 和 association 的 区别 ;
<!--思考,id,result的区别--><association property="department" javaType="department"><id column="dept_id" property="deptId"/><result column="dept_name" property="deptName"/></association>
第11集:测试mapper
1,推荐使用spring的单元测试,可以自动注入我们需要的组件
原生的测试方法
- 1,创建spring IOC 容器
- 2,从容器中获取Mapper
使用spring 单元测试的步骤
- 1,导入spring test 依赖
- 2,使用 @ContextConfiguration 注解来创建 IOC 容器 其中的 location 方法会定位配置文件的位置; 以及使用 @RunWith 来指定使用哪种单元测试 这里使用 :@RunWith(SpringJUnit4ClassRunner.class)
- 3,3,直接@AutoWired 要使用的组件(AutoWired : spring 的自动装配)
批量插入
1,首先在配置文件中写一个可以批量插入的SqlSession,就是SqlSessionTemplate
<!--5,创建一个可以执行批量操作的sqlsession;这是spring 和 mybatis 整合使用的SqlSessionTemplate--><bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/><constructor-arg name="executorType" value="BATCH"/></bean>
第12集 :查询(采用分页)
- 1,访问index.jsp 页面
- 2,index.jsp 页面发出查询员工列表请求
- 3,EmployeeController 来接收请求,查出员工数据
- 4,来到list.jsp 页面来展示
分页查询
1,在pom中导入pagehelper的依赖
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.10</version></dependency>
2,在mybatis的配置文件中加入plugins(插件)(按照分页使用文档来)
<!--3,分页pagehelper5--><plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"><!--分页参数合理化--><property name="reasonable" value="value1"/></plugin></plugins>
3,就是具体的使用方法了
13集 :使用spring单元测试测试分页请求
MockMvc :意思是虚拟的mvc请求,获得处理结果
import org.mybatis.generator.api.MyBatisGenerator; import org.mybatis.generator.config.Configuration; import org.mybatis.generator.config.xml.ConfigurationParser; import org.mybatis.generator.internal.DefaultShellCallback;import java.io.File; import java.util.ArrayList; import java.util.List;public class bgTest {public static void main(String[] args)throws Exception{List<String> warnings = new ArrayList<String>();boolean overwrite = true;File configFile = new File("mg.xml");ConfigurationParser cp = new ConfigurationParser(warnings);Configuration config = cp.parseConfiguration(configFile);DefaultShellCallback callback = new DefaultShellCallback(overwrite);MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);myBatisGenerator.generate(null);} }
第14集 搭建分页页面
web路径问题
不以/开始的相对路径,找资源,以当前路径为基准,经常容易出现问题
以/开始的相对路径,找资源,以服务器路径为基准(http://localhost:3306); 需要加上项目名开始,
- http://localhost:3306/crud
<%/*java代码,来获取项目路径*/pageContext.setAttribute("APP_PATH",request.getContextPath());%>
使用bootstrap完成员工列表页面
引用bootstrap
<%--引入 Bootstrap,美化界面--%> <link href="http://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
第15集 显示分页数据
首先大致分三步;(使用bootstrap)
首先是当前页码高亮
点击页码跳转
前一页,后一页,首页,末页的逻辑实现
<%--2,分页栏--%><div class="col-md-6"><nav aria-label="Page navigation"><ul class="pagination"><li><a href="${APP_PATH}/emps?pn=1">首页</a></li><c:if test="${pageInfo.hasPreviousPage}"><li><a href="${APP_PATH}/emps?pn=${pageInfo.pageNum-1}" aria-label="Previous"><span aria-hidden="true">«</span></a></li></c:if><c:forEach items="${pageInfo.navigatepageNums}" var="page_Num"><c:if test="${pageInfo.pageNum== page_Num}"><li class="active"><a href="#">${page_Num}</a></li></c:if><c:if test="${pageInfo.pageNum != page_Num}"><li><a href="${APP_PATH}/emps?pn=${page_Num}">${page_Num}</a></li></c:if></c:forEach><c:if test="${pageInfo.hasNextPage}"><li><a href="${APP_PATH}/emps?pn=${pageInfo.pageNum+1}" aria-label="Next"><span aria-hidden="true">»</span></a></li></c:if><li><a href="${APP_PATH}/emps?pn=${pageInfo.pages}">末页</a></li></ul></nav></div>
第16集 使用json查询
- 原因是B/S的缺陷,如果客户端不是浏览器,相对比较麻烦
- 查询 ajax
- 1,index.jsp 页面直接发送ajax请求进行员工分页数据的查询
- 2,服务器将查出的数据,以json字符串的形式返回给浏览器
- 3,浏览器收到json字符串,可以使用js对json进行解析,使用js通过dom增删改来改变页面
- 4,返回json,实现客户端的无关性(意思就是无论客户端是什么形式,都可以正常请求和响应)
- 注意点
- 使用json(需要导入Jackson Databind 依赖)
- 、
第17集 使用ajax重新构建index首页
<%--引入 Bootstrap,美化界面--%> <link href="http://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> <%--引入jquery:(本地引入模式)--%> <script src="${pageContext.request.contextPath}/static/js/jquery-3.5.1.min.js"></script>
append() 与 appendTo()
//append()方法执行完成以后返回的还是原来的方法 (比如下例,返回到
//同时需要加入要拼接到的地方(appendTo())
.appendTo("#emps_table tbody");
第18集 查询 使用ajax构建分页条
//3,解析并显示分页条function build_page_nav(result) {//page_nav_area 要插入的地址//ul 是li 的父元素var ul = $("<ul></ul>").addClass("pagination");var FirstPageLi = $("<li></li>").append($("<a></a>").append("首页").attr("href","#"));var prePageLi = $("<li></li>").append($("<a></a>").append("«"));var nextPageLi = $("<li></li>").append($("<a></a>").append("»"));var NextPageLi = $("<li></li>").append($("<a></a>").append("末页").attr("href","#"));//添加首页和前一页的提示ul.append(FirstPageLi).append(prePageLi);// 取出来的是页码号$.each(result.extend.PageInfo.navigatepageNums,function (index,item) {//index :是下标 item :是要遍历的元素var NumLi = $("<li></li>").append($("<a></a>").append(item));//遍历中给ul添加li页码ul.append(NumLi);})//添加末页和下一页的提示ul.append(nextPageLi).append(NextPageLi);//把ul添加到nav中(nav指的是分页0)var navEle = $("<nav></nav>").append(ul);//添加要拼接到的地址navEle.appendTo("#page_nav_area")}
jquery 语法,可以查看jquery的开发手册
attr()是用来 attr(“href”,"#") 实现超链接这样的
其次就是使用ajax,jquery 语法来拼接的时候,要注意整体的构成位置
第19集 查询 实现分页条的点击事件以及具体逻辑
1,首先要实现 页码的禁用和激活状态(即页面的效果显示)
链接在不同情况下可以定制。你可以给不能点击的链接添加
.disabled
类、给当前页添加.active
类。if (result.extend.PageInfo.hasPreviousPage == false){FirstPageLi.addClass("disabled");prePageLi.addClass("disabled");}
if (result.extend.PageInfo.hasNextPage == false) {nextPageLi.addClass("disabled");NextPageLi.addClass("disabled");}
if (result.extend.PageInfo.pageNum == item) {NumLi.addClass("active");}
2,实现页面的动作 ,即添加点击跳转事件
//点击跳转 NumLi.click(function () {to_page(item);});
如果只是这样写的话会出现之前的数据也出现在页面上
修改:在点击刷新之前先清空之前的数据
//在页面刷新之前先清空之前的数据$("#emps_table tbody").empty();//这是清空员工列表 $("#page_info_area").empty();//这是清空分页数据$("#page_nav_area").empty();//这是清空分页条
然后是实现点击首页末页,上一页下一页
//为元素添加点击翻页事件//FirstPageLi:点击跳转首页FirstPageLi.click(function () {to_page(1);});//prePageLi :点击跳转前一页prePageLi.click(function () {to_page(result.extend.PageInfo.pageNum-1);});//nextPageLi :点击跳转下一页nextPageLi.click(function () {to_page(result.extend.PageInfo.pageNum+1);});//NextPageLi :点击跳转到最后一页NextPageLi.click(function () {to_page(result.extend.PageInfo.pages);});
最后出现的问题是 :虽然写了判断首页等禁用的逻辑,但是因为添加了点击事件,尽管是出现不能点击的提示,但是点击依然会发出请求而且分页信息也会更新,所以
reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。
在mybatis的配置文件里添加一个分页合理化,将其值设置为true
<!--3,分页pagehelper5--><plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"><!--分页参数合理化--><property name="reasonable" value="true"/></plugin></plugins>
最后直接把判断是否有末页等逻辑与点击事件结合一起,当判断没有下一页的时候直接没有点击事件,有下一页的时候才能有点击事件
//判断时候有下一页和末页if (result.extend.PageInfo.hasNextPage == false) {nextPageLi.addClass("disabled");NextPageLi.addClass("disabled");}else{//nextPageLi :点击跳转下一页nextPageLi.click(function () {to_page(result.extend.PageInfo.pageNum+1);});//NextPageLi :点击跳转到最后一页NextPageLi.click(function () {to_page(result.extend.PageInfo.pages);});}
第20集 实现新增
1,在index.jsp 页面点击“新增”
2,弹出新增对话框
3,去数据库查询部门列表,显示在对话框中
4,用户输入数据完成保存
我出现的问题,由于这里的新增是使用bootstrap的js的插件来实现的,我以为引入了bootstrap的css的cdn就完事了,但是在引入js的插件以后运行并不成功,在浏览器的调试界面显示js插件引入出现错误,于是我又返回bootstrap官网查看,在检查完js插件使用并没有任何问题,于是我再次进行调试还是出现了错误,于是我又看了下官网的教程,发现css和js插件是需要分别引入的,而且在引入js插件之前是需要把jquery的引入的
<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) --><script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script><!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 --><script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
使用bootstrap 提供的 css样式来填充 首页新增按钮的模态框
<!-- 首页新增按钮的模态框 --> <div class="modal fade" id="empAddBtnModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button><h4 class="modal-title" id="myModalLabel">新增员工</h4></div><div class="modal-body"><%--表单--%><form class="form-horizontal"><div class="form-group"><label class="col-sm-2 control-label">empName</label><div class="col-sm-10"><input type="text" name="empName" class="form-control" id="input_add_empName" placeholder="empName"></div></div><div class="form-group"><label class="col-sm-2 control-label">email</label><div class="col-sm-10"><input type="text" name="email" class="form-control" id="input_add_email" placeholder="email"></div></div><%--复选框--%><div class="form-group"><label class="col-sm-2 control-label">gender</label><div class="col-sm-10"><label class="radio-inline"><input type="radio" name="inlineRadioOptions" id="input_add_gender1" value="M" checked="checked"> 男</label><label class="radio-inline"><input type="radio" name="inlineRadioOptions" id="input_add_gender2" value="F"> 女</label></div></div><%--下拉列表--%><div class="form-group"><label class="col-sm-2 control-label">email</label><div class="col-sm-4"><select class="form-control"></select></div></div></form></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">关闭</button><button type="button" class="btn btn-primary">保存</button></div></div></div> </div>
第21集 实现模态框中下拉框选择部门信息
1,查出部门信息,显示在下拉框中
写一个查询部门信息的方法,并且绑定在点击新增的按钮上
//这里是点击新增按钮弹出模态框$("#emp_add_btn_modal").click(function () {getDepts();$("#empAddBtnModal").modal({//发送ajax请求,查出部门信息,显示在下拉列表中//弹出模态框backdrop:"static"});});//查出部门信息,显示在下拉列表中function getDepts() {$.ajax({url:"${APP_PATH}/depts",type:"GET",success:function (result) {// console.log(result);//{code: 100, msg: "处理成功!",…}// extend: {depts: [{deptId: 1, deptName: "开发部"}, {deptId: 2, deptName: "测试部"}]}$.each(result.extend.depts,function () {var optionEle = $("<option></option>").append(this.deptName).attr("value",this.deptId);optionEle.appendTo( $("#select_add_dept"));});}});}
创建部门的控制类,创建部门的service以及业务实现类,并调用查询方法
//DepartmentController 中写的 /** 返回所有的部门信息* */@RequestMapping("/depts")@ResponseBodypublic Msg getDepts(){//查出所有部门信息List<Department> list = departmentService.getDepts();return Msg.success().add("depts",list);}
DepartmentService 中没啥好写的
List<Department> getDepts();//就是创建一个新的方法
//这是DepartmentServiceImpl中的 public List<Department> getDepts() {List<Department> list = departmentMapper.selectByExample(null);return list;}
注意点,由于我使用的是配置文件注册的
<!--2,注入spring容器--><bean id="EmployeeServiceImpl" class="com.zp.service.EmployeeServiceImpl"><property name="employeeMapper" ref="employeeMapper"/></bean>
所以要手动把部门添加到spring容器中
<!--2,注入spring容器--><bean id="EmployeeServiceImpl" class="com.zp.service.EmployeeServiceImpl"><property name="employeeMapper" ref="employeeMapper"/></bean><bean id="DepartmentServiceImpl" class="com.zp.service.DepartmentServiceImpl"><property name="departmentMapper" ref="departmentMapper"/></bean>
其中我最开始的时候使用的是@Service,注解的方式,爆了一个空指针的异常,具体是因为啥我现在也没有头绪
最后就是把得到的部门的信息在下拉框中遍历出来
$.each(result.extend.depts,function () {var optionEle = $("<option></option>").append(this.deptName).attr("value",this.deptId);optionEle.appendTo( $("#select_add_dept"));});
其中在选择拼接到的地址的时候,除了**KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲select_add_dept…("#empAddBtnModal select") ,不过也是因为我们这个模态框的特殊,因为它只用了这一个下拉框,所以可以不用id
99,出现的新点
- 1,mybatis的逆向工程
- 2,spring 的单元测试
- 3,数据的分页显示
尚硅谷SSM高级整合相关推荐
- 尚硅谷MySQL高级JAVA版
尚硅谷MySQL高级JAVA版 1.MySQL环境 1.1.环境安装 1.2.安装位置 1.3.修改字符集 1.4.配置文件 2.MySQL逻辑架构 3.存储引擎 4.SQL性能下降的原因 5.SQL ...
- SSM高级整合-crud
学无止境,项目相关的视频: 登录 - 谷粒学苑 - Java培训|大数据培训|前端培训|HTML5培训|Linux运维培训_程序员一站式IT在线学习平台 - Powered By EduSoho 一. ...
- 尚硅谷JavaScript高级教程(javascript实战进阶)学习笔记
前言 这个是我学习过程中的笔记,分享给大家,希望对大家有用. 学习内容是尚硅谷JavaScript高级教程(javascript实战进阶),这里是视频链接. 我在前面有两篇对于web前端HTML和CS ...
- 尚硅谷MySQL高级学习笔记 -- 1.MySQL 的架构介绍
1.MySQL 简介 什么是 MySQL? MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中 ...
- 【JVM】最全笔记(黑马+尚硅谷+张龙整合笔记)
本身整合了如下视频的笔记,并进行了整理:尚硅谷周阳.张龙.黑马程序员 黑马ppt非常好:https://download.csdn.net/download/hancoder/12834607 本文及 ...
- SSM高级整合项目实战
SSM-CRUD ssm:SpringMVC+Spring+MyBatis CRUD: Create(创建)Retrieve(查询)Update(更新)Delete(删除) ps:此项目笔者写了很详细 ...
- 尚硅谷-SpringBoot高级-检索-Elasticsearch快速入门
前面我们安装好了ElasticSearch,我以后就简称他为ES,而一些人还不知道基本的使用,那我们接下来做一个快速入门,了解一下他的使用方法,以及一些基本概念,方便我们后来整合,那么要学习ES最好的 ...
- SSM高级整合_非Maven控制版本下SSM高级整合
一.环境搭建 1.创建动态web工程 2.引入jar包 3.创建目录结构 4.创建数据库的配置文件(.properties) jdbc.driver=com.mysql.jdbc.Driver jdb ...
- 尚硅谷MySQL高级学习笔记
数据库MySQL学习笔记高级篇 文章目录 数据库MySQL学习笔记高级篇 写在前面 1. mysql的架构介绍 mysql简介 概述 高级Mysql mysqlLinux版的安装 mysql配置文件 ...
最新文章
- 高分文章精选 | 纳米孔宏基因组测序的表现
- 卷积网络基础知识---Group Convolution分组卷积
- BZOJ 2502: 清理雪道 [最小流]
- android 刷机 备份,安卓刷机后如何还原以前ROM和系统备份
- 史上最轻量K8s发行版,赋能边缘计算
- php 添加内链插件,ecshop自动内链插件seo优化插件
- 机器人学习--各种学习资源(初稿)
- asp.net core输出中文乱码的问题
- android字符串复制到剪贴板
- pandas学习笔记五之pandas合并
- 一文带你解读Volcano架构设计与原理
- Android刷新当前页面
- IDEA 常用设置 与 常用操作(一)
- java not present_Java 8的可选的function.ifPresent和if-not-present的功能风格?
- 项目意义、必要性分析及需求分析的区别
- matlab数学实验课件5,matlab_intro_西安交通大学-数学实验教案_ppt_大学课件预览_高等教育资讯网...
- python租房_【Python】租房经历总结—–我是如何2天找到合适租房的(房东直租)简单粗暴...
- ABP 使用HttpClient调用WebAPI授权问题Unauthorized
- 某笔试的一道简单题目
- 移动开发者周刊第一期
热门文章
- sap项目部署到服务器,本地项目部署到云服务器
- 高德地图API简单使用——地名转经纬度
- Intellij IDEA)- git - 创建项目
- 第15届(2018)全国大学生信息安全与对抗技术竞赛(ISCC2018)通知
- 健身中心健身管理系统的设计与实现(源码+数据脚本+论文+技术文档)
- 机器学习:非监督学习
- VQA系列论文(五)
- 【STM32F407】第4章 RTX5操作系统移植(MDK AC5)
- STM32CubeMX-HAL库开发笔记(常用语句)-基于Proteus仿真
- 制作价目表,用小程序快速制作属于自己的价目表