Java Mybatis框架由浅入深全解析上篇

yizhihongxing

Java Mybatis框架由浅入深全解析上篇

介绍

Java Mybatis框架是一个基于Java语言的数据映射框架,它是一种半自动化的ORM框架,通过XML配置文件或注解的方式将Java对象与数据库进行映射。

Mybatis的基本结构

Mybatis的基本结构包括四个部分:

  1. Configuration(配置类):读取mybatis配置文件中的信息,生成全局唯一的SQLSessionFactory对象。
  2. SQLSessionFactory:是自定义的一个工厂对象,用于生产SqlSession对象。
  3. SqlSession:是Mybatis中最重要的对象,用于进行数据持久化操作。
  4. Mapper:是映射接口,包含了访问数据库的SQL映射方法。

Mybatis的使用

1. 搭建Mybatis环境

  1. 引入Mybatis的jar包
  2. 编写Mybatis配置文件mybatis.xml
  3. 编写数据库配置文件db.properties

2. 编写Mapper映射接口

  1. 定义Mapper接口
  2. 定义Mapper接口中的SQL映射方法并配置SQL语句

3. 编写Mapper映射文件

  1. 编写Mapper映射文件,并配置数据库表与Java对象的映射关系
  2. 编写SQL语句

4. 在代码中通过SqlSessionFactory和SqlSession对象进行数据持久化操作

  1. 通过SqlSessionFactoryBuilder类的build()方法创建SqlSessionFactory对象
  2. 通过SqlSessionFactory对象创建SqlSession对象
  3. 调用SqlSession对象的方法进行数据持久化操作

示例一

编写Mapper接口

public interface UserMapper {
    // 获取用户信息
    User getUserById(int id);

    // 添加用户
    void addUser(User user);

    // 更新用户信息
    void updateUser(User user);

    // 删除用户
    void deleteUser(int id);
}

编写Mapper映射文件

<mapper namespace="UserMapper">
    <select id="getUserById" resultType="User">
        select * from user where id=#{id}
    </select>

    <insert id="addUser" parameterType="User">
        insert into user(username,password,birthday,sex,address) values(#{username},#{password},#{birthday},#{sex},#{address})
    </insert>

    <update id="updateUser" parameterType="User">
        update user set username=#{username},password=#{password},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
    </update>

    <delete id="deleteUser" parameterType="int">
        delete from user where id=#{id}
    </delete>
</mapper>

在代码中进行数据持久化操作

// 通过SqlSessionFactoryBuilder类的build()方法创建SqlSessionFactory对象
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

// 通过SqlSessionFactory对象创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();

// 获取Mapper代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

// 添加用户
User user = new User("Tom", "123456", new Date(), 1, "北京");
userMapper.addUser(user);

// 获取用户信息
User getUser = userMapper.getUserById(user.getId());
System.out.println(getUser);

// 更新用户信息
getUser.setUsername("Jack");
userMapper.updateUser(getUser);

// 删除用户
userMapper.deleteUser(getUser.getId());

// 提交事务
sqlSession.commit();

// 关闭SqlSession对象
sqlSession.close();

示例二

编写Mapper接口

public interface OrderMapper {
    // 根据订单ID查询订单
    Order getOrderById(int id);

    // 查询订单及订单所属用户信息
    Order queryOrderUserById(int id);

    // 查询订单及订单所属用户信息(关联查询方式二)
    Order queryOrderUserById2(int id);
}

编写Mapper映射文件

<mapper namespace="OrderMapper">
    <select id="getOrderById" resultMap="orderResultMap">
        select * from orders where id=#{id}
    </select>

    <resultMap id="orderResultMap" type="Order">
        <id property="id" column="id"/>
        <result property="orderTime" column="ordertime"/>
        <result property="totalPrice" column="totalprice"/>
        <result property="status" column="status"/>

        <association property="user" column="user_id" select="UserMapper.getUserById"/>
    </resultMap>

    <select id="queryOrderUserById" resultMap="orderResultMap">
        select o.id,ordertime,totalprice,status,u.username,u.sex,u.address
        from orders o left join user u on o.user_id=u.id
        where o.id=#{id}
    </select>

    <select id="queryOrderUserById2" resultMap="orderResultMap">
        select o.id,ordertime,totalprice,status,u.username,u.sex,u.address
        from orders o,user u
        where o.user_id=u.id and o.id=#{id}
    </select>
</mapper>

在代码中进行数据持久化操作

// 通过SqlSessionFactoryBuilder类的build()方法创建SqlSessionFactory对象
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

// 通过SqlSessionFactory对象创建SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();

// 获取Mapper代理对象
OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);

// 根据订单ID查询订单
Order order = orderMapper.getOrderById(3);
System.out.println(order);

// 查询订单及订单所属用户信息(关联查询方式一)
Order order2 = orderMapper.queryOrderUserById(3);
System.out.println(order2);

// 查询订单及订单所属用户信息(关联查询方式二)
Order order3 = orderMapper.queryOrderUserById2(3);
System.out.println(order3);

// 关闭SqlSession对象
sqlSession.close();

以上是关于《Java Mybatis框架由浅入深全解析上篇》的完整攻略,示例中涉及到了编写Mapper映射接口、Mapper映射文件以及在代码中进行数据持久化操作等过程。希望可以帮助到您。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Mybatis框架由浅入深全解析上篇 - Python技术站

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

相关文章

  • 详解Linux下JDK、Tomcat的安装及配置

    下面是详解Linux下JDK、Tomcat的安装及配置的完整攻略。 1. 确定安装路径 在安装JDK和Tomcat之前,需要先确定它们的安装路径。一般情况下,我们将它们安装在 /opt 目录下: $ sudo mkdir /opt/java /opt/tomcat 2. 安装JDK 2.1 下载JDK 从Oracle官网下载JDK二进制文件,下载地址为:ht…

    Java 2023年5月19日
    00
  • 如何自定义Java类加载器?

    自定义Java类加载器是Java中非常重要的一项功能,可以实现自己的加载逻辑和自定义的类查找方案,在很多场合下具备重要的应用价值。本文将详细讲解自定义Java类加载器的使用攻略。 目录 Java类加载器 自定义Java类加载器 示例说明一 示例说明二 结语 Java类加载器 在讲解自定义Java类加载器之前,我们需要了解Java类加载器。Java在运行时动态…

    Java 2023年5月11日
    00
  • java 定时器线程池(ScheduledThreadPoolExecutor)的实现

    针对“java 定时器线程池(ScheduledThreadPoolExecutor)的实现”,我将会给出以下的完整攻略: 线程池的概念 “线程池”即“ThreadPool”,是指在Java中为了更加有效地使用系统资源,而设计的多线程实现方法。其底层的实现原理是预先创建好若干个可用的线程,并放入池中等待调用。当有任务需要处理时,线程池会去从池中获取一个线程进…

    Java 2023年5月18日
    00
  • Java SimpleDateFormat与System类使用示例详解

    Java SimpleDateFormat与System类使用示例详解 SimpleDateFormat类 SimpleDateFormat是Java中用于格式化和解析日期的类,可以将日期转换为指定格式的字符串,也可以将指定格式的字符串转换为日期对象。 格式化日期 以下是一个将日期格式化为指定格式字符串的示例: import java.text.Simple…

    Java 2023年5月20日
    00
  • Springboot基础学习之初识SpringBoot

    下面我将为您详细讲解“Springboot基础学习之初识SpringBoot”的完整攻略。 概述 Spring Boot是一个基于Spring框架的快速开发Web应用的框架。它提供了自动配置、快速开发等特性,使开发者极大地提高了开发效率。当然,使用Spring Boot并不需要了解过多的Spring配置,非常适合初学者入门。 在这个攻略中,我们将带领您入门S…

    Java 2023年5月31日
    00
  • spring boot项目打包成war在tomcat运行的全步骤

    下面是详细的步骤。 1.创建Spring Boot项目 首先,需要使用Spring Initializr创建一个Spring Boot项目。这里我们以创建一个简单的Spring Boot RESTful应用为例。 可以使用如下命令创建: curl https://start.spring.io/starter.zip -o myproject.zip unz…

    Java 2023年5月19日
    00
  • Java超详细介绍抽象类与接口的使用

    Java超详细介绍抽象类与接口的使用 在Java语言中,抽象类和接口是两种重要的语法结构,它们可以用来描述一类对象所共有的特性和行为。本文将从定义、特点、使用场景、实现方式等多个方面,超详细地介绍抽象类和接口在Java中的使用。 抽象类的定义和特点 抽象类是一种特殊的类,它不能直接被实例化,只能用来作为其他类的基类。抽象类中包含了多个方法的定义,这些方法可以…

    Java 2023年5月26日
    00
  • Java中实现Comparator接口和用法实例(简明易懂)

    Java中实现Comparator接口和用法实例(简明易懂) 什么是Comparator接口 在Java中,Comparator接口是一个函数式接口,它定义了两个对象之间比较的方法,以便根据指定的属性对对象进行排序。与Comparable接口类似,但是它可以实现对任何对象的排序。 实现Comparator接口 要实现Comparator接口,您需要执行以下步…

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