2020.08.05
项目是创建的maven项目,pom里加入springboot的相关依赖,但是不熟springboot推荐的thymeleaf,还是想用jsp
,根据网上查的建了目录webapp/WEB-INF/jsp,pom里导入几个依赖,注意注释里的文字,因为这个scope没有注释导致总是报404找不到jsp,但是好像注释掉部署项目的时候又会报别的错,已经收藏了那篇文章,以后再出问题回来再看吧。
<!-- servlet依赖. -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- Provided -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<!--<scope>provided</scope> 注释了这个才能访问到jsp不然报404错误,项目打包时可能还需要改,具体见csdn的收藏-->
</dependency>
2020.08.07
昨天引入jdbc,druid连接池依赖,但是做单元测试时总是报连接错误errorCode 1045, state 28000。查了半天没头绪,在eclipse里导入一个原来黑马的jdbc的demo项目,可以连接数据库,证明不是数据库权限的问题。后来搜出来竟然是因为idea在配置文件里的自动提示导致的,因为配连接属性中的用户名和密码时,自动提示出来的是
data-username: root
data-password: 151757
但实际上应该这样写,和纯数字密码加不加单引号没有关系,真是太坑了啊,不过也怪自己不仔细,和教程比对了好几次也没发现区别。
username: root
password: 151757
2020.08.17
配置文件里配置schema用来运行sql建表,开始总是不行,后来百度需要加一项配置initialization-mode: always就可以了
initialization-mode: always
schema:
- classpath:sql/department.sql
- classpath:sql/employee.sql
2020.08.18
1、
整合mybatis,在rusource里创建mybatis的全局配置文件(里面开启驼峰命名法),和每个表各自的xml配置文件(里面写sql的),在yml全局配置文件里配置上这两个配置文件如下截图
在main下创建mapper文件夹,里面放各个表的mapper接口,注意要用@mapper或者@mapperscan接口,让容器识别这是一个bean。然而标注了该注解在controller里注入这个接口时还是报找不到bean,百度发现要在主程序里标注@MapperScan(“com.beipiaoyi.mapper”)指定mapper的扫描路径就不报错了。
2、
当加入其它表的操作时也就需要加入对应的mapper.xml文件。在yml里需要配置mapper-locations,也就是说需要多个xml文件,奇怪的是写成*Mapper.xml就可以,但是写成**.xml就不可以,报找不到xml异常。
3、
数据库以及实体类是date类型,前台传入字符串的日期时间时会报400错误,百度查找了方法,需要导入一个jar包,然后在实体类的相应字段的get、set方法上标注上注解,具体见日期问题解决办法
需要注意的是文章里的导入
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.0</version> </dependency>
这个在springboot里哪个依赖已经导过了不需要导了,直接加注解使用即可
2020.08.19
1、
把数据库里的时间都设计成了datetime格式,实体类用的date格式,在mybatis的xml文件里写的sql报错了
<if test="timeStart!= null and placeEnd != ''">
因为这个date类型的不能和String来比较,所以删了判空串就可以了。
然而前台传过来的日期格式是2020-08-18,给实体类赋值时却变成了英文那种格式的,导致在数据库查不出来数据,看来前人都用String格式是有原因的,打算放弃改为String
2、
想用StringUtils.isNotBlank(timeStart)需要加入依赖
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
2020.08.20
1、
前台需要的精确到时分的日期控件,网上找到一个例子,但是引入相应的js、css后不生效,最后改变引入的位置,根jsp页面里其他的引入位置以及js代码保持一致就可以了。这些前端的玩意比较玄幻,搞不明白。
最后实现了但是还是选了分钟后不生效,只显示小时,不会搞了,以后请教前端的大神们吧。
参考网址文章1、文章2
2、
idea里热部署,修改jsp不用重启项目看这篇搞定的idea里springboot项目热部署设置
不过文章里说重写编译的快捷键是Ctrl+Shift+F9,我这里实际是Ctrl+F9
2020.08.21
1、
在新增时,主键id用日期加6位随机数的方法生成
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
pinInf.setPubTime(date);
String format = sdf.format(date);
System.out.println(format);
String randomString = RandomStringUtils.randomAlphanumeric(6);
String pcid = format+randomString;
发现yyyyMMdd如果写成yyyymmdd,那mm就是分钟,写成大写的MM才是月份。本来想用uuid生成随机数,因为长度太长,想变短还比较麻烦,所以就用了上面的方法,还可以指定长度。
2、
jsp页面指定日期显示格式,看这个文章jsp页面指定日期显示格式
首先要引入标签库,然后可以指定要显示的格式,但是我按这样做了总是报错,value找不到之类的错误,百度发现idea里应该把
<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jstl/fmt” %>
的最后写成
<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jstl/fmt_rt” %>
真是特么的坑啊!
3、
新增的xml里写sql时,所有的字段都是些的跟数据库一样,但是实体类里有的是第二个字母大写,这样用#{}取值写成全部小写,就报没有getter方法,把{}里的值写成和实体类里完全一样的就不报错了
4、
改实体类中日期属性的格式注解会导致报错,具体还没排查出来,等下次弄吧。还有在前台所一些非空字段不输入值也能新增成功,也得排查一下。(见2020.08.25第3条)
2020.08.25
1、
新增时前台的必输字段没有填任何东西,但是在后台接收时自动给弄成了空串,打印的sql相应的值是(String),这样就导致插入数据库不会报错。但是在数据库连接软件里自己写了个插入sql,把相应字段不输入任何东西
INSERT INTO pincheinfo(pcid, pctype, timestart, timeend, placestart, placeend, pubtime, remark, ENABLE, uid, by2, by3 ) VALUES
('ddddddee','1','2020-08-28 00:00:00','2020-08-28 00:00:00',,,'2020-08-28 00:00:00','','1','888','','')
placestart, placeend这两个非空字段直接逗号,啥也不输入,还是可以成功,查询得知mysql也会给非空字段自动变成空串。至于怎么阻止自动加空串,是默认值的问题
alter table表名alter column字段名drop default; (若本身存在默认值,则先删除)
alter table 表名 alter column 字段名 set default 默认值;(若本身不存在则可以直接设定)
不过奇怪的是我只把placestart这一个字段取消了默认值,好像所有的默认值都失效了,不输入就会报错。
现在需要做的就是前台表单把非空字段加校验,后台代码加判断。
2、
mybatis不在控制台打印sql语句,加了个log4j的日志配置文件,在主配置文件里设置日志打印级别为debug,就可以了
logging:
level:
com:
beipiaoyi: debug
3、
新增时,表单传来的日期格式,后台实体类属性上必须加@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”),必须严格匹配,H写成小写都不行。
还有那个@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”,timezone=“GMT+8”)改变不了前台的显示格式,还是按2020.08.21第2条的做
4、
给搜索的sql里加了按发车时间倒序后,翻页时报了个错
java.sql.SQLException: Value ‘0000-00-00 00:00:00’ can not be represented as java.sql.Timestamp
查数据库后发现有一个这个时间的数据,删除这条数据后就不报错了。可能是数据库不认识这个时间吧
2020.09.01
1、
备注框不能是input type=“textarea”,应该是直接为"<textarea
input的type只有以下几种
2、
mysql的length写多少就可以保存多少个字符,包括汉字,比如设计表时长度为30,就可以保存30个汉字或者其他字符。
2020.09.03
1、
关于springmvc的转发和重定向转发和重定向
2、
验证码功能开发,见代码
思路就是读取一个txt文档,里面是一行一行的四字成语,运行方法时会随机读取一行,把读到的成语放到session里
把txt文件放到resource目录下进行读取,springboot读取文件的四种方式
// 将验证码内容保存session
request.getSession().setAttribute("checkcode_session", word);
然后画这张图片,一定要写出去
//将图片写到response.getOutputStream()中
ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
前端:
<img id="num" src="${pageContext.request.contextPath}/user/getImage" />
<a href="javascript:;" onclick="document.getElementById('num').src = '${pageContext.request.contextPath}/user/getImage?'+(new Date()).getTime()">换一张</a>
用时间戳防止缓存