less than 1 minute read

OK,上一篇里,我们完善了项目,我们接着来看一下Mybatis最常用的增删改查。

查询

一个典型的查询语句如下

    <select id="selectArticleById" resultType="com.hunter.model.Article">
        select * from article where id=#{id}
    </select>

相应的Mapper为

    Article selectArticleById(int id);

分析:

  1. resultType:这是查询出来的结果映射,当数据库表字段和java类字段名字相同时,可以直接写类名,mybatis会自动映射。 如果不一样,需要手动配映射,并且需要改成resultMap。下文再讲resultMap。
  2. #{id}这是传入的参数占位符,相当于JDBC prepareStatement。非常重要,Mybatis中还用一种占位符${},这会直接把传入的字符串与SQL语句拼接,容易产生SQL注入问题。如
     <select id="selectTest" resultType="com.hunter.model.Article">
         select * from article where ${column}=#{value}
     </select>
    
     Article article = articleMapper.selectTest("id","1");
    

    可以查看控制台输出的SQL语句,把传入的id传到了column

     ==>  Preparing: select * from article where id=?
    

    如果查询条件是多参数的,如

     <select id="selectArticleById" resultType="com.hunter.model.Article">
         select * from article where id=#{id} and name=#{name}
     </select>
    

    那么就需要修改Mapper

     Article selectArticleByIdAndName(@Param("id") int id,@Param("name") String name);
    

增加

<insert id="insertAuthor">
  insert into Author (id,username,password,email,bio)
  values (#{id},#{username},#{password},#{email},#{bio})
</insert>

如果需要返回增加后的主键(前提是数据库支持自动生成主键),那么可以这么写。这样就会把结果id写入类的id

<insert id="insertAuthor" useGeneratedKeys="true"
    keyProperty="id">
  insert into Author (username,password,email,bio)
  values (#{username},#{password},#{email},#{bio})
</insert>

如果需要批量增加,如传一个Author List,Mybatis也是支持的

Integer addAuthors(List<Author> authors);
<insert id="insertAuthor" useGeneratedKeys="true"
    keyProperty="id">
  insert into Author (username, password, email, bio) values
  <foreach item="item" collection="list" separator=",">
    (#{item.username}, #{item.password}, #{item.email}, #{item.bio})
  </foreach>
</insert>

foreach

foreach用于对集合进行遍历(上面是对List进行了遍历),foreach有6个参数,collection、item、separator、index 、close、open。collection表示传入的可迭代对象(如List,Set,Map,数组),index是迭代的序号,item是迭代的元素。 特别的,当使用Map时,index是key,item是value。

删除

用法类似

<delete id="deleteAuthor">
  delete from Author where id = #{id}
</delete>

修改

<update id="updateAuthor">
  update Author set
    username = #{username},
    password = #{password},
    email = #{email},
    bio = #{bio}
  where id = #{id}
</update>