码上敲享录 > Mybatis面试题 > Mapper 编写有几种方式 ?

Mapper 编写有几种方式 ?

上一章章节目录下一章 2023-07-16已有153人阅读 评论(0)

在MyBatis中,Mapper接口的编写有以下几种方式:


1. 注解方式:使用注解来定义Mapper接口中的方法,并将SQL语句直接写在注解中。常用的Mapper注解包括@Select、@Insert、@Update、@Delete等,通过这些注解可以直接映射方法与对应的SQL语句。


示例:

```java

@Mapper

public interface UserMapper {

   @Select("SELECT * FROM user WHERE id = #{id}")

   User getUserById(@Param("id") int id);


   @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")

   int addUser(User user);

}

```


2. XML映射文件方式:使用XML映射文件来定义Mapper接口中的方法和对应的SQL语句。在XML中定义SQL语句,并通过namespace和id来标识Mapper接口方法与XML中的SQL语句的对应关系。


示例:

```java

// UserMapper.java

public interface UserMapper {

   User getUserById(int id);

   int addUser(User user);

}


<!-- UserMapper.xml -->

<mapper namespace="com.example.UserMapper">

   <select id="getUserById" resultType="com.example.User">

       SELECT * FROM user WHERE id = #{id}

   </select>


   <insert id="addUser" parameterType="com.example.User">

       INSERT INTO user(name, age) VALUES(#{name}, #{age})

   </insert>

</mapper>

```


3. 自定义SQL的Provider方式:使用注解和Provider类的配合来动态生成SQL语句。通过在Mapper接口上使用@SelectProvider、@InsertProvider、@UpdateProvider、@DeleteProvider等注解,指定Provider类来生成SQL语句。Provider类中定义了动态生成SQL的方法。


示例:

```java

@Mapper

public interface UserMapper {

   @SelectProvider(type = UserSqlProvider.class, method = "getUserByIdSql")

   User getUserById(int id);


   @InsertProvider(type = UserSqlProvider.class, method = "addUserSql")

   int addUser(User user);

}


public class UserSqlProvider {

   public static String getUserByIdSql(int id) {

       return "SELECT * FROM user WHERE id = " + id;

   }


   public static String addUserSql(User user) {

       return "INSERT INTO user(name, age) VALUES(" + user.getName() + ", " + user.getAge() + ")";

   }

}

```


这些方式各有优缺点,可以根据实际需求和个人偏好来选择最适合的方式。注解方式简洁方便,适合简单的SQL语句;XML方式可读性较好,支持复杂SQL场景;Provider方式灵活性较高,适用于需要动态生成SQL的情况。


向大家推荐《Activiti工作流实战教程》:https://xiaozhuanlan.com/activiti
0

有建议,请留言!

  • *您的姓名:

  • *所在城市:

  • *您的联系电话:

    *您的QQ:

  • 咨询问题:

  • 提 交