Mybatis用法进阶

环境:MySQL5.6,jdk1.8

建议:所有的参数加上@Param

resultMap的意义:将查询中得到的结果通过属性的setter方法注入属性里。如果未定义resultMap,则虽然数据库查询成功了但会返回null

insert

插入自增主键

如果设置了自增主键,那插入时,主键字段的值必须为0,否则不会自增;

插入字段后返回自增主键的值


    INSERT INTO ub_article
    (article_id,......
    article_create_time,article_modify_time
    )
    VALUES (#{article.articleId},#{article.userId},......
    #{article.articleCreateTime,jdbcType=TIMESTAMP}, #{article.articleModifyTime,jdbcType=TIMESTAMP})

设置useGeneratedKeys="true"并且制定主键keyProperty;这样在插入成功后就会调用keyProperty的setter方法回填主键。注意,必须加上@Param,否则会报错。
插入成功返回 1;失败返回 0

插入时间字段

三步:
类字段使用java.util.Date,数据库字段使用DATETIME,在插入的value值使用timestamp,比如#{article.articleCreateTime,jdbcType=TIMESTAMP}

MySQL5.7版本在时间字段上处理不好,如果有问题可以参考 mysql 5.7之后版本datetime默认值设置'0000-00-00'

不存在则插入

 insert IGNORE into bd_article_tag_map (article_id,article_tag_id)
        values (#{articleTagMap.articleId}, #{articleTagMap.articleTagId})
        

关键是设置数据库字段为unique,这里设置了联合2个字段unique;根据unique字段来判断是否插入,插入成功返回 1,失败返回 0;

update

如果字段非空,则更新


    UPDATE ub_article
    
        
            article_title =#{articleTitle},
        
        
            article_summary=#{articleSummary},
        
        
            article_click=#{articleClick},
        
    
    WHERE article_id=#{articleId}

注意:字段后面的逗号,不可省略

delete

foreach的用法

接口方法

public int deleteIfNotExist(@Param("articleId")int articleId,@Param("list") List tagIdList);

xml


    DELETE  FROM bd_article_tag_map
    WHERE article_id=#{articleId}
    AND article_tag_id NOT IN
    
        #{item}
    

select

left join 联合查询

join的意义:把两个表的属性加起来
left join 的意义:左表的属性会全部显示,右表的属性缺少则填null


下面的article_id字段在两个表中都存在,必须加上表前缀;这里表前缀需要写成表的别名,否则会报错找不到此字段。

  

你可能感兴趣的:(Mybatis用法进阶)