项目经验
1.springboot和mybatis整合之后,如果没有在application中配置驼峰转换,是不会自动把带"_"的字段转换成实体类中对应的变量的.转换代码如下:
#开启驼峰转换
mybatis.configuration.mapUnderscoreToCamelCase=true
mybatis.configuration.map-underscore-to-camel-case=true
2.springboot整合mysql+mybatis时,application.properties的配置如下:
spring.datasource.url=jdbc:mysql://192.168.1.48:3306/xrzj_bst_dev?useSSL=false&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username = root
spring.datasource.password = xxxxxxx
spring.datasource.driverClassName = com.mysql.jdbc.Driver
#端口
server.port=8889
#mybatis的mapper文件位置
mybatis.mapper-locations=classpath:com/xuanrui/bst/fund/mapping/*.xml,com/xuanrui/bst/user/mapping/*.xml
3.在java的console想要显示对应的sql语句可以在application.properties中进行如下配置:
#打印日志,sql
logging.level.org.springframework=WARN
logging.level.org.spring.springboot.dao=DEBUG
logging.file=logs/spring-boot-logging.log
logging.level.com.xuanrui.bst=DEBUG
4.使用hibernate中的@NotEmpty,@NotBlank,@NotNull三个注解可以快速排除掉参数中的空值,方便进行参数的验证,使用规则:
1.@NotEmpty 用在集合上面
2.@NotBlank用在String上面
3.@NotNull用在基本数据类型上面
@NotEmpty
Asserts that the annotated string, collection, map or array is not {@code null} or empty.
加了@NotEmpty的String类,Collection、Map、数组,是不能为null或者长度为0的(String、Collection、Map
的isEmpth()方法)
@NotBlank
Validate that the annotated string is not {@code null} or empty.
The difference to {@code NotEmpty} is that trailing whitespaces are getting ignored.
“The difference to {@code NotEmpty} is that trailing whitespaces are getting ignored.” –> 和{@code NotEmpty}不同的是,尾部空格被忽略,也就是说,纯空格的String也是不符合规则的。所以才会说@NotBlank用于String。
@NotNull
The annotated element must not be {@code null}.不能为空
5.连表查询时,当两个表有相同字段时,恰好该字段是查询条件,该字段必须指定到底是主表字段还是副表字段,否则mysql无法判断出到底应该采用哪个字段.
6.计算当前月的上一个月,上一年,或者前一天方法:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//获取前月的第一天
Calendar cal_1=Calendar.getInstance();//获取当前日期
cal_1.add(Calendar.MONTH, -1);
cal_1.set(Calendar.DAY_OF_MONTH,1);//设置为1号,前一个月的第一天
firstDay = format.format(cal_1.getTime());
System.out.println("-----1------firstDay:"+firstDay);
//获取前月的最后一天
Calendar cale = Calendar.getInstance();
cale.set(Calendar.DAY_OF_MONTH,0);//0号,即上个月的最后一天
lastDay = format.format(cale.getTime());
System.out.println("-----2------lastDay:"+lastDay);
//获取当前月第一天:
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH, 0);
c.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
String first = format.format(c.getTime());
System.out.println("===============first:"+first);
//获取当前月最后一天
Calendar ca = Calendar.getInstance();
ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
String last = format.format(ca.getTime());
System.out.println("===============last:"+last);
}
/**
* 字符串的日期格式的计算
*/
public static int daysBetween(String smdate,String bdate) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(smdate));
long time1 = cal.getTimeInMillis();
cal.setTime(sdf.parse(bdate));
long time2 = cal.getTimeInMillis();
long between_days=(time2-time1)/(1000*3600*24);
return Integer.parseInt(String.valueOf(between_days));
}
计算上一个月的最后一天时,要用当前月份,0天就是上一个月的最后一天
7.关于数据传递中的格式问题,目前项目中,前端传过来的数据基本全部为表单数据,所以都是new出对应对象,来进行接收,关于@Requestbody注解的使用,是在传递json格式的参数对象时使用.
idea中测试json格式参数的方法,demo如下:
POST http://127.0.0.1:8889/referrer/getReferrerListByDate
Content-Type: application/json
{
"xxx":creator,
"xxx":xxxxx
}
<> 2018-11-24T110048.200.json
<> 2018-11-23T070443.200.json
<> 2018-11-23T112931.200.json
<> 2018-11-23T112916.200.json
<> 2018-11-23T112657.200.json
<> 2018-11-23T112626.200.json
<> 2018-11-23T112549.200.json
<> 2018-11-23T103904.200.json
<> 2018-11-23T094047.200.json
###
关于对象转json字符串,或者json转对象的方法:
使用MapperObject
8.项目所有的jar包都报错,发现依赖里只有jdk1.8,其余所有的jar都没有了.
造成原因:给项目打包时,因为是私服,所以换了maven的setting配置文件,忘记换回来了.
解决方法:重新换回原来的setting文件.
9.designer项目的项目如果实体类是依赖于另一个项目(也就是实体类不再本项目中,在另外一个项目,该项目时主项目的依赖),如果实体类发生了变更,需要更新子项目所在的版本号,然后让该maven项目重新依赖,重启项目即可,如果项目还是不能启动,则可以去linux服务器上,删除项目,然后重新拉取项目即可.