MyBatis 映射文件

MyBatis 是一个持久层框架,用于简化数据库访问操作。MyBatis 的核心功能是通过映射文件将 SQL 与 Java 代码分离,实现灵活的数据库操作。`select`、`insert`、`update`、`delete` 是基本的 CRUD 操作CRUD中,C代表Create(创建),R代表Retrieve(读取),U代表Update(更新),D代表Delete(删除)。`resultMap` 处理复杂的结果映射,`sql` 提高代码复用性,`cache` 提升性能。掌握这些知识点可以高效地使用 MyBatis 进行数据库开发。

 1.select:用于查询数据。

 **参数传递**

- **单个参数**:

直接使用 `#{param}` 引用参数。

  - 例如:`select * from user where id = #{id}`。

- **多个参数**:

  - **使用 `@Param` 注解**:在接口方法中为参数命名,SQL 中通过 `#{name}` 引用。

    User selectUser(@Param("id") int id, @Param("name") String name);


    select * from user where id = #{id} and name = #{name}

  - **封装为 Map**:

将多个参数封装为 Map,SQL 中通过 `key` 引用。

    Map<String, Object> params = new HashMap<>();

    params.put("id", id);

    params.put("name", name);

    


    select * from user where id = #{id} and name = #{name}

    

  - **封装为对象**:

将多个参数封装为自定义对象,SQL 中通过 `#{对象属性名}` 获取属性值。

    User user = new User();

    user.setId(id);

    user.setName(name);

  


    select * from user where id = #{id} and name = #{name}

 

 **返回结果**

- **简单类型**:

使用 `resultType` 指定返回类型。

  <select id="getCount" resultType="int">

      select count(*) from user

  </select>

- **复杂对象**:

使用 `resultMap` 或 `resultType` 进行映射,`resultType` 和 `resultMap` 二选一,不能同时存在。

  <select id="getUser" resultType="User">

      select * from user where id = #{id}

  </select>

 

2. insert:用于插入数据。

**语法**

<insert id="insertUser" parameterType="User">

    insert into user (name, age) values (#{name}, #{age})

</insert>

 

**获取自增主键**

对于支持自增主键的数据库(如 MySQL),可以通过 `useGeneratedKeys` 和 `keyProperty` 获取插入后的主键值。当调用userMapper.insertUser(user) 方法时,MyBatis 会自动执行插入操作,并将生成的自增主键值设置到 user 对象的id 属性中。这样,我们就可以在插入操作完成后立即获取到新插入记录的主键值。

<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">

    insert into user (name, age) values (#{name}, #{age})

</insert>

 

 3.update:用于更新数据。

 

#### **语法**

<update id="updateUser" parameterType="User">

    update user set name = #{name}, age = #{age} where id = #{id}

</update>

 4. delete:用于删除数据。

#### **语法**

<delete id="deleteUser" parameterType="int">

    delete from user where id = #{id}

</delete>

 5. resultMap:用于处理数据库字段与 Java 对象属性之间的映射关系,特别是当字段名与属性名不一致时。

resultMap 的两个重要子元素是 <id> 和 <result> ,它们分别用于映射主键字段和普通字段。

property ​:指定 Java 对象的属性名称。​ column ​:指定 SQL 查询结果中的列名。​

**基本映射**

<resultMap id="userResultMap" type="User">

    <id property="id" column="id"/>

    <result property="userName" column="user_name"/>

</resultMap>

 

**嵌套结果映射**

- **一对一关系**:使用 `<association>`。

- **一对多关系**:使用 `<collection>`。

 

 6. sql:用于抽取重复的 SQL 片段,提高代码复用性。

#### **语法**

<sql id="userColumns">

    id, name, age

</sql>

在其他 SQL 语句中使用 `<include refid="userColumns">` 来引用这个 SQL 片段。

<select id="getUsers" resultType="User">

    select <include refid="userColumns"/> from user

</select>

 

7. cache:用于缓存查询结果,减少数据库访问次数,提高性能。

**一级缓存**

- **默认开启**:基于 `SqlSession`,同一个 `SqlSession` 中多次执行相同的 `select` 语句会从缓存中获取数据。

- **生命周期**:与 `SqlSession` 一致,`SqlSession` 关闭后缓存失效。

 

**二级缓存**

- **手动开启**:基于命名空间(namespace),不同的 `SqlSession` 之间可以共享缓存。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值