为了账号安全,请及时绑定邮箱和手机立即绑定

Mybatis入门教程:从零开始学习Mybatis

概述

本文详细介绍了Mybatis入门的相关知识,包括Mybatis的基本概念、环境搭建、核心概念、CRUD操作详解以及Mybatis与Spring的集成步骤。通过本文的学习,读者可以快速掌握Mybatis入门知识,轻松实现数据库操作。

Mybatis入门教程:从零开始学习Mybatis
Mybatis简介

Mybatis是什么

Mybatis是一个优秀的持久层框架,它基于Java的持久化SQL执行框架。Mybatis允许开发者通过简单的XML或注解进行配置和原始映射,将接口和Java的POJO(Plain Old Java Object)映射成数据库中的记录。Mybatis提供了一种灵活的映射语句,使得它可以轻松地实现复杂映射关系,并且针对每个SQL语句都可以进行优化,提高性能。

Mybatis的优点和应用场景

Mybatis主要有以下优点:

  1. 简洁的SQL映射配置:Mybatis通过简单直观的XML或注解进行SQL映射配置。
  2. 灵活的SQL执行:Mybatis提供了强大的SQL执行功能,可以执行任何SQL语句。
  3. 与数据库无关:Mybatis支持多种数据库,如MySQL、Oracle、DB2等,开发中可以轻易地切换数据库。
  4. 强大的结果集处理:Mybatis提供了强大的结果集处理功能,可以轻松地处理复杂的查询结果。

Mybatis的应用场景主要涉及各种数据操作,如增删改查(CRUD)操作。此外,在高并发、分布式等复杂环境下,Mybatis也可以提供良好的支持。

环境搭建

开发环境准备

在开发Mybatis应用之前,需要准备以下开发环境:

  • Java开发环境(建议使用JDK 8及以上版本)
  • IDE(如IntelliJ IDEA、Eclipse等)

数据库连接信息配置

为了连接数据库,需要在项目中配置数据库连接信息。以下是一个数据库连接信息的配置示例:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>mybatis-example</artifactId>
  <version>1.0-SNAPSHOT</version>
  <dependencies>
    <!-- Mybatis依赖 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.6</version>
    </dependency>
    <!-- 数据库驱动依赖,这里以MySQL为例 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.23</version>
    </dependency>
  </dependencies>
</project>

数据库连接测试

为了确保数据库连接成功,可以在项目中添加一个测试类来测试数据库连接:

@Test
public void testDatabaseConnection() {
  try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root")) {
    System.out.println("Connection to database successful");
  } catch (SQLException e) {
    System.out.println("Connection to database failed");
  }
}
Mybatis核心概念

SqlSession和SqlSessionFactory

SqlSession是Mybatis提供的执行数据库操作的接口,它是线程不安全的。可以通过SqlSessionFactory创建SqlSession对象。SqlSessionFactory是线程安全的,它是创建SqlSession的工厂。

// 创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("MyBatisConfig.xml"));

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

Mapper接口和XML配置

Mybatis通过Mapper接口和XML配置文件来实现SQL映射。Mapper接口定义了操作数据库的方法,而XML配置文件中定义了这些方法对应的SQL语句。

下面是一个简单的Mapper接口和对应的XML配置文件例子:

// Mapper接口定义
public interface ExampleMapper {
  List<Example> selectAll();
  int insertExample(Example example);
}
<!-- XML配置文件 -->
<mapper namespace="com.example.mapper.ExampleMapper">
  <select id="selectAll" resultType="com.example.model.Example">
    SELECT * FROM example
  </select>
  <insert id="insertExample" parameterType="com.example.model.Example">
    INSERT INTO example (id, name) VALUES (#{id}, #{name})
  </insert>
</mapper>

{}和${}的区别与使用

在Mybatis中,SQL语句中的参数可以使用#{}${}两种方式来表示。

  • #{}:表示的是占位符,Mybatis会对参数进行预编译,从而有效防止SQL注入攻击。
  • ${}:表示的是直接输出值,这里不进行预编译,从而也意味着可能带来SQL注入的风险。

下面是一个例子:

public interface ExampleMapper {
  List<Example> selectById(@Param("id") int id); // 使用#{}
  List<Example> selectByName(@Param("name") String name); // 使用${}
}
<mapper namespace="com.example.mapper.ExampleMapper">
  <select id="selectById" parameterType="int" resultType="com.example.model.Example">
    SELECT * FROM example WHERE id = #{id}
  </select>
  <select id="selectByName" parameterType="string" resultType="com.example.model.Example">
    SELECT * FROM example WHERE name = ${name}
  </select>
</mapper>
CRUD操作详解

增加数据(Insert操作)

Insert操作用来向数据库中插入数据。例如,下面是一个插入数据的例子:

<mapper namespace="com.example.mapper.ExampleMapper">
  <insert id="insertExample" parameterType="com.example.model.Example">
    INSERT INTO example (id, name) VALUES (#{id}, #{name})
  </insert>
</mapper>
// Mapper接口定义
public interface ExampleMapper {
  int insertExample(Example example);
}

// 测试代码
@Test
public void testInsert() {
  ExampleMapper mapper = sqlSession.getMapper(ExampleMapper.class);
  Example example = new Example();
  example.setId(1);
  example.setName("Test");
  int rows = mapper.insertExample(example);
  Assert.assertEquals(1, rows);
}

查询数据(Select操作)

Select操作用来从数据库中查询数据。例如,下面是一个查询数据的例子:

<mapper namespace="com.example.mapper.ExampleMapper">
  <select id="selectAll" resultType="com.example.model.Example">
    SELECT * FROM example
  </select>
</mapper>
// Mapper接口定义
public interface ExampleMapper {
  List<Example> selectAll();
}

// 测试代码
@Test
public void testSelectAll() {
  ExampleMapper mapper = sqlSession.getMapper(ExampleMapper.class);
  List<Example> examples = mapper.selectAll();
  Assert.assertEquals(1, examples.size());
}

更新数据(Update操作)

Update操作用来更新数据库中的数据。例如,下面是一个更新数据的例子:

<mapper namespace="com.example.mapper.ExampleMapper">
  <update id="updateExample" parameterType="com.example.model.Example">
    UPDATE example SET name = #{name} WHERE id = #{id}
  </update>
</mapper>
// Mapper接口定义
public interface ExampleMapper {
  int updateExample(Example example);
}

// 测试代码
@Test
public void testUpdate() {
  ExampleMapper mapper = sqlSession.getMapper(ExampleMapper.class);
  Example example = new Example();
  example.setId(1);
  example.setName("Updated Test");
  int rows = mapper.updateExample(example);
  Assert.assertEquals(1, rows);
}

删除数据(Delete操作)

Delete操作用来删除数据库中的数据。例如,下面是一个删除数据的例子:

<mapper namespace="com.example.mapper.ExampleMapper">
  <delete id="deleteExample" parameterType="int">
    DELETE FROM example WHERE id = #{id}
  </delete>
</mapper>
// Mapper接口定义
public interface ExampleMapper {
  int deleteExample(int id);
}

// 测试代码
@Test
public void testDelete() {
  ExampleMapper mapper = sqlSession.getMapper(ExampleMapper.class);
  int rows = mapper.deleteExample(1);
  Assert.assertEquals(1, rows);
}
Mybatis配置文件详解

mybatis-config.xml配置文件详解

Mybatis的核心配置文件是mybatis-config.xml,它包含了数据库的连接信息、缓存配置、类型处理器配置等信息。下面是一个简单的mybatis-config.xml配置文件的例子:

<configuration>
  <properties>
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
  </properties>
  <typeAliases>
    <typeAlias alias="Example" type="com.example.model.Example"/>
  </typeAliases>
  <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/example/mapper/ExampleMapper.xml"/>
  </mappers>
</configuration>

配置数据源和事务管理

mybatis-config.xml文件中,通过<environments>标签配置环境信息,通过<transactionManager>标签配置事务管理器,通过<dataSource>标签配置数据源。

<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>

映射文件(Mapper XML)配置

映射文件主要是用来定义SQL语句的,这些SQL语句是用来操作数据库的。映射文件的配置主要通过<mappers>标签来配置。

<mappers>
  <mapper resource="com/example/mapper/ExampleMapper.xml"/>
</mappers>
Mybatis与Spring集成

Mybatis与Spring整合步骤

  1. 引入Spring和Mybatis的依赖:在pom.xml文件中,引入Spring和Mybatis的相关依赖。
  2. 配置Spring的bean:在applicationContext.xml中配置SqlSessionFactory和SqlSessionTemplate的bean。
  3. 使用Spring管理SqlSessionFactory:配置SqlSessionFactory bean,并使用SqlSessionTemplate来实现Mybatis的操作。

使用Spring管理Mybatis的SqlSessionFactory

下面是一个简单的例子,展示如何在Spring配置文件中管理SqlSessionFactory。

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource"/>
  <property name="mapperLocations" value="classpath*:mapper/*.xml"/>
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>

下面是一个简单的Mapper接口的例子:

public interface ExampleMapper {
  List<Example> selectAll();
  int insertExample(Example example);
  int updateExample(Example example);
  int deleteExample(int id);
}

在Spring配置文件中配置Mapper接口的bean:


<bean id="exampleMapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="com.example.mapper"/>
  <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
</bean>
``

这样,就可以通过Spring容器来管理SqlSessionFactory,并通过SqlSessionTemplate来执行Mybatis的操作了。
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消