mybatis报错,插入数据异常

img

谁能看看这个问题怎么解决啊,加入购物车的时候就报错,也不知道怎么改,有没有人会的,帮忙看看

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/692989
  • 这篇博客你也可以参考下:关于mybatis数据库表与类中属性不一致的问题终极解决办法
  • 除此之外, 这篇博客: Mybatis自定义拦截实现注解方式数据权限拦截中的 然后考虑第一个问题,不是所有的查询都要拦截,那么就必然是标注了的才需要去拦截。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 目标明确,解决方法也就很明确了:注解

    自定义注解如下:

    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD})
    public @interface DataAuth {
    
        String empId();
    
        String project();
    
        String org() default "";
    
        String orderBy();
    }
    

    这个注解很好理解,作用域是方法级别,就是要查那个员工的,那个部门的,那个项目的,最后再排序下。

    OK有了注解,就需要在拦截器里面进行捕获该注解:

    	/**
    	 * 获取数据权限注解信息
    	 *
    	 * @param mappedStatement
    	 * @return
    	 */
    	private DataAuth getPermissionByDelegate(MappedStatement mappedStatement) {
    		DataAuth dataAuth = null;
    		try {
    			String id = mappedStatement.getId();
    			//统计SQL取得注解也是实际查询id上得注解,所以需要去掉_COUNT
    			if(id.contains(COUNT_PRE)){
    				id = id.replace(COUNT_PRE,"");
    			}
    			String className = id.substring(0, id.lastIndexOf("."));
    			String methodName = id.substring(id.lastIndexOf(".") + 1, id.length());
    			final Class<?> cls = Class.forName(className);
    			final Method[] method = cls.getMethods();
    			for (Method me : method) {
    				if (me.getName().equals(methodName) && me.isAnnotationPresent(DataAuth.class)) {
    					dataAuth = me.getAnnotation(DataAuth.class);
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return dataAuth;
    	}
    

    这个就是反射了,没什么很难理解的,唯一需要注意的细节就是,如果是使用PageHelper的话,会默认先生存一个查询总数的SQL。这里需要共用改注解,而PageHelper的生成查询总量的方法其实就在该查询ID的后面追加_count

    private static final String COUNT_PRE = "_COUNT";

    所以这里捕获注解的时候需要去原查询的Id上去捕获,保证统计方法也能拼接上权限SQL。