精华内容
下载资源
问答
  • MybatisPlus中@TableField注解的使用

    万次阅读 多人点赞 2019-09-30 14:51:29
    实现 官方文档说明: ... TableField 注解新增属性 ...(讲解:比如我们使用mybatisplus自带的insert()方法向数据库插入数据时,假设我们给age字段赋值为1,但是我们在age字段上的@TableField注解里面加了update="%s...

    实现

    官方文档说明:

    • com.baomidou.mybatisplus.annotations.TableField
      在这里插入图片描述
    • TableField 注解新增属性 update 预处理 set 字段自定义注入
      (讲解:比如我们使用mybatisplus自带的insert()方法向数据库插入数据时,假设我们给age字段赋值为1,但是我们在age字段上的@TableField注解里面加了update="%s+1",那么真真插入到数据库的值就是age=2,而不是age+1了)
    例如:@TableField(.. , update="%s+1") 其中 %s 会填充为字段
    输出 SQL 为:update 表 set 字段=字段+1 where ...
    

    如果给某个字段上@TableField注解里面写update=“now()”,那么最后我们使用mybatisplus自带的insert()方法向数据库插入数据时,这个字段插入到数据库中的值就为当前时间,看下面代码的sql语句即可明白

    例如:@TableField(.. , update="now()") 使用数据库时间
    输出 SQL 为:update 表 set 字段=now() where ...
    
    • TableField 注解新增属性 condition 预处理 WHERE 实体条件自定义运算规则,下面会有代码讲解
    @TableField(condition = SqlCondition.LIKE)
    private String name;
    输出 SQL 为:select 表 where name LIKE CONCAT('%',,'%')
    

    讲解:举个例子来说明@TableField(condition = SqlCondition.LIKE)的作用

    @Data
    @TableName("admin_role")
    public class RoleDO  extends Model<RoleDO> {
     
        /**
         * 角色ID
         */
        @TableId(type = IdType.AUTO)
        private Long id;
     
        /**
         * 角色名称
         */
        @TableField(condition = SqlCondition.LIKE)
        private String name;
     
        /**
         * 角色描述
         */
        private String description;
     
        /**
         * 是否启用:0-不可用,1-可用
         */
        private Boolean enabled;
     
        /**
         * 删除标示:0-未删除,1-已删除
         */
        @TableLogic
        private Boolean deleted;
     
        /**
         * 创建人ID
         */
        protected Long creatorId;
     
        /**
         * 创建人
         */
        protected String creator;
     
        /**
         * 创建时间
         */
        @SuppressFBWarnings("EI_EXPOSE_REP")
        protected Date dateCreated;
     
        /**
         * 修改人ID
         */
        protected Long modifierId;
     
        /**
         * 修改人
         */
        protected String modifier;
     
        /**
         * 更新时间
         */
        @SuppressFBWarnings("EI_EXPOSE_REP")
        protected Date lastModified;
     
        /** 指定主键 */
        @Override
        protected Serializable pkVal() {
            return this.id;
        }
    }
    

    我们通过直接给EntityWrapper对象传入RoleDO实体类来构造EntityWrapper,, EntityWrapper eWrapper = new EntityWrapper(roleDO); (代码如下)

    /**
         * 查询角色列表(分页)
         *
         * @param roleParam 角色参数
         * @return 查询角色分页列表
         */
        public Page<RoleDO> selectListPage(ListRoleParam roleParam) {
            RoleDO roleDO = new RoleDO();
            BeanUtils.copyProperties(roleParam, roleDO);
            Page<RoleDO> page = new Page<RoleDO>((int)roleParam.getPi(), (int)roleParam.getPs()); //得到分页的信息
            EntityWrapper<RoleDO> eWrapper = new EntityWrapper<RoleDO>(roleDO);//构建条件查询对象
            Page<RoleDO> roleDOList = roleDO.selectPage(page, eWrapper);//这里使用的就是Model提供的AR
            return roleDOList;
        }
    

    而对于name这样的字段在日常查询中往往是通过like方式来进行匹配的而非精确匹配,所以此处通过@TableField(condition = SqlCondition.LIKE)来实现动态组合查询条件,会根据前台传入的参数自动组合查询语句并进行分页。

    • 字段填充策略 FieldFill
      在这里插入图片描述
      讲解如下:

    实体类中有如下属性,通过上面的自动填充属性,我们可以实现在进行插入(insert)操作时对添加了注解@TableField(fill = FieldFill.INSERT)的字段进行自动填充(解释:后面会写配置自动填充的配置类,该配置类的作用用于配置自动填充的值)。

    对添加了注解@TableField(fill = FieldFill.INSERT_UPDATE)的字段在进行插入(insert)和更新(update)时进行自动填充。(解释:后面会写配置自动填充的配置类,该配置类的作用用于配置自动填充的值)。

     /**
         * 创建人
         */
        @TableField(fill = FieldFill.INSERT)
        private Long creatorId;
     
        /**
         * 创建时间
         */
        @TableField(fill = FieldFill.INSERT)
        private Date gmtCreat;
     
        /**
         * 修改人
         */
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Long modifierId;
     
        /**
         * 修改时间
         */
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Date gmtModified;
     
        /**
         * 是否可用
         */
        @TableField(fill = FieldFill.INSERT)
        private Boolean availableFlag;
    

    这样我们在具体业务中对实体类进行赋值就可以不用对这些公共字段进行赋值,在执行插入或者更新时就能自动赋值并插入数据库。

    那么要自动赋的值在哪里配置?
    在项目的config包下新建自动填充处理类使其实现接口MetaObjectHandler,接下来我们来写自动赋值的配置类,并重写其方法:

    package com.ws.api.config;
     
    import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
    import org.apache.ibatis.reflection.MetaObject;
    import org.springframework.stereotype.Component;
     
    import java.util.Date;
     
    /**
     * 自动填充处理类
     * @author badao
     * @version 1.0
     * @see
     **/
    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {
     
     
        @Override    //在执行mybatisPlus的insert()时,为我们自动给某些字段填充值,这样的话,我们就不需要手动给insert()里的实体类赋值了
        public void insertFill(MetaObject metaObject) {
        //其中方法参数中第一个是前面自动填充所对应的字段,第二个是要自动填充的值。第三个是指定实体类的对象
            this.setFieldValByName("modifierId", new Long(111), metaObject);
            this.setFieldValByName("gmtModified", new Date(), metaObject);
            this.setFieldValByName("creatorId", new Long(111), metaObject);
            this.setFieldValByName("gmtCreat",new Date(), metaObject);
            this.setFieldValByName("availableFlag",true, metaObject);
          
     
        }
     
        @Override//在执行mybatisPlus的update()时,为我们自动给某些字段填充值,这样的话,我们就不需要手动给update()里的实体类赋值了
        public void updateFill(MetaObject metaObject) {
            this.setFieldValByName("modifierId", new Long(111), metaObject);
            this.setFieldValByName("gmtModified", new Date(), metaObject);
        }
    }
    

    到此,@TableField完成字段自动填充的内容就讲完了

    接下来我们来看@TableField(exist=false)的作用

    比如在实体类中有一个属性为remark,但是在数据库中没有这个字段,但是在执行插入操作时给实体类的remark属性赋值了,那么可以通过在实体类的remark属性上添加

    @TableField(exist=false)
     private String remark;
    

    就不会报错了。
    在这里插入图片描述

    本文转载自:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/89425635

    展开全文
  • spring-boot(thymeleaf)中th:field和th:value的区别

    万次阅读 多人点赞 2019-01-17 21:51:01
    spring-boot中th:field和th:value的区别 一:常用th:标签简介: 我们再用spring-boot框架的时候,可能不会采用我们以往用的jsp页面的方式,而是通过采用thymeleaf渲染的方式进行 前后台数据的交互。常用的标签有 ...

                                   spring-boot中th:field和th:value的区别

    一:常用th:标签简介:

    我们再用spring-boot框架的时候,可能不会采用我们以往用的jsp页面的方式,而是通过采用thymeleaf渲染的方式进行

    前后台数据的交互。常用的标签有

    th:href,用法:th:href="/brand/selectbrand",(用来指明要要跳转的链接)

    th:object,用法:th:object="${brand}",(用来接受后台传过来的对象)

    样例:

        <form class="form form-horizontal" id="form-admin-add" action="#" th:action="@{/brand/updatebyid}" th:object="${brand}">

    th:field,用法:th:field="*{name}",(用来绑定后台对象和表单数据)

    th:value,用法:th:value="${brand.name}",(用对象对name值替换value属性)

    总结:th:field

    样例:

    <form class="form form-horizontal" id="form-admin-add" action="#" th:action="@{/brand/updatebyid}" th:object="${brand}">

            <input type="text" class="input-text" value="" th:value="*{id}" name="id" />

            <input type="text" class="input-text"  value="" th:field="*{code}" placeholder="" id="code"/>

    th:field和th:value的小结:

    thymeleaf里的th:field等同于th:nameth:value,浏览器在解析th:field的时候,会解析成name="${th:field}"的值。

    然后后台就可以接收到从前台传过来的值。而th:value可以接受到后台的的值,后台则可以根据name获取到前台的值。

    th:field和th:value都有两种从后台接受值的方式:1、${obj.name} 2、*{name}。需要注意的是,th:field需要有th:object

    指定前台传过来的参数,否则浏览器在解析的时候会出现错误。

    th:each,用法:th:each="brand:${pageInfo.list}",(后台把对象放在了pageinfo的分页插件的List里,然后用th:each遍

    历后台传过来的对象)。

    样例:

    <tr class="text-c" th:each="order:${pageInfo.list}">
         <td th:text="${order.id}"></td>
         <td th:text="${order.dicMethodDescription}"></td>
         <td th:text="${order.productBrandName}"></td>
         <td th:text="${order.productModelName}"></td>

    th:if,用法:th:if="${pageInfo.list.size() == 0}",(判断传过来的对象是否为空,如果为空,则执行...)

    th:unless,用法:th:unless="${pageInfo.list.size() == 0}"(判断传过来的对象是否为空,如果不为空,则执行...)

    标签只有在th:if中条件成立时才显示,th:unless于th:if恰好相反,只有表达式中的条件不成立,才会显示其内容。

    样例:

    <td th:if="${order.productStateName}==部分退款" th:text="交易成功" class="validate"></td>
    <td th:unless="${order.productStateName}==部分退款" th:text="${order.productStateName}"></td>

    三:thymeleaf实现动态访问controller:

    我们一般链接地址都是写死了的,这样其实间接的降低了系统的灵活性,我们可以在th:href的链接里添加参数,这样

    就可以动态的访问controller,举个栗子:

    //static页面层:

    <a title="编辑信息" href="javascript:;" th:οnclick="'javascript:brand_edit(\'编辑品牌信息\',\'/brand'+@{/updatebyid}+'/'+${brand.id}+'\',800,400)'" class="ml-5" style="text-decoration:none"><i class="Hui-iconfont">&#xe6df;</i></a>

    //controller层:

        //根据品牌名更改品牌的名称和编号信息
        @RequestMapping(value = "/updatebyid/{id}")
        public String updatebyidBefore(Model model, @ModelAttribute(value = "brand") ProductBrand brand,
                @PathVariable("id") Long id) {
            // 根据ID查询用户 和对应的角色
            brand = operatebrand.selectByPrimaryKey(id);
            // 查询对应用户的角色
            model.addAttribute("brand", brand);
            return "maintenance-operate/editor-brand";
        }

    四:对数据库的数据灵活筛选:

    一般我们在访问数据库的时候,可能在数据库中查询的时候写出我们固定需要的值,比如我们想要查的字段需要在某一

    范围内,例如需要查出状态表的状态在(1,3,5,7)状态里。这些状态可以在状态的字典表里查出。

    你可能想到会这样写:select id ,name,code from table where state in(1,3,5,7)。但是别人也想查对应的字段,但是筛选

    的状态不同,比如他筛选的是2,4,6,8。这时候他可能又需要写一套select语句。则这样也失去的代码灵活性。

    我们可以传一个状态数组进去,这时候就会根据状态数组的值来进行筛选。我们来看看实现。

    ServiceImpl层:

    List<OrderInfoForm> result = null;
    result=orderMapper.selectOrdersByStatesSelective(order, new Integer[] {3,4,6,7,8});

    dao层:

    List<OrderInfoForm> selectOrdersByStatesSelective(@Param(value="order")Order order,
        @Param(value="states")Integer[] states);

    mapper层:

    <select id="selectOrdersByStatesSelective" resultMap="AllResultMap" >
        select 
        <include refid="All_Column_List" />
        from order_list
    	LEFT JOIN product_method ON product_method.`code` = order_list.purchase_method
    	LEFT JOIN product_color ON product_color.`code` = order_list.color
    	LEFT JOIN product_guarantee ON product_guarantee.`code` = order_list.guarantee
    	LEFT JOIN product_info ON order_list.product_id = product_info.id
    	LEFT JOIN product_model ON product_info.model = product_model.`code`
    	LEFT JOIN product_standard ON product_info.standard = product_standard.`code`
    	LEFT JOIN product_state ON product_state.`code` = order_list.order_state
    	LEFT JOIN product_apperance ON product_apperance.`code` = order_list.apperance
    	LEFT JOIN product_brand ON product_brand.`code` = product_info.brand
        <where>
        	<if test="order.orderNum != null " >
    	        order_num like "%"#{order.orderNum,jdbcType=VARCHAR}"%"
    	    </if>
    	    <if test="order.operator != null " >
    	        and operator like "%"#{order.operator,jdbcType=VARCHAR}"%"
    	    </if>
    	    <if test="order.purchaseTime != null" >
    	        and purchase_time = #{order.purchaseTime,jdbcType=DATE}
    	    </if>
    	    <if test="order.orderState != null" >
    	        and order_state = #{order.orderState,jdbcType=VARCHAR}
    	    </if>
    	    <if test="order.serialNum != null" >
    	        and serial_num like "%"#{order.serialNum,jdbcType=VARCHAR}"%"
    	    </if>
    	    
    		<if test="states != null and states.length >0">
    			<foreach collection="states" item="state" separator="," open=" and order_state in (" close=")">
    				#{state,jdbcType=BIGINT}
    			</foreach>
    		</if>
    	</where>
      </select>

    注意最后的test的条件:

    解释一下各个的参数:

    1、foreach collection="传过来的状态数组名称"

    2、item="state"用于遍历每个状态

    3、separator=",":用于分割各个状态

    4、open=" 用于在对应位置添加双引号

    5、and order_state in (" close=")"用于在对应结束位置添加双引号

    展开全文
  • Caused by: java.sql.SQLException: Field 'userID' doesn't have a default value 字段需要设置一个默认值

    一、新增记录出现异常

    1.问题的出现,我在新增一个用户信息时,报的错误,不能添加记录到数据库;

     

    2.详细异常信息

    Hibernate: insert into t_user (uname, userAddress, userBirth, userEmail, userGender, userName, userPassword, userPhone) values (?, ?, ?, ?, ?, ?, ?, ?)
    org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: could not insert: [biz.entity.main.User]; uncategorized SQLException for SQL [insert into t_user (uname, userAddress, userBirth, userEmail, userGender, userName, userPassword, userPhone) values (?, ?, ?, ?, ?, ?, ?, ?)]; SQL state [HY000]; error code [1364]; Field 'userID' doesn't have a default value; nested exception is java.sql.SQLException: Field 'userID' doesn't have a default value
    	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)
    	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
    	at org.springframework.orm.hibernate3.HibernateAccessor.convertJdbcAccessException(HibernateAccessor.java:424)
    	at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:410)
    	at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
    	at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
    	at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:683)
    	at common.dao.hibernate.BaseHibernateDao.save(BaseHibernateDao.java:57)
    	at biz.web.service.impl.BizService.addSimpleUser(BizService.java:44)
    	at biz.web.action.sys.SimpleUserAction.add(SimpleUserAction.java:80)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:606)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:446)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:285)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    	at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
    	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
    	at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
    	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238)
    	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238)
    	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:325)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
    	at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
    	at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    	at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
    	at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:544)
    	at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    	at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at common.filter.SessionFilter.doFilter(SessionFilter.java:69)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    	at java.lang.Thread.run(Thread.java:744)
    Caused by: java.sql.SQLException: Field 'userID' doesn't have a default value
    	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074)
    	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006)
    	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2468)
    	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2629)
    	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2719)
    	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
    	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2450)
    	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2371)
    	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2355)
    	at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:139)
    	at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:93)
    	at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:56)
    	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2346)
    	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2853)
    	at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
    	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
    	at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:320)
    	at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203)
    	at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
    	at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
    	at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
    	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
    	at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:713)
    	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:701)
    	at org.hibernate.impl.SessionImpl.save(SessionImpl.java:697)
    	at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:686)
    	at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:1)
    	at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
    	... 73 more

    二、异常信息分析

    1.insert语句执行失败

        异常显示就是insert插入sql语句执行错误导致添加记录到数据库失败;

        根本原因就是Field 'userID' doesn't have a default value;

        字段userID没有设置默认值;

        下面该表的create语句中确实没有给userID设置默认值;

    CREATE TABLE `t_user` (
      `userID` int(11) NOT NULL,
      `uname` varchar(20) default NULL,
      `userAddress` varchar(100) default NULL,
      `userBirth` varchar(10) default NULL,
      `userEmail` varchar(50) default NULL,
      `userGender` int(11) default NULL,
      `userName` varchar(20) default NULL,
      `userPassword` varchar(150) default NULL,
      `userPhone` varchar(255) default NULL,
      PRIMARY KEY  (`userID`)
    );

        导致insert语句对应的userID字段没有插入数据,而该字段不允许为null导致的;

    Hibernate: insert into t_user (uname, userAddress, userBirth, userEmail, userGender, userName, userPassword, userPhone) values (?, ?, ?, ?, ?, ?, ?, ?)

    三、解决异常

    3-1.给字段设置默认值

        这种问题简单的解决办法就是设置默认值,但是当前字段userID是主键不能设置默认值;

    `userAddress` varchar(100) default '阿拉加斯加'

    3-2.Hibernate配置检查

        那可能是Hibernate配置出现了问题;然后找到当前表对应的Entity实体类

        字段userID的配置

    	@Id
    	@GeneratedValue(strategy = IDENTITY)
    	@Column(name = "userID", unique = true, nullable = false)
    	public Integer getUserId() {
    		return this.userId;
    	}

        该字段设置了自增策略,指定不可为空,且是唯一的;
        感觉没啥问题;再次测试新增一条记录还是失败;

    3-3.数据库中表t_user的修改

        然后就从数据表这里入手;

        将当t_user的userID修改为自增

    alter table t_user modify userID int auto_increment;

        因为该字段有外键约束不允许修改;

        索性就把表删了;新建表t_user;直接在设置字段自增且不为空;然后新增一条记录成功了;

    CREATE TABLE `t_user` (
      `userID` int(11) NOT NULL auto_increment,
      `uname` varchar(20) default NULL,
      `userAddress` varchar(100) default NULL,
      `userBirth` varchar(10) default NULL,
      `userEmail` varchar(50) default NULL,
      `userGender` int(11) default NULL,
      `userName` varchar(20) default NULL,
      `userPassword` varchar(150) default NULL,
      `userPhone` varchar(255) default NULL,
      PRIMARY KEY  (`userID`)
    );

     

    四、其他解决方法

    1.修改mysql配置。打开my.ini,查找sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"修改为sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"然后重启MYSQL

    2.设置默认值即可,当然这个字段不是主键的情况下;

    3.MySQL 5 uses a strict mode which needs to be disabled. In Windows, Goto Start-->Programs-->MySQL->MySQL Instance Config Wizard. Follow through the Reconfigure Instance option-->Detailed Configuration-->Continue Next a few screens. At the bottom under Enable TCP/IP option there is 'Enable Strict Mode'. Deslect this option (no tick). Save changes and MySQL will restart.
     

    Powered by niaonao

    展开全文
  • 在IDEA编译器里,spring项目中使用@Autowired注解,出现private field 'xxx' is never assigned警告 解决方案:

    Intellij IDEA使用教程相关系列 目录


    在IDEA编译器里,spring项目中使用@Autowired注解,出现private field 'xxx' is never assigned警告

    解决方案:

    1. 在变量上单击使光标在变量上.

    2. 按Alt+Enter快捷键,显示

       

    3. 上下键选中回车或者鼠标单击途中高亮的那个选项即可.

    展开全文
  • 使用@Autowired注解警告Field injection is not recommended

    万次阅读 多人点赞 2018-07-18 10:57:57
    在使用spring框架中的依赖注入注解@Autowired时,idea报了一个警告 大部分被警告的代码都是不严谨的地方,...Field injection is not recommended 意思就是使用变量依赖注入的方式是不被推荐的。 使用idea解决策...
  • 使用antd的Form组件setFieldsValue可能会出现You cannot set a form field before rendering a field associated with the value.警告,字面意义去看是说在 render之前设置了表单值的问题。 那么怎么解决呢 1、...
  • XMLHttpRequest cannot load http://xxx.com. Request header field Content-Type is not allowed by Access-Control-Allow-Headers. 解决方案: 例如php服务端程序设置头: header('Access-Control-Allow-...
  • Spring Boot做文件上传时出现了The field file exceeds its maximum permitted size of 1048576 bytes.错误,显示文件的大小超出了允许的范围。查看了官方文档,原来Spring Boot工程嵌入的tomcat限制了请求的文件...
  • solr 中 fieldfieldType 学习总结

    千次阅读 2018-02-03 20:14:07
    配置文件schema.xml schema.xml,在SolrCore的conf目录下,它是Solr数据...field:进行索引,需要创建document,document中包括了很多field(域)。 field属性:是否索引、是否存储、是否分词 ,是否多值multiValue
  • @JSONField注解的使用

    万次阅读 多人点赞 2018-09-26 15:19:33
    @JSONField注解可以用在方法(method),属性(field)以及方法中的参数(parameter)上。JSONField中的name属性用来指定JSON串中key的名称。 Demo: @JSONField作用在Field时,其name不仅定义了输入key的名称,同时...
  • 自定义排序field

    千次阅读 2020-10-29 09:23:49
    我们有学生表数据 现在要求排序status,顺序为2-3-1,...order by field(要排序的字段,值1,值2,值3,值4......) 会按照要排序的字段值为值1,值2,值3,值4......的顺序排列 也可以倒序 ...
  • lucene中Field.Index, Field.Store,Field.TermVector详解 lucene在doc.add(new Field("content",curArt.getContent(),Field.Store.NO,Field.Index.TOKENIZED));  Field有两个属性可选:存储和索引。  通过...
  • Field error in object ** on field **

    千次阅读 2019-06-28 16:06:51
    错误信息: org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2...Field error in object 'tbHonorVO' on field 'attachments[0].createtime': rejected...
  • Field及其用法

    万次阅读 2017-11-07 15:31:15
    一、Field类代表一个属性的元数据信息。 二、获得Field 1、Field[] fs=c.getFields(); //获得公有属性(只能是公有的)/*/可以是父类的公有的属性 2、Field[] fs2=c.getDeclaredFields(); //获得所有属性(全部类型...
  • layui中的data.field

    万次阅读 2020-09-24 16:14:47
    data.field 这里data.field可以点出表单中任意name属性 layui.use(['form','jquery','jquery_cookie'],function () { var form = layui.form, layer = layui.layer, $ = layui.jquery, $ = layui.jquery_cookie...
  • 运行时报错Unsatisfied dependency expressed through field 项目本来可以运行,但是我修改了一个方法,然后从昨天晚上就开始报错,上网搜了代码,说是因为没有写service注解, @Service @Transactional 但是我...
  • npm install 时 WARN No repository field No license field 源链接npm 安装出现npm WARN No repository field or no license field 今天在部署一个200lines区块链项目时 A blockchain implementation in 200 ...
  • 从csv文件读取某一列的数据时,报错显示:Error:field larger than field limit(131072) 通过判断发现是因为文件的行数超过限制的行数,所以导致结果既无法在控制台打印,试着转到df,存成csv文件也报类型的错误。 ...
  • Bit field

    千次阅读 2016-02-24 01:35:05
    c 语言中的bit field 是一种节省内存的方式, 用于struct 或者 union 的成员变量的声明。基本的语法是:struct BF { ... type_specifier [declarator] : constant_expression; ... };采用这样一种方式的好处是,...
  • redis bitfield

    千次阅读 2018-08-10 11:39:33
    set key 50 ...bitfield key get u8 0 结果返回 53 (5的ASCII值) bitfield key set u8 0 49 get key 结果返回 10 (说明当初的49是ASCII值,是1的ASCII值) bitfield key incrby u8 0 2  get key ...
  • Field类详解

    万次阅读 2016-10-25 18:06:31
    Java反射之Field
  • Unsatisfied dependency expressed through field 'baseMapper'

    万次阅读 多人点赞 2019-05-23 09:05:22
    首先感谢 ... 这篇文章给我的启示,没有这个启示,我的问题肯定也搞不定,所以对作者表示感谢。 在用mybatis-plus构建了项目后,生成代码后,怎么...一直报“Unsatisfied dependency expressed through field 'b...
  • ES中FieldType讲解

    千次阅读 2020-08-15 08:37:12
    @Field(type=FieldType.Text, analyzer="ik_max_word") 表示该字段是一个文本,并作最大程度拆分,默认建立索引 @Field(type=FieldType.Text,index=false) 表示该字段是一个文本,不建立索引 @Field(type=Field...
  • PyThone field larger than field limit (131072)

    千次阅读 2018-06-27 15:47:39
    添加以下代码 import sys maxInt = sys.maxsize decrement = True while decrement: decrement = False try: csv.field_size_limit(maxInt) except OverflowError: maxInt...
  • java反射--Field用法实践

    万次阅读 多人点赞 2018-08-07 16:29:55
    java反射中可用的方法有很多,如Class (反射的入口)、Method (成员方法)、Field (成员变量),而我想要实现的功能使用Field即可实现。 用法 Field是什么 Field是一个类,位于java.lang.reflect包下。在Java...
  • 处理问题:PyThone field larger than field limit (131072) 文件数据过大,而导致csv无法读取,添加下段代码即可解决 import sys maxInt = sys.maxsize decrement = True while decrement: decrement = False ...
  • Lucene-Field.Store的Field.Index属性笔记

    千次阅读 2017-01-07 14:30:57
    Field有两个属性可选:存储和索引。 通过存储属性你可以控制是否对这个Field进行存储; 通过索引属性你可以控制是否对该Field进行索引。这两个属性的正确组合很重要。 Field.Index Field.Store 说明 TOKENIZED...
  • java Field

    万次阅读 2016-11-03 15:54:05
    原文地址:http://www.cnblogs.com/xinhuaxuan/p/6019510.html一、Field类是什么Field是一个类,位于java.lang.reflect包下。 在Java反射中 Field类描述的是 类的属性信息,通俗来讲 有一个类如下:package ...
  • fastjson忽略JSONField

    千次阅读 2020-07-03 18:56:00
    fastjson忽略JSONField 在字段上加上如下属性即可包是 import com.fasterxml.jackson.annotation.JsonIgnore; @JsonIgnore private String businessScope; 这样就可以忽略fastjson下面的注解 @JSONField(name =...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 276,256
精华内容 110,502
关键字:

field