Mybatis入门(二)
OK,上一篇里,我们完善了项目,我们接着来看一下Mybatis最常用的增删改查。
查询
一个典型的查询语句如下
<select id="selectArticleById" resultType="com.hunter.model.Article">
select * from article where id=#{id}
</select>
相应的Mapper为
Article selectArticleById(int id);
分析:
- resultType:这是查询出来的结果映射,当数据库表字段和java类字段名字相同时,可以直接写类名,mybatis会自动映射。 如果不一样,需要手动配映射,并且需要改成resultMap。下文再讲resultMap。
- #{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>