MyBatis实践之DAO与Mapper

MyBatis实践之DAO与Mapper攻略

MyBatis是一个流行的ORM框架。它使用XML文件或注释映射Java对象到数据库,并提供了一组强大的特性来处理数据库操作。本文将详细讲解MyBatis中的DAO和Mapper,并提供两个示例以演示它们的使用。

DAO

DAO(Data Access Object)是一种数据访问设计模式,它将数据访问从业务逻辑中分离出来。在MyBatis中,DAO通常用于封装数据库的操作。DAO通常由接口和实现类组成,它们之间的关联是通过MyBatis的Mapper实现的。以下是一个简单的DAO接口示例:

public interface UserDAO {
    User selectUserById(int id);
    void insertUser(User user);
    void updateUser(User user);
    void deleteUser(int id);
}

如上所示,这个DAO接口包含了一些简单的CRUD方法,它们是:通过id选择用户,插入用户,更新用户和删除用户。这些方法的实现将会被封装到Mapper映射文件中,并由MyBatis框架负责调用。

Mapper

Mapper是MyBatis的一个重要概念,它是Mapper接口中方法的映射描述文件。Mapper文件中描述了SQL语句以及将这些语句参数映射到Java对象的规则。以下是UserMapper.xml文件的示例:

<mapper namespace="com.myapp.mapper.UserMapper">
    <select id="selectUserById" resultType="User">
        SELECT * FROM user WHERE id = #{id}
    </select>
    <insert id="insertUser" parameterType="User">
        INSERT INTO user(username, password) VALUES(#{username}, #{password})
    </insert>
    <update id="updateUser" parameterType="User">
        UPDATE user SET username=#{username}, password=#{password} WHERE id=#{id}
    </update>
    <delete id="deleteUser">
        DELETE FROM user WHERE id = #{id}
    </delete>
</mapper>

如上所示,这个Mapper文件中包含了用于查询、插入、更新和删除用户的SQL语句。使用resultType和parameterType属性,将Java对象和数据库表之间建立映射关系。

请注意:上文中的User是一个简单的POJO类,它表示了我们要在数据库中保存的数据。

示例

以下是一个演示如何在MyBatis中使用DAO和Mapper的示例:

1.创建User实体类

public class User {
    private int id;
    private String username;
    private String password;
    // 省略getter和setter...
}

2.创建UserDAO接口

public interface UserDAO {
    User selectUserById(int id);
    void insertUser(User user);
    void updateUser(User user);
    void deleteUser(int id);
}

3.创建UserMapper.xml文件

<mapper namespace="com.myapp.mapper.UserMapper">
    <select id="selectUserById" resultType="User">
        SELECT * FROM user WHERE id = #{id}
    </select>
    <insert id="insertUser" parameterType="User">
        INSERT INTO user(username, password) VALUES(#{username}, #{password})
    </insert>
    <update id="updateUser" parameterType="User">
        UPDATE user SET username=#{username}, password=#{password} WHERE id=#{id}
    </update>
    <delete id="deleteUser">
        DELETE FROM user WHERE id = #{id}
    </delete>
</mapper>

4.配置MyBatis

在MyBatis中,我们需要配置SqlSessionFactory和Mapper文件。

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/myapp/mapper/UserMapper.xml" />
    </mappers>
</configuration>

5.编写测试类

public class UserDAOTest {

    private static SqlSessionFactory sqlSessionFactory;

    @BeforeClass
    public static void init() {
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testSelectUserById() {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
        User user = userDAO.selectUserById(1);
        System.out.println(user);
        sqlSession.close();
    }

    @Test
    public void testInsertUser() {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
        User user = new User();
        user.setUsername("TestUser");
        user.setPassword("123456");
        userDAO.insertUser(user);
        System.out.println(user.getId()); // 输出插入的用户ID
        sqlSession.commit();
        sqlSession.close();
    }
}

如上所示,我们创建了一个UserDAOTest测试类来测试我们的代码。在其中,我们先使用SqlSessionFactoryBuilder创建SqlSessionFactory,然后通过SqlSessionFactory创建SqlSession,并获取到UserMapper代理对象,最后使用代理对象进行CRUD操作。

使用以上步骤即可完成MyBatis中DAO与Mapper的使用。

另外再提供一个示例,如何使用注解的方式来进行Mapper映射。

示例2:使用注解映射

如果你使用的是MyBatis3以上的版本,则可以使用注解来简化Mapper映射。以下是使用注解的示例:

public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectUserById(int id);

    @Insert("INSERT INTO user(username, password) VALUES(#{username}, #{password})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    void insertUser(User user);

    @Update("UPDATE user SET username=#{username}, password=#{password} WHERE id=#{id}")
    void updateUser(User user);

    @Delete("DELETE FROM user WHERE id = #{id}")
    void deleteUser(int id);
}

如上所示,我们使用了@Select、@Insert、@Update和@Delete等注解来标记方法,同时也定义了SQL语句。使用@Options注解,我们可以得到插入数据后的自增主键。

使用以上这些注解即可在MyBatis中定义Mapper接口。注解的使用方式非常方便,如果你不想使用XML文件进行映射,可以选择直接使用注解也可。

总结

本文介绍了MyBatis中的DAO和Mapper的使用,同时提供了两个示例来演示它们的使用方式。对于初学者来说,MyBatis的学习曲线可能比较陡峭。但是,一旦你掌握了它的使用方法,它将会为你带来很多便利。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis实践之DAO与Mapper - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java中Servlet的生命周期详解

    让我给你详细讲解一下 “Java中Servlet的生命周期详解”的完整攻略。 什么是Servlet生命周期 Servlet生命周期指的是Servlet从创建到销毁的整个过程,包括初始化、服务和销毁三个过程。 Servlet生命周期的三个阶段 初始化阶段 在初始化阶段,Servlet容器创建Servlet实例,并调用init()方法初始化Servlet。在这个…

    Java 2023年6月2日
    00
  • 新浪java面试经历与感慨分享

    新浪Java面试经历与感慨分享 背景介绍 该经历来自一位Java开发者在新浪公司的面试经历,分享该经历希望能够帮助其他准备面试的开发者,提高他们的面试成功率。 面试前准备 为了顺利通过面试,个人认为主要需要做好以下几个准备: 1. 掌握基础知识 在面试中,基础知识是最重要的。需要熟悉Java核心技术,如集合、IO流等,在掌握基本语法的基础上,对Java底层原…

    Java 2023年5月26日
    00
  • 如何基于JWT实现接口的授权访问详解

    基于JWT实现接口的授权访问详解攻略如下。 JWT简介 JWT (JSON Web Token) 是一种用于进行身份认证的开放标准(RFC 7519)。JWT由三部分组成:Header、Payload 和 Signature。其中,Payload 用于存储要传递的信息,可以包括用户 ID、角色等信息。Header 使用 Base64 编码存储,表示使用的算法…

    Java 2023年5月20日
    00
  • 基于常用json框架介绍和Jackson返回结果处理方式

    基于常用JSON框架介绍和Jackson返回结果处理方式 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。在Java开发中,我们可以使用常见的JSON框架来进行JSON格式的转换和处理。其中,Jackson框架是非常流行的一个JSON框架,下面将介绍如何使用Jackson框架进行返回结果处理。 常用JSON框架…

    Java 2023年5月26日
    00
  • Java字符串编码知识点详解介绍

    Java字符串编码知识点详解介绍 什么是字符串编码? 在计算机中,字符串是由一些字符组成的序列,而字符则是由一个或多个字节表示的。不同的字符集和不同的编码方式会影响到字符串的存储和展示。字符串编码就是将字符转换成字节的过程。 Java中的字符串编码 Java中的字符串编码默认采用Unicode编码方式,即每个字符使用两个字节表示。常见的编码方式还包括ASCI…

    Java 2023年5月20日
    00
  • Java实现在线聊天功能

    Java实现在线聊天功能的完整攻略 如果希望使用Java实现在线聊天功能,可以采用Socket编程以及WebSocket协议两种方式,下面将详细讲解这两种方式的实现方法和步骤。 Socket编程 Socket编程是一种基于TCP/IP协议的底层通信方式,使用该方式可以在两个设备间建立连接,并进行数据的双向传输。下面是实现在线聊天功能的步骤: 在服务器端(例如…

    Java 2023年5月19日
    00
  • SpringBoot2自动装配原理解析

    Spring Boot 2 自动装配原理解析 在本文中,我们将深入了解 Spring Boot 2 中自动装配的原理。我们将介绍 Spring Boot 2 自动装配的基本概念、自动装配的实现原理以及如何自定义自动装配。 Spring Boot 2 自动装配的基本概念 Spring Boot 2 自动装配是指 Spring Boot 2 在启动时自动配置应用…

    Java 2023年5月15日
    00
  • 什么是Java并发编程?

    什么是Java并发编程? Java并发编程是指在Java程序中使用多线程实现并发任务执行的一种编程方式。多线程实现可以充分发挥多核CPU的优势,提高程序的并发处理能力和性能。 Java中的并发编程常用类和接口 Thread:线程类,是Java中用于创建和管理线程的类。 Runnable:代表线程要执行的任务,可以作为Thread类的构造参数使用。 Lock:…

    Java 2023年5月11日
    00
合作推广
合作推广
分享本页
返回顶部