【MyBatis学习笔记】3. MyBatis插入,更新和删除

文章目录

      • 将一个Entity的数据, 插入到表中
      • 插入成功后, 获取到id
        • 方法1 selectKey
        • 方法2, useGeneratedKeys的区别
        • 这两种方法有什么区别
        • 在Oracle中SelectKey的用法
      • 更新 update
      • 删除
      • Mybatis的两种传值方式


将一个Entity的数据, 插入到表中

<insert id="insert" parameterType="com.imooc.mybatis.entity.Goods">
    insert into t_ggods(title,sub_title,original_cost,current_price,discount,is_free_delivery,category_id) 
    values (#{title},#{sub_itle},#{original_cost},#{current_price},#{discount},#{is_free_delivery},#{category_id}) 
insert>

在java代码中添加

SqlSession session=null;
try{
    session=MyBatisUtils.openSession();
    Goods goods=new Goods();
    goods.setTitle("测试商品");
    goods.setSubTitle("测试子标题");
    goods.setOriginalCost(200f);
    goods.setCurrentPrice(100f);
    goods.setDiscount(0.5f);
    goods.setIsFreeDelivery(1);
    goods.setCategoryId(43);
    //insert()方法返回值代表本次成功插入的记录总数
    int num=session.insert("goods.insert",goods);
    session.commit();//提交事务数据
}catch(Exception e){
    if(session!=null){
        session.rollback();//回滚事务
    }
    throw e;
}finally{
    MyBatisUtils.closeSession();
}

插入成功后, 获取到id

方法1 selectKey

<insert id="insert" parameterType="com.imooc.mybatis.entity.Goods">
    insert into t_ggods(title,sub_title,original_cost,current_price,discount,is_free_delivery,category_id) 
    values (#{title},#{sub_itle},#{original_cost},#{current_price},#{discount},#{is_free_delivery},#{category_id}) 
    <selectKey resultType="Integer" keyProperty="goodsId" order="AFTER">
        select last_insert_id()
    selectKey>
insert>

方法2, useGeneratedKeys的区别

<insert id="insert" parameterType="com.imooc.mybatis.entity.Goods" useGeneratedKeys="true" keyProperty="goodsId" keyColumn="goods_id">
    insert into 语句
</insert>

这两种方法有什么区别

  • selectKey标签需要明确编写获取最新主键的SQL语句
  • useGeneratedKeys属性会自动根据驱动生成对应SQL语句
  • selectKey适用于所有的关系型数据库, 但编写一点
  • useGeneratedKeys只支持"自增主键"类型的数据库, 使用简单

在Oracle中SelectKey的用法

<insert id="insert" parameterType="com.itlaoqi.mybatis.entity.Goods">
    insert into sql语句
    <selectKey resultType="Integer" order="BEFORE" keyProperty="goodsId">
        select seq_goods.nextval as id from dual    
    selectKey>
insert>

更新 update

<update id="update" parameterType="com.itlaoqi.mybatis.entity.Goods">
    update `babytun`.`t_goods` 
    set `title`=#{title}, `sub_title`=#{subTitle}, `category_id`=#{categoryId} 
    where `goods_id`=#{goodsId}  
update>

代码执行, 返回影响的记录数.

删除

<delete id="delete" parameterType="Integer">
    delete from t_goods where goods_id=#{value}
delete>

代码执行, 返回影响的记录数.

Mybatis的两种传值方式

  • ${}文本替换, 未经任何处理对SQL文本替换
  • #{}预编译传值, 使用预编译传值可以预防SQL注入

你可能感兴趣的:(【JAVA】MyBatis,java)