简介

在本章开始之前,先导入章节一中的入门项目,创建好数据库并导入数据,具体sql文件在项目地址中。
深入MyBatis源码之前,需要做的就是要了解MyBatis 是怎样使用的,带着使用过程中出现的问题再到源码中学习了解,会比单纯看源码深刻些。 下面开始了解MyBatis 的日常使用。

对于MyBatis 的使用,这里采用学生管理系统来简单演示MyBatis 的用法和解决使用过程中的问题。

一、select、insert, update 和 delete的映射标签使用

1.1 查询学生列表

  • Mapper接口

    1. public interface StudentMapper {
    2. List<Student> list();
    3. }
  • 映射文件

    1. <?xml version="1.0" encoding="UTF-8" ?>
    2. <!DOCTYPE mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="cn.hdj.mybatis.example.dao.StudentMapper">
    6. <!--resultType 结果集映射类型
    7. 注意,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。
    8. -->
    9. <select id="list" resultType="cn.hdj.mybatis.example.entity.Student">
    10. select * from student
    11. </select>
    12. </mapper>

    1.2 添加学生

  • Mapper接口

    1. public interface StudentMapper {
    2. //添加学生
    3. int addStudent(Student student);
    4. //批量添加学生
    5. int addStudentBatch(List<Student> students);
    6. }
  • 映射文件 ```xml <?xml version=”1.0” encoding=”UTF-8” ?> <!DOCTYPE mapper

    1. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    2. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

    1. <!--

    将会传入这条语句的参数的类全限定名或别名。 这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传入语句的参数,默认值为未设置(unset)。

    推荐写上

{} :

  1. 使用 #{} 参数语法时,MyBatis 会创建 PreparedStatement 参数占位符
  2. 并通过占位符安全地设置参数(就像使用 ? 一样)。
  3. 这样做更安全,更迅速,通常也是首选做法 如果要获取内嵌对象属性,使用链式调用,如: obj1.obj2Name.properties —> INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,SCLASS) VALUES (#{sno},#{sname},#{ssex},#{sbirthday},#{sclass});
  1. <insert id="addStudentBatch" parameterType="cn.hdj.mybatis.example.entity.Student">
  2. INSERT INTO STUDENT (SNO,SNAME,SSEX,SBIRTHDAY,SCLASS)
  3. VALUES
  4. <foreach item="item" collection="list" separator=",">
  5. (#{item.sno}, #{item.sname}, #{item.ssex}, #{item.sbirthday},#{item.sclass})
  6. </foreach>
  7. </insert>

  1. <a name="nZrA4"></a>
  2. #### 1.3 更新学生
  3. - 接口
  4. ```java
  5. public interface StudentMapper {
  6. //更新学生
  7. int updateStudent(Student student);
  8. }
  • 映射文件
    1. <update id="updateStudentById" parameterType="cn.hdj.mybatis.example.entity.Student">
    2. update STUDENT
    3. set
    4. SNAME = #{sname},
    5. SSEX = #{ssex},
    6. SBIRTHDAY = #{sbirthday},
    7. SCLASS = #{sclass}
    8. where SNO = #{sno}
    9. </update>

疑问:

  • {} 的详细用法, #{}与${}的区别?


项目地址

https://github.com/h-dj/Mybatis-Learning

参考