北漂易项目笔记

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>

用时间戳防止缓存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值