【笔记争霸】springboot实现web应用过程中的摸爬滚打(持续更新ing)

mb5cebb550400f2

3
18

2020/03/18

//实现跨域注解
//origin="*"代表所有域名都可访问,可用具体的域代替 http://localhost:9529
//maxAge飞行前响应的缓存持续时间的MAX年龄,简单来说就是Cookie的有效期 单位为秒
//若maxAge是负数,则代表为临时Cookie,不会被持久化,Cookie信息保存在浏览器内存中,浏览器关闭Cookie就消失
@CrossOrigin(origins = "*",maxAge = 3600)
————————————————

org.hibernate.AnnotationException: No identifier specified for entity问题

查看网上的资料,应该是报错的实体类com.example.domain.p.User中没有添加加主键的注解@Id,这个是必须的。但是我的实体类中明明已经添加了@Id,为什么还会报这个错误呢?

后来检查了很久,发现是我import的包出现了错误,正确的应该是import javax.persistence.Id 而我却导入了org.springframework.data.annotation.Id 这样虽然@Id 在IDE语法检查时不会报错,但并不是我们本来想要的那个功能,因此运行时会报上面但错误。
————————————————

要将Application类放在最外侧,即包含所有子包 ,spring-boot会自动加载启动类所在包下及其子包下的所有组件。

开发环境:eclipse2018-12,jdk1.8,maven3.6,mysql8.0,oracle11g,暂且这么多,后续补充。

首先是实体模型的设计实现,不废话,需要用到的注解有entity,table,id,generatorvalue,column,如果实体之间存在依赖关系,还需要额外的manytoone,manytomany。

接下来是实体类对应的相关资源库的定义,继承了jparepository资源库接口,jparepository的实现类是SimpleJpaRepository,有必要掌握SimpleJpaRepository的实现原理,从而更方便的自定义资源库访问方法。

public class SimpleJpaRepository<T, ID> implements JpaRepositoryImplementation<T, ID> {}

实现了JpaRepositoryImplementation接口,该接口继承自JpaRepository和JpaSpecificationExecutor

public interface JpaRepositoryImplementation<T, ID> extends JpaRepository<T, ID>, JpaSpecificationExecutor<T> {

/**
* Configures the {@link CrudMethodMetadata} to be used with the repository.
*
* @param crudMethodMetadata must not be {@literal null}.
*/
void setRepositoryMethodMetadata(CrudMethodMetadata crudMethodMetadata);
}

看不懂了,先忽略注释,这里面声明了一个setRepositoryMethodMetadata方法,大意是设置资源库方法元数据,参数传递了一个CrudMethodMetadata接口。CrudMethodMetadata接口来看看它的定义,1.png

注释里说明了返回值的作用,就到这一层不往下深挖了,注释中@link LockModeType是什么,LockModeType是一个枚举类,枚举了同步机制的锁类型,包括如下值。自觉去看同步synchronized和锁lock的概念!不行就百度!@Nullable注解表示可以为空。

2.png

说道这,顺带一提,jdk1.5之后三大主要新特性有泛型,枚举enum,注解annotation,需要掌握!心中默念,语法错误会在编译时检测出来,逻辑漏洞编译时不会出错,运行时会捕获运行时异常!

泛型提醒:类中操作的属性或方法中的参数的数据类型不在定义时指定,而是在使用时动态指定

 

自己的自定义接口是这样

public interface ArticalRepository extends JpaRepository<Artical, Long>{
List<Artical> findByKeywordsLike(String keyword);
}

只需要结合指定前缀,实体属性名和sql关键字即可,有一定规律的,而且一定要传递属性名对应的数据类型。

 

ArticalRepository自定义资源库接口的实现

我这里列一个通用JPA的操作对应的方法名

3.png

例:比如要批量查询某些年纪的学生

List<Student> findByAgeIN(Coollection<> c);

 分页查询:

Sort sort= Sort( Direction.DESC, "good");
        Pageable pageable= PageRequest(1, 3,sort);
        Page<Artical> page=articalRepository.findAll(pageable);
        Assert.assertNotNull(page);         (Artical artical : page.getContent()) {
            System.out.println(artical);
        }
PageRequest方法马上被废弃了。

用hibernate自动建表时,mongodb中以前建立的索引不会自动删除,要手动删除

阿里云服务器部署

启动jar

CMD--net -ano |findstr ?  查找对应的网络进程,如果没有项目的进程则启动项目

设置安全组,配置规则,填入项目端口号?/?,访问0.0.0.0/0,配置好后外网即可访问


配置HTTPS访问

配置HTTPS访问时,服务器端口设为HTTPS默认端口443,用JDK自带工具keytool

keytool -genkey -alias tomcat -keyalg RSA -keystore ./server.keystore

生成server.keystore文件,路径可改,然后把它放到项目根目录下,项目配置文件增加如下配置

server.port=443 
server.ssl.key-store=server.keystore 
server.ssl.key-alias=tomcat 
server.ssl.enabled=true 
server.ssl.key-store-password=123456 
server.ssl.key-store-type=JKS

完成后访问即可.本地生成的jks证书是无效的。如果要使用有效的证书,通过机构申请签发,然后把证书下载到服务器导入到可信任的证书机构存储,然后项目中配置相应的证书自带的alias,密钥,证书格式。java自带keytool可以管理证书库。

genkey时参数 -keyalg RSA 必不可少,否则客户端无法访问web。
http://localhost:9529
客服投诉
关注微信

扫一扫关注我们

电话咨询
400-101-1651