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日

相关文章

  • SSH框架网上商城项目第2战之基本增删查改、Service和Action的抽取

    本文将详细讲解SSH框架网上商城项目第2战之基本增删查改、Service和Action的抽取的完整攻略,包括概述、步骤、示例等内容。 概述 SSH框架是指以Struts2作为Web层,Spring作为业务层和数据访问层的容器,Hibernate作为数据持久化层的开发框架。本次攻略的目的是介绍如何在SSH框架下实现基本增删查改操作,以及Service和Acti…

    Java 2023年6月15日
    00
  • 不到30行JS代码实现Excel表格的方法

    如何用少于30行的JS代码实现Excel表格呢?接下来让我们详细讲解一下。 概述 首先,我们需要明确两件事情:一是我们要创建一个表格,二是我们要将表格数据导出为Excel文件。实现这两个功能,需要用到一些JS库和API。 准备工作 在编写JS代码之前,我们需要先安装以下两个JS库: SheetJS:该库可以使我们将表格数据转换为Excel文件。 FileSa…

    Java 2023年6月15日
    00
  • SpringBoot应用部署到Tomcat中无法启动的解决方法

    SpringBoot是Java开发中的一种框架,用于快速构建应用程序。Tomcat是一个流行的开源Web服务器和应用程序容器,可用于部署Java Web应用程序。通常,我们可以将SpringBoot应用程序打包成一个可执行的JAR文件,并通过命令行启动应用程序,但是有时候我们希望将应用程序部署到Tomcat中,以便在Web服务器上运行。然而,有时候我们会遇到…

    Java 2023年5月19日
    00
  • Java 实战项目之家政服务平台系统的实现流程

    针对Java实战项目之家政服务平台系统的实现流程的完整攻略,我将从以下几个方面进行详细讲解。 1. 系统需求分析 在开始编写代码之前,需要首先进行系统需求分析,这是开发一个应用程序不可或缺的一步。因为需求分析能够为开发人员提供一个设计的蓝图。 在这一步中,需要明确业务流程和产品模块,例如:用户注册、用户登录、订单管理、评价管理等。 2. 数据库设计 在完成需…

    Java 2023年5月24日
    00
  • SSH框架网上商城项目第22战之银行图标以及支付页面显示

    SSH框架网上商城项目的支付页面显示需要显示银行图标,具体步骤如下: 银行图标的获取 首先需要获取银行图标。可以通过以下方式获取: 在网上搜寻对应银行的官网,找到银行的Logo并下载; 在开发者工具中查看银行网页中的Logo图片地址,然后下载该图片; 下载的银行图标需要保存在项目的资源目录中,如webapp/resources/img/bank/。 在支付页…

    Java 2023年5月20日
    00
  • springboot创建多module项目的实例

    创建多module项目是一个常见的需求,它可以帮助我们更好地组织代码,提高代码的可维护性和可扩展性。在Spring Boot中,创建多module项目也非常容易,本文将详细讲解如何创建多module项目的实例。 创建多module项目的步骤 以下是创建多module项目的步骤: 创建一个空的Maven项目。 mvn archetype:generate -D…

    Java 2023年5月15日
    00
  • Java获取上月份最后一天日期8位的示例代码

    下面是Java获取上月份最后一天日期8位的示例代码攻略: 一、获取上月份最后一天的日期 一般情况下,获取任意月份的最后一天日期的代码如下: Calendar calendar = Calendar.getInstance(); // 将日期设置为当月的1号 calendar.set(Calendar.DATE, 1); // 月份-1,即可得到上个月的时间 …

    Java 2023年5月20日
    00
  • Spring Security系列教程之会话管理处理会话过期问题

    Spring Security系列教程之会话管理处理会话过期问题 在使用Spring Security构建Web应用时,会话管理是非常重要的一部分。会话的过期问题也需要得到妥善的处理。本文将对Spring Security的会话管理流程进行详细讲解,并提供两条示例来说明如何处理会话过期问题。 会话管理流程 Spring Security的会话管理处理流程如下…

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