希望能帮到准备实习的朋友
ps:springboot+jpa+shiro+redis+maven+swagger
ps:jpa对多表的支持并不好,所以基本都是单表查询的,所以需要多个表的数据时,都是一个一个表查询
ps:具体jpa用法请百度
--------因为没到公司实习前使用的持久层是Mybatis,没接触过Hibernate,而且层次分的不一样。以前是Controller+Service+Bean。而现在持久层用的是jpa(spring data jpa,可以说是Hibernate的升级版吧),所以很不适应,刚来公司的时候看前辈们写代码看了一个星期,才开始上手项目。
-------------------------------- 稍微解释一下这些层次,因为可能有很多小伙伴没有接触过:1.bo层:是用来包装一个接口返回给前端的所有数据,比如前端需要Name表里面name数据,和Sex表里的sex数据,那么bo实体类的封装的属性就是name和sex,通过单表查询出这两个数据然后set进去就行了,数据和集合以此类推
2.business:接口类和接口实现类
3.po:jpa对应数据库表实体类,jpa这个功能感觉挺好用,只要加上注解@Entity,
@Entity(name = “xwj_user”) 表明该类 (UserPeopler) 为一个实体类,它默认对应数据库中的表名是user_peopler。springboot配好数据库连接之后,你创建这个表,项目运行后,会自动帮你在数据库生成这个表,挺方便的
//po层代码
@Entity
@Table(name = "user_people")
//--------或者@Entity(name = "xwj_user")
public class UserPeople {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)//JPA注解:主键自增
private Long id;
private String name;
private String sex;
//get和set省略
}
4.repository层:写数据库查询语句的,这时候就体现了jpa单表查询的强大了,你只需要
继承extends JpaRepository<UserPeopler,Long>,就可以同过各个字段查询了,
比如要通过name查询UserPeople,只需要findBy+Name就行了,看代码
public interface UserPeopleRepository extends JpaRepository<UserPeopler,Long>{
UserPeople findByName(String name);
}
5.vo层:接受前端传来数据实体类,你需要什么数据就用这个vo实体类来收,比如我需要name字段,和sex字段这两个字段去数据库查数据返回给前端,那么前端需要把这个name和sex传过来,那么就创建一个vo来接收这两个数据,所以vo封装的字段就是name和sex
6.介绍了一下使用的框架层次,现在说说遇到最多的问题,空指针异常
(NullPointer Exception),还有就是bo层的使用。空指针异常出现多的原因就是测试时数据库里没有数据,你可能觉得加数据不就好了吗?但是前端对接接口时的时候并不会看着数据来加,所以这时候就有必要做null判断抛出异常提示前端,这样前端就不会来找你的麻烦了。ps:一两个接口或许没什么,但是多了你会发现这会大大影响你的工作效率
UserPeople userPeople = UserPeopleRepository.findByName(name);
if (heroTask == null){
throw new UserException(40000,"没有数据");
}
判断传入时间是否为当天
class DateUtil{
public static boolean isIntradayTime(Date date){
// 获取当天凌晨0点0分0秒Date
Calendar calendar1 = Calendar.getInstance();
calendar1.set(calendar1.get(Calendar.YEAR), calendar1.get(Calendar.MONTH), calendar1.get(Calendar.DAY_OF_MONTH),
0, 0, 0);
Date beginOfDate = calendar1.getTime();
// 获取当天23点59分59秒Date
Calendar calendar2 = Calendar.getInstance();
calendar1.set(calendar2.get(Calendar.YEAR), calendar2.get(Calendar.MONTH), calendar2.get(Calendar.DAY_OF_MONTH),
23, 59, 59);
Date endOfDate = calendar1.getTime();
if(date == null){
return false;
}
if(date.getTime() >= beginOfDate.getTime() && date.getTime() <= endOfDate.getTime()){
return true;
}
else {
return false;
}
}
}