0
点赞
收藏
分享

微信扫一扫

获取插入(更新)后的主键值的方法

首先有两个方法实现

1、使用useGeneratedKeys与KeyProperty(数据库主键一定要是自增的,不然会出错)

2.、使用SelectKey标签

它们两个的区别在于不是所有的数据库都支持主键增长(例如oracle就不支持),如果遇到不支持的就不能使用第一个方法,而需要使用第二个方法。

第一个方法的实现

Model层的代码

package cn.rhl.model;

import java.io.Serializable;


public class BusinessBean  implements Serializable {

    private int id;
    private String addr;
    private  String money;

    public String getMoney() {
        return money;
    }

    public void setMoney(String money) {
        this.money = money;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }
}

Controller层的代码

public String testInsert() {
        BusinessBean businessBean = new BusinessBean();
        businessBean.setAddr("唐山");
        businessBean.setMoney("12");
        selectDateService.insertDate(businessBean);
        System.out.println(businessBean.getId());
        return "success";
    }

Service层的代码

public interface SelectDateService {
    void  insertDate(BusinessBean businessBean);
}

Service层实现类

@Service
public class SelectDateServiceImpl implements SelectDateService {
@Autowired
private SelectDateMapper selectDateMapper; 
@Override
    public void insertDate(BusinessBean businessBean) {
          selectDateMapper.insertDate(businessBean);
    }
}

Mapper层的代码

   void  insertDate(BusinessBean businessBean);

mapper.xml中的写法。

#parameterType 一定要指定,不然获取到的主键值不知道映射到那个具体的实体类中去。
#useGeneratedKeys 使用主键自动增长
#keyProperty 将获取的主键值映射到实体类中的那个字段上

<insert id="insertDate" parameterType="cn.rhl.model.BusinessBean" useGeneratedKeys="true" keyProperty="id">
        insert into business (money,addr) values (#{money},#{addr})
</insert>

这其中要注意两个问题,一个是mapper.xml的parameterType一定要指定,另外一个是保证数据库是支持主键值自增的。

第二个方法的实现,相对来说比较麻烦,但是对数据库不挑剔

<insert id="insertDate" parameterType="cn.rhl.model.BusinessBean">  
    <!--selectKey  会将 SELECT LAST_INSERT_ID()的结果放入到传入的BusinessBean的实体类中,  
        keyProperty 放到实体类的那个属性中
        order AFTER 表示 SELECT LAST_INSERT_ID() 在insert执行之后执行,
              BEFORE 表示 SELECT LAST_INSERT_ID() 在insert执行之前执行,
        resultType 主键类型 -->  
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">  
        SELECT LAST_INSERT_ID()  
    </selectKey>  
     insert into business (money,addr) values (#{money},#{addr})
</insert>    

最后祝大家身体健康,万事胜意。

举报

相关推荐

0 条评论