JavaWeb Day09 Mybatis-基础操作01-增删改查
目录
环境准备
①Emp.sql
②Emp.java
一、删除
①Mapper层
②测试类
③预编译SQL(查看mybatis日志)
1.性能
2.安全
④总结
二、新增
①Mapper层
②测试类
③结果
④新增(主键返回)
1.Mapper层
2.测试类
⑤总结编辑
三、更新(修改)
案例
①Mapper层
②测试类
四、查询
(一)根据主键ID查询数据回显展示
①Mapper层
②测试类
③解决数据无法封装的问题
方案一:给字段起别名,让别名与实体类属性一致
结果编辑
方案二:通过mybatis中的@Results,@Result注解手动映射封装
结果编辑
方案三:Mybatis驼峰命名自动映射的开关 a-column =》 aColumn
结果
总结
思考
(二)根据条件查询数据回显展示
①Mapper层
②测试类
③结果
④Concat()
1.Mapper层
2.结果
五、XML映射文件(配置文件)
①EmpMapper.xml
②Mapper层
③测试类
④思考
⑤总结

环境准备


①Emp.sql
-- 部门管理
create table dept(id int unsigned primary key auto_increment comment '主键ID',name varchar(10) not null unique comment '部门名称',create_time datetime not null comment '创建时间',update_time datetime not null comment '修改时间'
) comment '部门表';insert into dept (id, name, create_time, update_time) values(1,'学工部',now(),now()),(2,'教研部',now(),now()),(3,'咨询部',now(),now()), (4,'就业部',now(),now()),(5,'人事部',now(),now());-- 员工管理
create table emp (id int unsigned primary key auto_increment comment 'ID',username varchar(20) not null unique comment '用户名',password varchar(32) default '123456' comment '密码',name varchar(10) not null comment '姓名',gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',image varchar(300) comment '图像',job tinyint unsigned comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师',entrydate date comment '入职时间',dept_id int unsigned comment '部门ID',create_time datetime not null comment '创建时间',update_time datetime not null comment '修改时间'
) comment '员工表';INSERT INTO emp(id, username, password, name, gender, image, job, entrydate,dept_id, create_time, update_time) VALUES(1,'jinyong','123456','金庸',1,'1.jpg',4,'2000-01-01',2,now(),now()),(2,'zhangwuji','123456','张无忌',1,'2.jpg',2,'2015-01-01',2,now(),now()),(3,'yangxiao','123456','杨逍',1,'3.jpg',2,'2008-05-01',2,now(),now()),(4,'weiyixiao','123456','韦一笑',1,'4.jpg',2,'2007-01-01',2,now(),now()),(5,'changyuchun','123456','常遇春',1,'5.jpg',2,'2012-12-05',2,now(),now()),(6,'xiaozhao','123456','小昭',2,'6.jpg',3,'2013-09-05',1,now(),now()),(7,'jixiaofu','123456','纪晓芙',2,'7.jpg',1,'2005-08-01',1,now(),now()),(8,'zhouzhiruo','123456','周芷若',2,'8.jpg',1,'2014-11-09',1,now(),now()),(9,'dingminjun','123456','丁敏君',2,'9.jpg',1,'2011-03-11',1,now(),now()),(10,'zhaomin','123456','赵敏',2,'10.jpg',1,'2013-09-05',1,now(),now()),(11,'luzhangke','123456','鹿杖客',1,'11.jpg',5,'2007-02-01',3,now(),now()),(12,'hebiweng','123456','鹤笔翁',1,'12.jpg',5,'2008-08-18',3,now(),now()),(13,'fangdongbai','123456','方东白',1,'13.jpg',5,'2012-11-01',3,now(),now()),(14,'zhangsanfeng','123456','张三丰',1,'14.jpg',2,'2002-08-01',2,now(),now()),(15,'yulianzhou','123456','俞莲舟',1,'15.jpg',2,'2011-05-01',2,now(),now()),(16,'songyuanqiao','123456','宋远桥',1,'16.jpg',2,'2010-01-01',2,now(),now()),(17,'chenyouliang','123456','陈友谅',1,'17.jpg',NULL,'2015-03-21',NULL,now(),now());
②Emp.java
package com.itheima.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.time.LocalDateTime;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {private Integer id;private String username;private String password;private String name;private Short gender;private String image;private Short job;private LocalDate entrydate;//日期private Integer deptId;private LocalDateTime createTime;//日期时分秒private LocalDateTime updateTime;
}
一、删除

mybatis的参数占位符#{}
①Mapper层
package com.itheima.mapper;import org.apache.ibatis.annotations.*;@Mapper
public interface EmpMapper {
// 根据ID删除数据@Delete("delete from emp where id=#{id}")
// public void deltte(Integer id);//返回值代表此次操作影响的记录数public int delete(Integer id);
}
②测试类
package com.itheima;import com.itheima.mapper.EmpMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class SpringbootMybatisCrudApplicationTests {@Autowiredprivate EmpMapper empMapper;@Testpublic void testDelete(){int delete= empMapper.delete(17);System.out.println(delete);}
}
③预编译SQL(查看mybatis日志)

1.性能
在JAVA项目中,要想执行SQL语句,需要链接上数据库,然后把SQL语句发送给数据库服务器,数据库服务器并不是立即执行SQL语句,而是先对SQL语句进行语法解析检查=》优化SQL=》编译SQL(编译为可执行函数)=》执行SQL语句
为了提高效率,数据库服务器会把优化编译的SQL缓存起来,下次再执行SQL,会先检查是否已有SQL缓存
然而因为三条语句的id不一致,数据库服务器会三次执行编译3次
如果采用预编译的SQL,不会把字段值直接拼接到SQL语句,而是使用?占位符,把SQL语句和字段值发送给数据库服务器,先对SQL语句进行语法解析检查=》优化SQL=》编译SQL(编译为可执行函数)=》执行SQL语句
执行SQL语句的时候,会用参数值替代掉占位符
为了提高效率,数据库服务器会把优化编译的SQL缓存起来,下次再执行SQL,会先检查是否已有SQL缓存
三条语句的id不一致,但是缓存中的SQL语句是一致的,数据库服务器只会执行编译1次
2.安全

预编译防止SQL注入的原理就是将敏感字符转义成普通字符

④总结

二、新增

当传递参数有多个的时候,可以用实体类来传递,占位符里写的是实体类的属性名(驼峰命名)
①Mapper层
package com.itheima.mapper;import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.*;@Mapper
public interface EmpMapper {@Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id,create_time, update_time)" +"values (#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime});")public void insert(Emp emp);
}
②测试类
package com.itheima;import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.time.LocalDate;
import java.time.LocalDateTime;@SpringBootTest
class SpringbootMybatisCrudApplicationTests {@Autowiredprivate EmpMapper empMapper;@Testpublic void testInsert(){//构造员工对象Emp emp=new Emp();emp.setUsername("Tom");emp.setName("tom");emp.setImage("1.jpg");emp.setGender((short)1);emp.setJob((short)1);emp.setEntrydate(LocalDate.of(200,1,1));emp.setCreateTime(LocalDateTime.now());emp.setUpdateTime(LocalDateTime.now());emp.setDeptId(1);//执行新增员工信息操作empMapper.insert(emp);
}
}
③结果

④新增(主键返回)

1.Mapper层
package com.itheima.mapper;import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.*;@Mapper
public interface EmpMapper {@Options(useGeneratedKeys = true,keyProperty = "id")@Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id,create_time, update_time)" +"values (#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime});")public void insert(Emp emp);
}
需要在插入后获得返回的主键,在方法上面加Options注解,指定两个属性,userGeneratedKeys=true代表我们要返回的主键,keyProperty代表把返回的主键往emp的Id属性封装
2.测试类
package com.itheima;import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.time.LocalDate;
import java.time.LocalDateTime;@SpringBootTest
class SpringbootMybatisCrudApplicationTests {@Autowiredprivate EmpMapper empMapper;@Testpublic void testInsert(){//构造员工对象Emp emp=new Emp();emp.setUsername("Tom4");emp.setName("tom4");emp.setImage("1.jpg");emp.setGender((short)1);emp.setJob((short)1);emp.setEntrydate(LocalDate.of(200,1,1));emp.setCreateTime(LocalDateTime.now());emp.setUpdateTime(LocalDateTime.now());emp.setDeptId(1);//执行新增员工信息操作empMapper.insert(emp);System.out.println(emp.getId());
}
}
⑤总结
三、更新(修改)
案例

业务
第一步,根据主键ID查询数据回显展示
第二步,在界面数据修改完毕后点击保存,此时进行修改操作,(根据主键ID修改,因为他不会改变)
点击编辑,会根据当前这条数据的主键Id来查询数据,并且将该记录回显展示出来,此时我们就可以在原有数据的基础上对其进行修改,操作完毕点击保存按钮,就会将该表单数据提交到服务端,最终修改表中的字段值
根据主键修改员工信息

①Mapper层
package com.itheima.mapper;import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.*;@Mapper
public interface EmpMapper {@Update("update emp set username=#{username},name=#{name},gender=#{gender},image=#{image}," +"job=#{job},entrydate=#{entrydate},dept_id=#{deptId},update_time=#{updateTime} where id=#{id};")public void update(Emp emp);
}
②测试类
package com.itheima;import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.time.LocalDate;
import java.time.LocalDateTime;@SpringBootTest
class SpringbootMybatisCrudApplicationTests {@Autowiredprivate EmpMapper empMapper;//更新员工@Testpublic void testUpdate(){//构造员工对象Emp emp=new Emp();emp.setId(18);emp.setUsername("Tom1");emp.setName("Tom1");emp.setImage("1.jpg");emp.setGender((short)1);emp.setJob((short)1);emp.setEntrydate(LocalDate.of(2000,1,1));emp.setUpdateTime(LocalDateTime.now());//执行更新员工操作empMapper.update(emp);}
}
四、查询
(一)根据主键ID查询数据回显展示

①Mapper层
package com.itheima.mapper;import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.*;@Mapper
public interface EmpMapper {//根据ID查询员工信息@Select("select * from emp where id=#{id};")public Emp getById(Integer id);
}
②测试类
package com.itheima;import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.time.LocalDate;
import java.time.LocalDateTime;@SpringBootTest
class SpringbootMybatisCrudApplicationTests {@Autowiredprivate EmpMapper empMapper; //根据ID查询员工信息@Testpublic void testGetById(){Emp emp=empMapper.getById(20);System.out.println(emp);}
}


③解决数据无法封装的问题
方案一:给字段起别名,让别名与实体类属性一致
修改Mapper层的接口中的SQL即可
public void update(Emp emp);//根据ID查询员工信息@Select("select id, username, password, name, gender, image, job, entrydate, dept_id deptId, create_time createTime, " +"update_time updateTime from emp where id=#{id};")public Emp getById(Integer id);
结果
方案二:通过mybatis中的@Results,@Result注解手动映射封装
修改Mapper层的接口中的SQL即可
//根据ID查询员工信息@Results({@Result(column = "dept_id",property ="deptID"),@Result(column = "create_time",property ="createTime"),@Result(column = "update_time",property ="updateTime")})@Select("select * from emp where id=#{id}")public Emp getById(Integer id);
@Results注解中的Values是@Result数组,每一个@Result表示映射一个字段和属性,column是表中的字段名,property是类中的属性名
结果
方案三:Mybatis驼峰命名自动映射的开关 a-column =》 aColumn
前提:表中字段名带下划线分割,实体中的属性名是驼峰命名
将字段名带下划线的自动封装为实体类中的驼峰式属性
在application.properties中配置Mybatis驼峰命名自动映射的开关,原来的Mapper层接口不需要修改
加入以下代码
#开启Mybatis驼峰命名自动映射的开关
mybatis.configuration.map-underscore-to-camel-case=true
结果

总结

思考
思考:为什么Java中实体类的属性名不更改为和数据库一样的下划线呢?
约定俗成,Java中实体类的属性名应该是驼峰命名
思考:为什么数据库中字段名不更改为与Java相同的驼峰命名呢?
数据库不区分大小写,在数据库用不了驼峰,如果你Java用了驼峰就映射不上
思考:数据库字段为什么要用下划线命名 ?
数据库字段使用下划线命名是一种规范化命名方法,目的是使数据命名更加清晰,易读性更强,并且易于被程序识别。
(二)根据条件查询数据回显展示

①Mapper层
package com.itheima.mapper;import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.*;import java.time.LocalDate;
import java.util.List;@Mapper
public interface EmpMapper {//条件查询员工信息@Select("select * from emp where name like '%${name}%' and gender=#{gender} and " +"entrydate between #{begin} and #{end} order by update_time desc ;")public List<Emp> list(String name, Short gender, LocalDate begin,LocalDate end);
}
entryDate是一个范围,而属性entrydate是一个值,无法封装范围,故而直接用参数传递
'%#{name}%' 单引号中的%表示要进行模糊匹配,而#{name}进行预编译后会被?取代,?是不能被放入单引号内的,
所以要把#改为$,$是字符串拼接,直接将传递过来的name和两个字符串%拼接起来就可以了

②测试类
package com.itheima;import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;@SpringBootTest
class SpringbootMybatisCrudApplicationTests {@Autowiredprivate EmpMapper empMapper;@Testpublic void testList(){List<Emp> empList= empMapper.list("z",(short)1,LocalDate.of(2010,1,1),LocalDate.of(2020,1,1));System.out.println(empList);}
}
③结果

④Concat()
然而使用$拼接字符串存在安全问题并且效率不高

故而可以使用mybatis中的concat()函数对字符进行拼接
concat('%',#{name},'%') ,这样#{name}就不会出现在单引号内
1.Mapper层
package com.itheima.mapper;import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.*;import java.time.LocalDate;
import java.util.List;@Mapper
public interface EmpMapper {@Select("select * from emp where name like concat('%',#{name},'%') and gender=#{gender} and " +"entrydate between #{begin} and #{end} order by update_time desc ;")public List<Emp> list(String name, Short gender, LocalDate begin,LocalDate end);}
2.结果
这里生成的就是预编译的SQL


五、XML映射文件(配置文件)

源文件放在java中,而配置文件放在resources中
官网:mybatis – MyBatis 3 | 简介
①EmpMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.EmpMapper">
<!-- resultType:单条记录所封装的类型--><select id="list" resultType="com.itheima.pojo.Emp">select * from emp where name like concat('%',#{name},'%') and gender=#{gender} andentrydate between #{begin} and #{end} order by update_time desc</select>
</mapper>
②Mapper层
package com.itheima.mapper;import com.itheima.pojo.Emp;
import org.apache.ibatis.annotations.*;import java.time.LocalDate;
import java.util.List;@Mapper
public interface EmpMapper {public List<Emp> list(String name, Short gender, LocalDate begin,LocalDate end);}
③测试类
package com.itheima;import com.itheima.mapper.EmpMapper;
import com.itheima.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
class SpringbootMybatisCrudApplicationTests {@Autowiredprivate EmpMapper empMapper;@Testpublic void testList(){List<Emp> empList= empMapper.list("z",(short)1,LocalDate.of(2010,1,1),LocalDate.of(2020,1,1));System.out.println(empList);}
}
④思考
mapper映射文件还有一个好处,修改sql语句不用重启项目
在方法上实现动态的条件查询就会使接口过于臃肿
如果操作语句多了,直接也在注解上面比较混乱
如果要做手动映射封装实体类的时候 xml方便,项目中会常用
用xml,因为查询的条件会变化,直接写在注解里面的话会使接口过于臃肿
这两个各自找各自对应的,原来是注解绑定,现在是通过路径和方法名绑定
多条件查询要写动态sql用映射文件比较合适,简单的可以直接注解方式
终于找到问题了,xml里的sql语句不能拼接,只能是一长条,运行才不报错
执行list()方法时,根据全限定类名找到对应的namespace ,再找到id为这个方法的SQL语句就可以执行了
⑤总结


相关文章:
JavaWeb Day09 Mybatis-基础操作01-增删改查
目录 环境准备 ①Emp.sql ②Emp.java 一、删除 ①Mapper层 ②测试类 ③预编译SQL(查看mybatis日志) 1.性能 2.安全 ④总结 二、新增 ①Mapper层 ②测试类 ③结果 ④新增(主键返回) 1.Mapper层 2.测试类 ⑤总结…...
2.前端调试(控制台使用)
消息堆叠 如果一条消息连续重复,而不是在新行上输出每一个消息实例,控制台将“堆叠”消息并在左侧外边距显示一个数字。此数字表示该消息已重复的次数。 如果您倾向于为每一个日志使用一个独特的行条目,请在 DevTools 设置中启用 Show times…...
Jenkins简介及Docker Compose部署
Jenkins是一个开源的自动化服务器,用于自动化构建、测试和部署软件项目。它提供了丰富的插件生态系统,支持各种编程语言和工具,使得软件开发流程更加高效和可靠。在本文中,我们将介绍Jenkins的基本概念,并展示如何使用…...
sqli-labs关卡14(基于post提交的双引号闭合的报错注入)通关思路
文章目录 前言一、回顾上一关知识点二、靶场第十四关通关思路1、判断注入点2、爆显位3、爆数据库名4、爆数据库表5、爆数据库列6、爆数据库关键信息 总结 前言 此文章只用于学习和反思巩固sql注入知识,禁止用于做非法攻击。注意靶场是可以练习的平台,不…...
【广州华锐互动】楼宇智能化VR虚拟教学系统
在如今的技术时代,教育行业正在逐步引入各种创新方法以提升教学质量。VR公司广州华锐互动开发的楼宇智能化VR虚拟教学系统就是其中的一种,它利用虚拟现实(VR)技术,为学生提供一种全新的、沉浸式的学习体验。 楼宇智能化VR虚拟教学系统涵盖综合…...
5. HTML常用标签
5.1 标签语义 学习标签是有技巧的,重点是记住每个标签的语义。简单理解就是指标签的含义。即这个标签是用来干嘛的。 根据标签的语义,在合适的地方给一个最为合理的标签。可以让页面结构给清晰。 5.2 标题标签 <h1>-<h6>(重要) HTML提供了…...
傅里叶分析(2)
在《傅里叶分析(1)》中,讲述了连续信号的傅里叶分析方法,本文讲述离散信号的傅里叶分析方法。 虽然电、声、光、机械振动等信号在物理上是连续函数,但在实际工程中,其通常为离散信号,即若干离散…...
Mysql8数据库如何给用户授权
转载自:https://blog.csdn.net/Numb_ZL/article/details/124222795 查看用户已有权限 SHOW GRANTS FOR [用户名];使用root用户授予所有权限 -- 授权 GRANT ALL PRIVILEGES ON [数据库名].[表明] TO [用户名][连接主机ip地址] WITH GRANT OPTION; -- 刷新权限 FLU…...
reticulate | R-python调用 | 安装及配置 | conda文件配置
reticulate | R-python安装及配置 | conda文件配置 1. 基础知识2. 安装reticulate from CRAN3. 包含了用于Python和R之间协同操作的全套工具,在R和Rstudio中均可使用4. 配置python环境4.1 4种环境配置方式4.2 miniconda 环境install_miniconda()报错一install_minic…...
VueRequest——管理请求状态库
文章目录 前言一、为什么选择 VueRequest?二、使用步骤1.安装2.用例 前言 VueRequest——开发文档 VueReques——GitHub地址 在以往的业务项目中,我们经常会被 loading 状态的管理、请求的节流防抖、接口数据的缓存、分页等重复的功能实现所困扰。每次开…...
GPT-4 Turbo 发布 | 大模型训练的新时代:超算互联网的调度与调优
★OpenAI;ChatGPT;Sam Altman;Assistance API;GPT4 Turbo;DALL-E 3;多模态交互;算力调度;算力调优;大模型训练;GH200;snowflake;AGI;A…...
Django路由层
路由层(urls) Django的路由层是负责将用户请求映射到相应的视图函数的一层。在Django的MVT架构中,路由层负责处理用户的请求,然后将请求交给相应的视图函数进行处理,最后将处理结果返回给用户。 在Django中,…...
关于session的不断变化问题
今天在帮同学解决一个小问题,差点阴沟翻船。 问题再现:他从github上拉了一个项目下来跑,结果发生跑不通问题出现在验证码一直不对。 我一看项目源码,验证码生成后存储再session中了,等用户发送请求验证的时候sessionI…...
eNSP启动路由器一直出#号、以为是安装配置winpcap的问题。。。。(以为是win10安装winpcap失败的问题。。。)
问题描述:eNSP启动一直出#号的一种参考方法_ensp一直#_Hong的博客-CSDN博客 原因是看了这篇博客,觉得ensp启动路由器的时候一直出现#号是因为winpcap安装的时候出现的问题。查看自己的winpcap安装成功之后的目录是: 然后因为那篇…...
时间序列预测:深度学习、机器学习、融合模型、创新模型实战案例(附代码+数据集+原理介绍)
本文介绍->给大家推荐一下我的时间序列预测实战专栏,本专栏平均质量分98分,而且本专栏目前免费阅读。其中涉及机器学习、深度学习、融合模型、个人创新模型、数据分析等一系列有关时间序列的内容,其中的实战案例不仅有简单的模型类似于机器…...
docker安装RocketMQ
1、RocketMQ基本概念 1.1 消息模型(Message Model) RocketMQ主要由Producer、Broker、Consumer三部分组成,其中Producer负责生产消息,Consumer负责消费消息,Broker负责存储消息。Broker在实际部署过程中对应一台服务…...
优秀智慧园区案例 - 珠海华发智慧园区,万字长文解析先进智慧园区建设方案经验
一、项目背景 珠海华发产业园运营管理有限公司(简称“产业园公司”)是2016年起连续五年跻身“中国企业500强”、国务院国企改革“双百企业”的珠海华发集团旗下的实体产业发展载体运营平台,依托“四园一基地”:中以国际产业园、信…...
毕业设计项目:基于java+springboot的共享单车信息网站
运行环境 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Ma…...
Redis 连接不上 WRONGPASS invalid username-password pair
1.我的RedisDesktopManager 可以连接 但是 Springboot远程使用Redis就是连不上 2.我的密码是 abc123.. 多了英文的 ..符号 在Springboot过不了,所以Redis密码尽量字母数字,不要其他符号...
三分钟学完Git版本控制常用指令
基本指令 git clone [url] 克隆远程仓库到本地 git clone https://gitee.com/mayun2023a/mprpc.git2.git checkout -b xxx 切换至新分支xxx(相当于复制了remote的仓库到本地的xxx分支上) 3.修改或者添加本地代码(部署在硬盘的源文件上) 4.g…...
SEO IP 地址对网站排名的重要性是什么
SEO IP 地址对网站排名的重要性是什么 在当前的互联网时代,网站排名直接关系到网站的流量和收益。作为网站运营者,我们都知道搜索引擎优化(SEO)是提升网站排名的关键。而在SEO的诸多因素中,IP地址的作用有时被忽视。S…...
利用快马AI平台,十分钟快速原型化你的互联网博客聚合页
最近在尝试做一个个人博客聚合页的原型,发现用传统方式从零开始写代码太费时间了。后来试用了InsCode(快马)平台,发现它特别适合快速验证互联网产品的想法。下面分享下我是怎么在十分钟内完成一个博客聚合页原型的。 明确需求 首先梳理了基本功能需求&am…...
VS2019项目重构实战:从命名空间到解决方案的全面重命名指南
1. 为什么需要全面重命名项目? 接手他人项目或者复用旧项目框架时,第一件事就是要给项目"改头换面"。这就像买二手房后的装修,不改名字总觉得住着别人的房子。我在团队协作中经常遇到这种情况:某个老项目要适配新业务&a…...
SpeedyBee F405 V4 55A飞塔到手后,除了接线你还需要注意这3个关键设置
SpeedyBee F405 V4 55A飞塔实战配置指南:从避坑到性能调优 当你拿到这块集成了飞控与电调的SpeedyBee F405 V4 55A飞塔时,官方说明书可能已经帮你完成了硬件组装的基础部分。但真正的挑战往往始于地面站连接成功后的那一刻——那些说明书里没细说的"…...
TCT亚洲展|金属3D打印创新产品抢先看
本届TCT亚洲展有大量创新产品亮相,有的是概念产品,有的则已经被用于最终使用。本期内容,跟随3D打印技术参考,来探索部分创新应用。气液双向散热器概念设计这款产品由漫格科技与中科祥龙联合开发,是一件基于某真实项目的…...
手把手教你用Flutter和OpenHarmony 4.0搭建一个离线视频通话App(附完整源码)
Flutter与OpenHarmony 4.0离线视频通话开发实战 在企业内部通信、教育机构互动等需要数据完全本地化的场景中,离线视频通话功能正成为刚需。本文将带你从零开始,基于Flutter框架和OpenHarmony 4.0原生能力,构建一个完全不依赖云服务的端到端视…...
ABAP ALV负数导出到Excel后无法合计
对金额字段进行以下处理即可CALL FUNCTION BAPI_CURRENCY_CONV_TO_EXTERN_9EXPORTINGcurrency <fs_alv>-waersamount_internal <fs_alv>-dmbtrIMPORTINGamount_external lv_external.<fs_alv>-dmbtr lv_external....
网传OpenAI“股权结构表”:微软“130亿美元投资”已升至“2283亿美元”-周红伟
一份疑似泄露的OpenAI股权结构表,将这家AI公司内部的利益分配格局首次摆在了公众面前。近日,一份据称来自OpenAI的股权结构表(cap table)在网络上广泛流传。据Celebrity Net Worth网站4月3日报道,该文件与OpenAI本轮融…...
文献阅读 260404-Effect of climate warming on the timing of autumn leaf senescence reverses after ...
Effect of climate warming on the timing of autumn leaf senescence reverses after the summer solstice 来自 <https://www.science.org/doi/10.1126/science.adf5098> ## Abstract: Structured Abstract INTRODUCTION Ongoing climate change is causing rapid shif…...
AOP 面向切面编程的实现原理
在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...
