springboot笔记整理

springboot笔记整理_第1张图片

在搭建简单的demo程序时 出现如上报错问题,  经查询得出    关于idea 中使用mybastis报出 Invalid bound statement (not found)的错误解决方案    mapper.xml没有按照传统的maven架构进行放置  在pom.xml文件中配置build扫描目录就可以

 

异常java.lang.UnsupportedOperationException] with root cause

在查询sql语句返回string集和的时候  以为返回值是list类型  设置了resultType = 'java.util.List'  结果报了上述的错误 应该修改为   java.lang.String类型

 

在使用idea运行springboot程序时候,由eclipse环境切换过来所以导致了 application.java 启动失败   尝试了

springboot笔记整理_第2张图片

通过maven来设置。启动成功,然而程序没法进行调试  打断点进不去程序里。 


			
				org.springframework.boot
				spring-boot-maven-plugin
				
					false
				
			
		

添加标签false后才可以进行调试

 

在前后端分离中会出现浏览器跨域的问题。。

做前后分离的webapp开发的时候,出于一些原因往往需要将浏览器设置成支持跨域的模式,好在chrome浏览器就是支持可跨域的设置,网上也有很多chrome跨域设置教程。但是新版本的chrome浏览器提高了跨域设置的门槛,原来的方法不再适用了。下面笔者简单介绍一下新版本chrome的跨域设置方法。

  - ---------版本号49之前的跨域设置

先介绍一下老方法,参考了一些网上的教程,其实直接在打开命令上加--disable-web-security就可以了。

具体做法为:

1.下载并安装好chorme浏览器后在桌面找到浏览器快捷图标并点击鼠标右键的属性一栏。
2.在属性页面中的目标输入框里加上   --disable-web-security  如下图所示:

-----------版本号49之后的chrome跨域设置

chrome的版本升到49之后,跨域设置比以前严格了,在打开命令上加--disable-web-security之后还需要给出新的用户个人信息的目录。众所周知chrome是需要用gmail地址登录的浏览器,登录后就会生成一个存储个人信息的目录,保存用户的收藏、历史记录等个人信息。49版本之后,如果设置chrome浏览器为支持跨域模式,需要指定出一个个人信息目录,而不能使用默认的目录,估计是chrome浏览器怕用户勿使用跨域模式泄露自己的个人信息(主要是cookie,很多网站的登录token信息都是保存在cookie里)。

具体做法为:

1.在电脑上新建一个目录,例如:C:\MyChromeDevUserData

2.在属性页面中的目标输入框里加上   --disable-web-security --user-data-dir=C:\MyChromeDevUserData,--user-data-dir的值就是刚才新建的目录。

3.点击应用和确定后关闭属性页面,并打开chrome浏览器。

再次打开chrome,发现有“--disable-web-security”相关的提示,说明chrome又能正常跨域工作了。

跨域成功后,首页换成了google的welcome页面,同时原来收藏的链接和历史记录都不见了,而C:\MyChromeDevUserData目录下则生成了新的个人信息相关的文件。

 

海量小文件存储测试---存文件系统还是存数据库好?

设置了sql字段 art_comment 存储文件服务器地址   不设置将其存储文件内容  

 

查询汉字数量程序

def test():
    s= "你好我我是你爸爸3哈哈哈2213将131313131的撒谎的撒谎的撒肯定撒空间l/s/w/z.,.,..j"
    mypattern = re.compile('[\u4e00-\u9fa5]+')
    rss = mypattern.findall(s)
    rss = "".join(rss)
    print(len(rss))

if __name__ == '__main__':
    test()

Python获取指定文件夹下的文件名

# -*- coding: utf-8 -*-
  
import os
  
def file_name(file_dir):
    for root, dirs, files in os.walk(file_dir):
        print(root) #当前目录路径
        print(dirs) #当前路径下所有子目录
        print(files) #当前路径下所有非目录子文件

    for root, dirs, files in os.walk(file_dir):
        print(root) #当前目录路径
        print(dirs) #当前路径下所有子目录
        for name in files:
            # print(name)
            if name not in filenames:
                print(name)
                os.remove(os.path.join("F:\\New folder1"+"\\"+name))

        # print(files) #当前路径下所有非目录子文件



if __name__ == '__main__':
    file_name("F:\\New folder1");
    outname = "检索的"

当springboot项目中 把前端页面复制在static templates中出现 无法引用css样式的问题 

静态资源被拦截的 yaml配置:spring:   mvc:     static-path-pattern: /static/**

 

 

 mappedBy reference an unknown target entity property: com.zryy.blog.pojo.Blog.types in com.zryy.blog.pojo.Type.blogs org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.zryy.blog.pojo.Blog.types in com.zryy.blog.pojo.Type.blogs

提示报这个错误是

@OneToMany(mappedBy = "type") mappedBy对应的是  one表中定义的字段 当时是types   没法找到该字段 所以报错

 

Query类详解 :

本篇介绍Query类,Query是一个查询参数类,封装了查询条件,分页,排序等功能。

https://blog.csdn.net/thc1987/article/details/79347054

 

@RequestMapping用法详解:

https://blog.csdn.net/renanrenan/article/details/84654362

 

IDEA 工具中的调试功能  增加generated-request调试api接口工具

https://hollis.blog.csdn.net/article/details/104322534

 

apach.http包导入依赖  org.apache.http



    org.apache.httpcomponents
    httpclient
    4.5.13

 

https://github.com/fighting41love/funNLP/tree/master/data  github上的语料库  恐暴、医疗、分类等

https://github.com/codemayq/chinese_chatbot_corpus  八卦论坛资料

 

使用showdown.js将Markdown文档转换为HTML  

 

MySQL 中LIMIT的使用详解

 

Mysql的limit用法 以及优化sql序列速度方法

 

MySQL 的分页查询 SQL 语句

 

使用Layui分页查询数据

 

关于layui的分页查询_table实现

 

layui的form表单

 

JS 结点(属性操作)隐藏与显示(display)

 

JS switch case语句详解

 

错误解决:There is no getter for property named 'id' in class 'java.lang.String'

使用mybatis传入参数,如果在mappin.xml中使用标签判断该参数是否为空,通常会报以上异常,解决方法:​在接口中该方法的参数前加上@Param("参数名")注解,即可​

接口:

public interface UserMapper {

 

 

//根据名称查询用户

List queryUserByName(@Param("name")String name);

 

}​

mapping.xml:​



 

Mybatis 中xml和注解映射,so easy啦

 

目前文章页面设置的是将图片保存在服务器文件夹下,  数据库只保存一个src地址,并没有将图片信息保存在字段中 

 

layui table表格分页从0开始,自定义请求参数   目前layui前端传送的currentPage是1   sql查询中会丢失数据   应设置currentPage为0  这样查询就全部,不知缘由 可能是layui的一个bug

 

导入pom.xml文件的顺序,     ----》     版本号   、  jar包(依赖) 、插件(resource  设置src/main/java  配置文件路径等) 、plug  

 

 

 

--------------------------------------------------------------------------------------

springSecurity

首先是pom文件导入   

  1.  spring-boot-starter-security  

  2.      thymeleaf-extras-springsecurity5  

  3. sping-boot-starter-web

  4. thymeleaf-extras-java8time

  5. spring-boot-starter-test

编写SecurityConfig 配置文件

extends 

WebSecurityConfigurerAdapter
package com.springSecurity.config;

import org.apache.tomcat.util.security.MD5Encoder;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

//AOP 拦截器
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    //授权
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //首页可以访问,功能页只有对应有权限的人才可以访问。
        //请求授权的规则
        http.authorizeRequests()
                .antMatchers("/").permitAll()
//                .antMatchers("/views/level1/**").hasRole("vip1") 这样设置url地址错误
                .antMatchers("/level1/**").hasRole("vip1")
                .antMatchers("/level2/**").hasRole("vip2")
                .antMatchers("/level3/**").hasRole("vip3");


        //设置没有权限会跳到登陆页面,需要开启登陆的页面   而且这个页面的名字是指定的,且默认设置请求转到/login  继而转到login.html页面
            //
        //定制登陆页

        //toLogin是首页的登陆发送的请求地址,  login.html中login是登陆页表单提交发送的请求地址  要和下面securityconfig-http.forLogin设置的一致
        //
        http.formLogin().usernameParameter("usr")  //这里设置usernameParameter是前端表单提交传参名称 默认是username
                        .passwordParameter("pwd")
                        .loginProcessingUrl("/login");

        //防止网站攻击,  springboot默认开启了
        http.csrf().disable();  //关闭crsf功能 登出失败可能存在的原因

        //注销  开启注销功能 跳到首页
        http.logout().logoutSuccessUrl("/");

        //开启rememberMe  实质上是把用户名和密码添加到cookie中去了 默认保存两周
        //自定义rememberMe

        http.rememberMe().rememberMeParameter("remember");
    }


    //认证   springboot 2.1.x可以直接使用  其他版本会报错: There is no PasswordEncoder mapped for the id "null"
    //密码编码 PasswordEncoder
    //在spring Security 5.0+中增加了很多的加密方式  明文密码不安全。如下面的123456
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //可以从数据库里获取 信息认证  也可以从内存中获取信息认证
        //这些数据正常从数据库中读
        auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
                .withUser("zhiqiang").password(new BCryptPasswordEncoder().encode("123456")).roles("vip2","vip3")
                .and()
//                .withUser("root").password("123456").roles("vip1","vip2","vip3")
                //上述代码明文密码没有添加passwordEncoder.encode
                .withUser("root").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1","vip2","vip3")
                .and()
                .withUser("guest").password(new BCryptPasswordEncoder().encode("123456")).roles("vip1");
    }
}

mysql报错:Cause: java.sql.SQLException: sql injection violation, syntax error: syntax error, error in

mapper文件中 少加了一个,逗号

 

设置select下拉框不能选择  :

jquery设置:$("#id").attr("disabled","disabled");
                    $("#id").removeAttr("disabled");

用js绑定onclick事件中的this

刷新当前页面   localtion.reload()

UUID.randomUUID().toString() 的作用 

 

Field 'id' doesn't have a default value 错误的解决办法  如果你在写web项目的时候,然后在写添加的方法的时候,出现 Field 'id' doesn't have a default value 这个错误,那就什么都不用看 直接找到你的数据库,然后打开设计表,看下面自增递增是否勾选上了,如果没有勾上再去执行 就可以了。(这个问题困扰了我半天时间)

mysql外键约束无法删除数据的情况解决办法 先删除子表的数据,然后再删除主表的数据。

 

mysql之外键约束

 

JPA使用注解 设定字段类型为TEXT类型

	@Lob
	@Column(columnDefinition="TEXT")
	public String getImgUrls() {
		return imgUrls;
	}
	public void setImgUrls(String imgUrls) {
		this.imgUrls = imgUrls;
	}

vue forEach循环数组拿到自己想要的数据

 

Window sessionStorage 属性 

 

获取html 标签的属性值   
获取html 标签的属性值分另种情况
其一,获取原有属性,其方法是.属性
其二:获取自定义属性方法:其方法是.getAttribute(‘属性’)或.attributes(‘属性’).nodeValue

jq && js获取input的value值  

①var user_id = document.getElementById('user_id').value;
②var user_id = $('#user_id').val();

Missing URI template variable 'employeeNumber' for method parameter of type String:

 

SpringMvc报错Missing URI template variable ‘id‘ for method parameter of type long

 

单向多对一@ManyToOne的使用和理解:

单向就是java的一个实体类可以获取另一个实体类,多对一就是比如多个员工对应一个部门,外键在那个表,那个表就是多,关系配在多方。`

//员工实体类
@Entity//将实体类映射到数据库表
public class Employee extends BaseDomain {
    private String username;
    private String password;
    private String email;
    private Integer age;
    private String headImage;  //头像
    //多个员工对应一个部门  多对一配置到多方
    //单向就是java的一个实体类可以获取另一个实体类
    //外键在那个表,那个表就是多,外键在Employee类,所以Employee是多方
    @ManyToOne(fetch = FetchType.LAZY)//配置懒加载
    //员工关联部门自己的部门id字段
    @JoinColumn(name="department_id")
    //部门类
    private Department department;

Mybatis异常There is no getter for property named 'XXX' in 'class java.lang.String'

 

11.当入参为 string类型时 (包括java.lang.String.) 我们使用#{xxx}引入参数.会抛异常There is no getter for property named 'XXX' in 'class java.lang.String'

2.解决方法一:把#{xxx}修改为 #{_parameter} 即可

3.解决方法二:可以在方法中提前定义:

public int  methodName(@Param(value="state") String state ){

  ...

}

4.原因:Mybatis默认采用OGNL解析参数,所以会自动采用对象树的形式取 string.xxx 值,如果没在在方法中定义,则会抛异常报错。

https://blog.csdn.net/qing_gee/article/details/47122227

 

报错:Optional int parameter 'id' is present but cannot be translated into a null value due to being de

遇到这个错误就是把参数int 改成Integer

这个错误是因为java获取页面数据的时候,id值可能为空,而int的默认值为0,若想能够接受NULL的值,将int换成integer即可解决。

 

遇到这个错误就是把参数int 改成Integer 

大家以后在springmvc接受参数的时候,尽量不要使用基本数据类型,当然你一定要使用的话,可以把defaultValue加上,这样就不会报这个错误了。

注意:就算你加上required=false, 一样也是不行的。

 

MySQL中使用LIMIT分页

需求:客户端通过传递pageNum(页码)和pageSize(每页显示的条数)两个参数去分页查询数据库表中的数据。

  我们知道MySQL提供了分页函数limit m,n,但是该函数的用法和需求不一样,所以就需要根据实际情况去改写以满足需求。分析如下:

  查询第1条到第10条数据的sql是:select * from table limit 0,10;   ->对应我们的需求就是查询第一页的数据:select * from table limit (1-1)*10,10;

  查询第10条到第20条数据的sql是:select * from table limit 10,20;  ->对应我们的需求就是查询第二页的数据:select * from table limit (2-1)*10,10;

  查询第20条到第30条数据的sql是:select * from table limit 20,30;  ->对应我们的需求就是查询第三页的数据:select * from table limit (3-1)*10,10;

  通过上面的分析,可以归纳得出符合需求的分页SQL伪代码是:select * from table limit (pageNum-1)*pageSize,pageSize。总而言之,我们只需要告诉数据库要从第几行开始拿多少条数据就行了。

  但是,limit语句不支持计算,因此,需要从外部传参(pageNum-1)*pageSize的计算结果,即在Java中计算出来。令rowIndex = (pageNum-1)*pageSize,rowIndex常用的计算方法如下:

//计算行号
public static int getRowIndex(int pageNum, int pageSize){
    return (pageNum> 0) ? (pageNum- 1) * pageSize : 0;
}

limit只是限制条数  要翻页的话 要 (offsize-1)* 10  

 

layui 表格格式化时间

{field: 'pressTime', title: '发稿时间', width:180,
                    templet:'
{{ layui.util.toDateString(d.pressTime, "yyyy-MM-dd HH:mm:ss") }}
'}

【Java】java.sql.SQLDataException: Cannot determine value type from string

There was an unexpected error (type=Internal Server Error, status=500). Error attempting to get column 'type' from result set. Cause: java.sql.SQLDataException: Cannot determine value type from string '222-2-21' ; Cannot determine value type from string '222-2-21'; nested exception is java.sql.SQLDataException: Cannot determine value type from string '201577D0510' org.springframework.dao.DataIntegrityViolationException: Error attempting to get column 'u_account' from result set. Cause: java.sql.SQLDataException: Cannot determine value type from string '201577D0510' ; Cannot determine value type from string '201577D0510'; nested exception is java.sql.SQLDataException: Cannot determine value type from string '201577D0510' at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:84) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446) at com.sun.proxy.$Proxy65.selectList(Unknown Source)

查看字段和属性都没有问题。

最后尝试建立无参构造函数解决问题。缺少了mapper层封装对象时与之查询字段一一对应的实体类构造器
添加一个构造器,问题解决

Vue.js实现文章评论和回复评论功能

jquery修改a标签的href链接和文字

 

jQuery获取某标签的父标签

前端: 鼠标悬浮变小手 

为某个标签加样式,是鼠标悬浮变小手:

cursor:pointer;   变小手

text-decoration:none;   没有下划线

例如:

点赞+1特效

Mybatis出现Mapped Statements collection already contains value for  :

一已经有重复的id

 

 

你可能感兴趣的:(springboot笔记整理)