关于Mybatis的INSERT之后返回自增主键的值为1的问题

  //在使用mybatis中插入之后返回最后插入的主键值,如果插入语句书写正确,却出现结果不正确问题:
  //  1.如果主键是对象 返回为null 
  //  2.如果主键为基本类型,返回结果可能是1 //以上为两种错误
   
  //本人错误的原因在于:
  //  公司架构使用的分布式框架是dubbo.在与同事的协调中把自己套进去了,犯了低级错误,实在羞愧。
  //  因为服务与web模块是分离的,当我传入一个对象进行插入的时候,
  //  插入语句返回的结果在服务层被赋值给对象,但我并没有将对象返回给web层,而是使用了如下的代码:
      public Long insertOneIntoOrder(PintuanOrder order) {
	    return orderMapper.insertOneOrderIntoPintuanOrder(order);
      }
  //于是结果返回为1。
  //当我在web层调用如下时:
    Long order_id = pintuanOrderService.insertOneIntoOrder(order); //获得1
    order.getPt_order_id();//获得0 如果改为Long类型的pt_order_id,则结果为null
    
  //正确的处理应该是:
  //1.在service层直接返回插入之后的ID。
        public Long insertOneIntoOrder(PintuanOrder order) {
		     orderMapper.insertOneOrderIntoPintuanOrder(order);
		     return order.getPt_order_id();
	}
  //2.直接返回对象
    	
  //我个人使用第一种 感觉第二种返回数据太多
    
  //在处理这个问题的过程中,因为陷入自己的逻辑怪圈,
  //一直怀疑是自己使用下划线的命名方式导致的数据库赋值转换不成功的问题,
  //几次动用了使用逆反工程开搞的想法,最后怀着一定要解决这个问题的想法,
  //重新搞这个问题,才发现是因为自己的疏忽,犯了幼稚的错误,记下来以示警戒。
  //不过 到底是使用逆反工程好 还是自己编写好  我是一只没有一个明确的答案 
  //有人说逆反的效率低 有人说不能什么都自己写....  这也是一个问题
	
  //附:

  //插入语句
  <insert id="insexxxxer" parameterType="xxxx.PintuanOrder">
      <selectKey keyProperty="pt_order_id" resultType="java.lang.Long" order="AFTER">
       	  SELECT LAST_INSERT_ID()
      </selectKey> 
      INSERT INTO pintuan_order(...)values(...)
  </insert>

  //实体类
  public class PintuanOrder implements Serializable {

	private long pt_order_id;// ID 自增
	private long pt_group_pt_id;// 
	private long pt_group_id;//
	private long pt_item_id;// 
	private String pt_item_name;//
	private int pt_group_num;// 
	private BigDecimal pt_group_price;// 
	private long pt_item_spec_id;// 
	private long pt_actOpen_time;// 
	private long pt_create_time;// 
	private int pt_order_num;// 
	private short pt_group_status;// 
	private short pt_is_start;// 
	private long pt_customer_id;// 
	private String pt_customer_header;// 
	private String pt_receiver_name;// 
	private String pt_cellphone;// 
	private long pt_wuliu_id;// 
	private String pt_wuliu_address;// 
	private short pt_dispatch_style;//
	private short pt_pay_style;// 
	private BigDecimal pt_pay_diwei;// 
	private BigDecimal pt_account_yu_e;// 
	private BigDecimal pt_account_sanfang;// 
	private short pt_account_sf_style;// 
	private BigDecimal pt_account_total;// 
	private short pt_pay_status;// 
	private long pt_pay_time;// 
	private short pt_pay_cancle;// 
	private String pt_mark;// 备注
	
	//get-set --->   方法
  }



你可能感兴趣的:(关于Mybatis的INSERT之后返回自增主键的值为1的问题)