在启动类里没有配@MapperScan
pom.xml里缺少依赖
antd版本不对
换行实现:print(‘’) 单引号里写要输出的内容
不换行实现:python (’’,end=’’)
第一个单引号里写要输出的内容,第二个单引号填写与另一个输出内容之间相隔的内容
for (int i = 0; i < logsList.size(); i++) {
if(logsList.get(i).get("is_password_less").equals("0")) {
logsList.get(i).put("is_password_less", "否");
}else {
logsList.get(i).put("is_password_less", "是");
}
}
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS"); //精确到毫秒
String suffix = fmt.format(new Date());
传入sql语句中的参数形式不对
将
<select id="selectAllInterface" resultMap="interfaces">
select * from interface
</select>
中的resultMap错误的写成了resultType
<Select placeholder="请选择接口所属类别" >
{this.state.type.map(typeNameOption)}
</Select>
未定义type为数组类型 type:[]
例如:将{this.add}换为{self.add}
例如:向一个集合中添加一个实体类时,实体类中是有数据的但是却显示实体类为null,可能原因是只是声明了集合,并没有new
查看端口号进程
表明已经关闭了
注意:tomcat在已经启动或者已经关闭的情况下再次启动或者关闭则会报错
例如http://mybatis.org/dtd/mybatis-3-mapper.dtd报错
解决办法:
pom.xml文件中没有相应的依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
this.props.form.validateFieldsAndScroll的验证数组里的内容不对
redis.timeout=3000 #超时时间:单位ms
redis.password=123456 #授权密码
redis.pool.maxActive=200 #最大连接数:能够同时建立的“最大链接个数”
redis.pool.maxIdle=20 #最大空闲数:空闲链接数大于maxIdle时,将进行回收
redis.pool.minIdle=5 #最小空闲数:低于minIdle时,将创建新的链接
redis.pool.maxWait=3000 #最大等待时间:单位ms
redis.pool.testOnBorrow=true #使用连接时,检测连接是否成功
redis.pool.testOnReturn=true #返回连接时,检测连接是否成功
Spring的配置文件中的xsi中少了
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
该类必须在一个包下。
设定密码后重启redis服务
我的电脑–>属性–>高级–>环境变量 path的变量值新加: %SystemRoot%\system32
修改完成后,需要重新打开cmd命令行,否则不会生效的。
若出现“java”不是内部命令或者外部命令时是因为环境变量没有添加成功
需要在pom文件中定义:
<properties>
<spring.version>4.0.2.RELEASE</spring.version>
</properties>
才可以在下面引用:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
两台机器IP分别为:A.104.238.161.75,B.43.224.34.73。
在A服务器上操作,将B服务器上/home/lk/目录下所有的文件全部复制到本地的/root目录下,命令为:scp
-r [email protected]:/home/lk /root。
Tomcat启动后产生Catalina文件
unzip FileName.zip 解包后原始文件仍存在
tail -f catalina.out 查看日志
ps -ef|grep tomcat名 查看tomcat相关信息
kill -9 pid 杀进程
启动和关闭tomcat在logs目录下
解决办法:
用命令chmod 修改一下Tomcat的bin目录下的.sh权限就可以了
如chmod u+x *.sh
处理方法:
1.查看tomcat的状态:
ps -eaf | grep tomcat
出现:
root 12038 1 0 13:41 ? 找到tomcat的进程号
3.重新结束tomcat ./shutdown.sh 时,就会出现下图,不会出现 Connection refused
(Connection refused)异常
hbase启动时链接出问题。可重启tomcat
解决方法:
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
File -> Settings -> Editor -> Inspections找到Thymeleaf,将后边的√取消选中。
@ConfigurationProperties主要作用:就是绑定application.properties中的属性
需要对组件进行Myform = Form.create({})(Myform);
const ConfigPageForm = Form.create()(ConfigPageForm);//命名不能相同。可命名如下
const ConfigPage = Form.create()(ConfigPageForm)
list遍历线程需要加泛型才能遍历。
unzip 要解压的文件名全称 -d 指定目录名
解决方案:File->Project Structure->Project->Project language level
如果你是jdk1.8 改到8即可
unzip common.war -d common
import {Button, Input} from “antd”;和import {List} from “antd/lib/list”;冲突
应合并为import {Button, Input,List} from “antd”;
cp -r dir1 dir2
例如将第一个目录下的real文件复制到dir2目录下(dir2目录下无此文件)
cp -r real dir2 real
Hbase连接的包多引入了,例如同时引入了:hbase-protocol-1.2.0.jar和hbase-protocol-0.98.1-cdh5.1.3.jar
1.删除整个文件夹以及文件夹里所有的内容
rm -R 文件名
2.删除以 -f 开头的文件
[root]# touch ./-f
[root]# ls ./-f
./-f
[root]# rm ./-f
3.常规删除a.txt文件
rm a.txt
rm -f file.log
可能原因:1.打包后的项目里没有class文件
2.web.xml中没有内容
打开git bash窗口
执行命令:
git config --system http.sslverify false //关闭证书校验
解决方案一:重置电脑
因一直没有找到解决办法,便重置电脑后问题得以顺利解决,成功连接
pgrep -f 8098|xargs kill -s 9
You have an error in your SQL syntax;
解决方案:需要在配置文件中spring.datasource.url中添加allowMultiQueries=true
否则会不识别这样批量的sql语句
to_date(#{CREATE_DATE},‘YYYY/MM/DD HH24:mi:ss’)
第一种写法:
原符号 < <= > >= & ’ "
替换符号 < <= > >= & ’ "
第二种写法:
大于等于
小于等于
例如:sql如下:
mc_end_date = ]]> #{endTime} and mc_start_date #{startTime}
当值为null时,null.getClass会报空指针
JSONObject jsonObject = new JSONObject(16,true)
第一种 ASCII装换问题.链接http://blog.csdn.net/ismr_m/article/details/46383313
第二种发送url时的转化问题,
使用URL u = new URL(原url)转化
第三种,访问地址时需要有http:// 作为开头
下面的两种情况均返回0:
1、没有找到需要更新的数据
比如,我们进行update的时候,条件是id=5,但是id=5的数据不存在。这种情况下,更新是失败的,返回0,很正确;
2、要更新的数据和更新的值是完全一样的
比如,我们要对id=5的记录进行更新,把title变成hello。虽然这条记录存在,但是这条记录的title本来就是hello,那么,返回值也是0;
但是使用mybatis的时候,结果却不是这样的,执行两次的时候,发现update返回的影响行数始终是1。后面跟踪发现,原来mybatis这个第三方持久化框架返回来的是被匹配的影响行数,所以返回的始终是1,那如果想要以返回的行数作为判断结果,需要在mybatis连接数据库的时候加上参数,
jdbc:mysql://${jdbc.host}/${jdbc.db}?useAffectedRows=true
netstat -anp|grep 端口号
以5000端口为例:
#netstat -anp |grep 5000
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 28629/python
看监控状态为LISTEN表示已经被占用,最后一列显示5000端口被服务python占用,查看具体端口号,只要有如上这一行就表示被占用了。
以0代替NULL为例
当表A中的字段q中的数据为NULL时用0代替
Select (CASE WHEN q IS NULL THEN 0 ELSE q END) as qs from A
或者用函数IFNULL(q,0)
做网站时,特别是电商有关的网站时,经常用到sum,我们预期的结果是没有值时显示0,但很多时候事与愿违,我们得到的值是NULL。
这个时候我们需要用到mysql的函数COALESCE,作用是将返回传入的参数中第一个非null的值。
解决办法
函数示例,例如:
SELECT COALESCE(NULL, …一长串NULL…,NULL, 1);
返回值为1
商品数量求和代码示例,例如:
SELECT COALESCE(sum(num),0) AS pro_num FROM product;
Select concat(trim(列名1),trim(列名2))
from 表名;
select * from TableA full join TableB on TableA.id=TableB.id
注:mysql不支持FULL JOIN,解决办法:right join + union + left join
两张表时:
select * from A left join B on A.id = B.id (where 条件)
union
select * from A right join B on A.id = B.id (where条件);
1.根据某个字段内容相等连接(普通连接)
select s.name s_name,s.sex s_sex,c.name c_name
from student s,class c
where s.s_id=c.s_id
2.inner join(内连接)
select s.name s_name,s.sex s_sex,c.name c_name
from student s inner join class c on s.s_id=c.s_id
结果和普通连接没有什么差别
3.left join ;right join ; full join 写法同上
普通连接和 inner join连接没什么差别!
left join:左表所有行都输出,如果找不到右表对应字段,即该字段为null
right join:右表所有行都输出,如果找不到左表对应字段,即该字段为null
full join:左右表行全部对应输出,如果找不到对应字段,即为null
map==null||map.size()==0
mybatis 的配置文件中添加一行代码如下即可,
<setting name="logImpl" value="STDOUT_LOGGING" />
str!=null && str.length()!=0
mysql会隐式转换,int类型的字段传入字符串会截取从第一位int型开始到第一个非int型的值作为条件
用like '% n a m e name name%'的方式,其实这种方式会造成sql注入。ibatis对于$符号的处理是默认不加’‘号的,所以如果传入的参数是:
1’或者是1231%’ or 1%’ = ‘1这些形式就回造成注入危险。
解决是避免用like ‘% n a m e name name%’,可以进行字符的拼接进行规避,比如oracle:like ‘%’||#name#||’%’;mysql:like concat(’%’,#name#,’%’);
注意:mybatis中能用#{}传参的就不要用${}
在ajax请求后台数据时有时会报 HTTP 400 错误 - 请求无效 (Bad
request);出现这个请求无效报错说明请求没有进入到后台服务里;
原因:1)前端提交数据的字段名称或者是字段类型和后台的实体类不一致,导致无法封装;
2)前端提交的到后台的数据应该是json字符串类型,而前端没有将对象转化为字符串类型;
解决方案:
1)对照字段名称,类型保证一致性
2)使用stringify将前端传递的对象转化为字符串 data: JSON.stringify(param) ;
JSONObject.parseObject(inparam,Feature.OrderedField)
设置resultType=“java.util.LinkedHashMap”,为保证查询的字段值有序(存入与取出顺序一致)所以采用LinkedHashMap。获取返回值的函数也应统一设置为LinkeHashMap
securityServiceURL地址不对
update table set url= replace(url, 'aaa', 'bbb')
【将url字段中的aaa批量更改为bbb】
#{}将传入的参数当成一个字符串,会给传入的参数加一个双引号
${}将传入的参数直接显示生成在sql中,不会添加引号
#{}能够很大程度上防止sql注入,${}无法防止sql注入
要实现动态传入表名、列名,需要做如下修改
添加属性statementType=”STATEMENT” (可省略)
同时sql里的所有变量取值都改成${xxxx},而不是#{xxx}
在实践过程中发现出了传递表名时需要用$,其他将把要传入的列名写成#{ColumnName}成功实现了
null调用非静态方法会报空指针异常
null调用的方法是类中声明的静态方法,也就是类方法,类方法是属于类的。通常使用类作为调用者来调用类方法,但我们也可以使用对象来调用类方法,其效果与通过类调用完全一样。当使用实例来调用类方法时,实际上依然是委托给该类来访问类成员,因此即使某个实例为null,它也可以访问它所属类的的类成员,而不发生空指针异常。
java8在接口中引入了默认方法,通过在方法前加上default关键字就可以在接口中写方法的默认实现,有点类似于C++中的多继承,但是当多个接口或父类中有相同签名的方法时,会引发一些问题,经过实验得出如下结论:
1.当继承的父类和实现的接口中有相同签名的方法时,优先使用父类的方法。
2.当接口的父接口中也有同样的默认方法时,就近原则调用子接口的方法。
3.当实现的多个接口中有相同签名的方法时,必须在实现类中通过重写方法解决冲突问题,否者无法通过编译,在重写的方法中可以通过
接口名.super.方法名(); 的方式显示调用需要的方法。
方法一:
在mybatis-config.xml中配置加一个setting
<?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>
<settings>
<!-- 打印查询语句 -->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
</configuration>
如果是spring集成mybatis的话,在sqlSessionFactory配置好configLocation属性
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:conf/mybatis-config.xml"></property>
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:com/jstudio/user/dao/*.xml"></property>
</bean>
方法二:
首先将ibatis log4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句
###显示SQL语句部分
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.Java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
首先,需要实现更新或忽略的数据的判别字段必须是主键或存在唯一索引(可以是单列或多列)。
比如要根据id判断是否重复,那么id必须是主键或者存在唯一索引。
比如要根据rid + type + date判断是否重复,那么要建立3个字段联合的唯一索引。
然后就是修改SQL了,如下
:
存在就更新:REPLACE INTO 表名(字段1, 字段2, …) VALUES(值1, 值2, …), (值1, 值2, …);
存在就忽略:
INSERT IGNORE 表名(字段1, 字段2, …) VALUES(值1, 值2, …), (值1, 值2, …);
select sum(this_value) from index_overview where index_id='MHRHR001' and dept_code = '10.02.001'
DecimalFormat是NumberFormat的一个具体子类,用于格式化十进制数字。
在日常开发中用的较多的是对java Double保留两位小数;
DecimalFormat df=new DecimalFormat(".##");
double d=1252.2563;
String st=df.format(d);
Parameter 0 of method linkDiscoverers in org.springframework.hateoas.config.HateoasConfiguration required a single bean, but 15 were found:
- modelBuilderPluginRegistry: defined in null
- modelPropertyBuilderPluginRegistry: defined in null
- typeNameProviderPluginRegistry: defined in null
- documentationPluginRegistry: defined in null
- apiListingBuilderPluginRegistry: defined in null
- operationBuilderPluginRegistry: defined in null
- parameterBuilderPluginRegistry: defined in null
- expandedParameterBuilderPluginRegistry: defined in null
- resourceGroupingStrategyRegistry: defined in null
- operationModelsProviderPluginRegistry: defined in null
- defaultsProviderPluginRegistry: defined in null
- pathDecoratorRegistry: defined in null
- relProviderPluginRegistry: defined by method 'relProviderPluginRegistry' in class path resource [org/springframework/hateoas/config/HateoasConfiguration.class]
- linkDiscovererRegistry: defined in null
- entityLinksPluginRegistry: defined by method 'entityLinksPluginRegistry' in class path resource [org/springframework/hateoas/config/WebMvcEntityLinksConfiguration.class]
Action:
Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed
2019-10-29 11:23:47.459 ERROR 3640 --- [ main] o.s.test.context.TestContextManager : Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@20140db9] to prepare test instance [com.protect.fence.FenceApplicationTests@76bf1bb8]
java.lang.IllegalStateException: Failed to load ApplicationContext
此处由于我引入了版本为2.2.2的springfox,将其改为了2.6.1版本得以解决
如果有
<dependency>
<groupId>org.springframework.hateoas</groupId>
<artifactId>spring-hateoas</artifactId>
</dependency>
则可用如下代替
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>
打开MySQL command Line Client
USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '安装mysql时设置的密码';
@ApiModelProperty()用于方法,字段; 表示对model属性的说明或者数据操作更改
value–字段说明
name–重写属性名字
dataType–重写属性类型
required–是否必填
example–举例说明
hidden–隐藏
@ApiModel(value="user对象",description="用户对象user")
public class User implements Serializable{
private static final long serialVersionUID = 1L;
@ApiModelProperty(value="用户名",name="username",example="xingguo")
private String username;
@ApiModelProperty(value="状态",name="state",required=true)
private Integer state;
private String password;
private String nickName;
private Integer isDeleted;
@ApiModelProperty(value="id数组",hidden=true)
private String[] ids;
private List<String> idList;
//省略get/set
}
有时候调用此方法不起作用可以采用如下方式调用
System.gc();
runtime.runFinalizationSync();
System.gc();
1.字符串中的length()方法和isEmpty()方法只能在字符串变量不为null时使用,否则会报错空指针异常(注意其实isEmpty()方法中也是对值的长度进行了判断)
2.字符串判空
if(str!=null && !"".equals(str)){
System.out.println("非空字符串");
}
if(str!=null && str.length()!=0){
System.out.println("非空字符串");
}
if(str1!=null&&str!=""){
System.out.println("非空字符串");
}
在mybatis中写sql查询语句时,将查询数据返回类型定义为Java.lang.HashMap时需要特别注意。在拿到返回值时对于可能出现某些列数据没有的情况,在mybatis中对于这种某个字段下没有数据时是不会返回该字段,故若要使用时一定要判断这个字段是否存在
若想让null值也返回时则需要在mybatis文件中添加如下配置
<setting name="callSettersOnNulls" value="true"/>
多个环境上的项目共用了同一套数据库,当项目中包含了定时器的功能,定期的对数据库进行操作或者发邮件会导致数据库中的数据被操作多次或者发多次邮件
解决办法:1.一、固定执行定时任务的机器
在多台机器中选择一台执行定时任务,每次执行的时候回判断当前机器和指定的机器是否一致或者启动时就指定好执行机器
优缺点:这种方法是可以有效避免多次执行的情况,,但是最明显的缺点就是单点故障问题,如果你指定的机器出现了宕机,任务就不会执行了,业务逻辑就会崩溃。
2.在数据库建立表,从定时任务表中获取定时方法
由于MySQL存在表锁和行锁,每次执行定时任务的时候从数据库表中读取记录,只有读取到的记录标识当前任务状态为未执行时,当前机器才会去触发任务,并且更新数据库状态(先更新,再执行),由于存在表锁和行锁,因此同一时刻只能有一个事务操作,可以保证只执行一次
优缺点:这种方法是一种比较合适的方式,但是需要有多张表,并且已经做了定时器逻辑上会有较大的改动
从jsonObject中获取数据然后传为字符串时采用getString方法好与get().toString()方法,后者在获取数据时当遇到值为null时会报空指针异常(toString()方法是指把对象转换成字符串的一个方法)
JSONObject jsonObject = new JSONObject();
jsonObject.put(“a”,null); //null不是对象
jsonObject.getString("a");
jsonObject.get(“a”).toString();// java.lang.NullPointerException
不要在 foreach 循环里进行元素的 remove/add 操作,如果要进行remove操作,可以调用迭代器的 remove方法而不是集合类的 remove 方法
原因:之所以会抛出ConcurrentModificationException异常,是因为我们的代码中使用了增强for循环,而在增强for循环中,集合遍历是通过iterator进行的,但是元素的add/remove却是直接使用的集合类自己的方法。这就导致iterator在遍历的时候,会发现有一个元素在自己不知不觉的情况下就被删除/添加了,就会抛出一个异常,用来提示用户,可能发生了并发修改。
当数据库编码,表的编码,字段的编码,以及项目中也设置了存取数据编码格式都为utf-8时却出现了部分功能获取到的数据是乱码问题时我们选择了重启tomcat,然后问题得以解决,具体原因我也不知道(所有应该设置字符编码格式的地方都设定了utf-8了。
可使用coalesce,函数的意思是返回参数列表中第一个为空的值,该方法允许传入多个参数,例如COALESCE(SUM(colum),0) 可将当没有符合的条件查询出来导致sum函数返回结果为null时给返回为0.
Alter TABLE table_name MODIFY insert_time datetime NOT NULL
DEFAULT NOW()
ON UPDATE NOW()
SELECT
CONCAT(
'DROP TABLE ',
GROUP_CONCAT(table_name),
';'
) AS statement
FROM
information_schema. TABLES
WHERE
table_schema = 'user_test'
AND table_name LIKE 'lila%';