MyBatis配置与使用-初入篇

简介: MyBatis配置与使用

依赖引入

<dependency>
   <groupId>org.mybatis</groupId>
   <artifactId>mybatis</artifactId>
   <version>3.5.10</version>
 </dependency>

首先引入MyBatis依赖。

注:MyBatis底层是JDBC驱动,所以我们仍然需要引入MySQL连接驱动依赖。

创建配置

resources文件夹中创建mybatis-config.xml文件

XML 配置文件中包含了对 MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。

文件的配置内容官方给出了一个基本的内容:

<?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE configuration
         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 <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="org/mybatis/example/BlogMapper.xml"/>
     </mappers>
 </configuration>

我们直接在对应的配置字段处,填写urlpassworddriver等配置。

创建接口

MyBatis中的mapper接口相当于以前的Dao,不过我们是不需要写实现类的。

我们先创建接口。

网络异常,图片无法展示
|

就和我们以前的Dao接口一模一样。

但是我们的实现类就不需要了,我们用xml配置。

创建Mapper.xml

扩展

我们创建Dao接口对应的Mapper时,我们可以在资源中创建一个和java中路径一样的包。

当然,这不是必要的。

如果你是要这样创建一个包:

网络异常,图片无法展示
|

那在创建时就要注意,这个是创建文件夹(目录),不是包。

网络异常,图片无法展示
|

格式也不是.

创建之后,我们命名最好对应接口名,我这里接口是UserMappermapper.xml就叫UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.janyork.mybatis.mapper.UserMapper">
 </mapper>

在为编写语句时,默认的内容为以上内容。

namespace是接口路径。

那此时,你想添加一条写入语句(SQL),那可以使用insert标签,如下:

<?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.janyork.mybatis.mapper.UserMapper">
    <insert id="insertUser" parameterType="com.janyork.mybatis.pojo.User">
         INSERT INTO user (name)
         VALUES (#{name})
         </insert>
 </mapper>

注:parameterType路径为实体类路径。id为你调用时调用的方法名,对应Dao接口方法名

/**
      * 添加用户
      * @return  行数
      * @param name 用户name
      */
     int insertUser(String name);

此时我的接口带了参数,那么我们就使用#或者$来插入。

${}是字符串替换,往往与#{}相混淆,而#{}是预编译处理命令。#{}多用于命令场景。

我们这就直接用#了。

传输的参数叫name,那么就直接获取name,格式就是#{参数名}

使用Mybatis

package com.janyork.mybatis.utils;
 import org.apache.ibatis.io.Resources;
 import org.apache.ibatis.session.SqlSession;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 import java.io.IOException;
 import java.io.InputStream;
 /**
  * @author JanYork
  * @date 2022/8/9 8:24
  * @description MyBatis工具类
  */
 public class MyBatisUtils {
     private static SqlSessionFactory sqlSessionFactory;
     static {
         try {
             //读取配置文件
             String resource = "mybatis-config.xml";
             InputStream inputStream = Resources.getResourceAsStream(resource);
             sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
     /**
      * 获取 SqlSession
      * @return SqlSession对象
      */
     public static SqlSession getSqlSession() {
         return sqlSessionFactory.openSession();
     }
 }

我们创建一个工具类,里面的类和方法官方文档都是提供的,也有说明。

然后我们创建一个测试类(我这里就直接单元测试了)。

网络异常,图片无法展示
|

结果就是写入了一个用户名———>Jan

注:我数据库user表就两个字段(idname)。

现在我们已经可以写入了,但是你有没有发现有的地方写起来很麻烦。

缩减包名

比如这里:

网络异常,图片无法展示
|

这么长,一两个还好,要是很多句岂不是麻烦死了...

我们可以这样:

网络异常,图片无法展示
|

在配置文件里面,创建typeAliases标签,里面可以配置多个typeAlias

typeAlias里面type属性指向我们的用户实体类,alias属性用于定义它的替代名字。

<typeAliases>
         <typeAlias type="com.janyork.mybatis.pojo.User" alias="User"/>
     </typeAliases>

网络异常,图片无法展示
|

现在这样是不是就简短多了。

删改查

我们刚刚试了写入,但是没试过改查,那是因为查有点不一样,修改删除还是差不多的。

删除:

<delete id="deleteUser" parameterType="User">
         DELETE FROM user WHERE id = #{id}
     </delete>

看上面的图会发现,我这里多了个属性——>resultMap

<select id="selectUserByName" parameterType="User" resultMap="BaseResultMap">
         SELECT * FROM user WHERE name = #{name}
     </select>
     <select id="selectAllUser" parameterType="User" resultMap="BaseResultMap">
         SELECT * FROM user
     </select>

那这个resultMap="BaseResultMap"是什么呢??

他是一个对应SQL与实体类字段的配置。

网络异常,图片无法展示
|

在这里,我们配置了一个字段——>resultMap

<resultMap id="BaseResultMap" type="com.janyork.mybatis.pojo.User">
         <id column="id" property="id" jdbcType="INTEGER"/>
         <result column="name" property="name" jdbcType="VARCHAR"/>
     </resultMap>

resultMapid命名自定义,type指向实体类。

id 属性:唯一标识,此 id 值用于 select 元素 resultMap 属性的引用。

type 属性:表示该 resultMap 的映射结果类型。

result 子节点:用于标识一些简单属性,其中 column 属性表示从数据库中查询的字段名或别名, property 属性则表示查询出来的字段对应的值赋给实体对象的哪个属性。

resultMap有多个子节点属性,不过常用的就idresult

子节点说明:

  • constructor - 用于注入结果到构造方法中
  • id – 标识ID列
  • result – 表示一般列
  • association – 关联查询
  • collection – 查询集合
  • discriminator - 鉴别器:mybatis可以使用discriminator判断某列的值,然后根据某列的值改变封装行为

column属性是数据库的字段名,property是实体类的字段名,jdbcType是数据库字段类型。

这样,配置好后就可以进行查改操作了。

大致结构

网络异常,图片无法展示
|

相关文章
|
2月前
|
SQL XML Java
mybatis复习01,简单配置让mybatis跑起来
文章介绍了MyBatis的基本概念、历史和特点,并详细指导了如何配置MyBatis环境,包括创建Maven项目、添加依赖、编写核心配置文件、创建数据表和实体类、编写Mapper接口和XML配置文件,以及如何编写工具类和测试用例。
mybatis复习01,简单配置让mybatis跑起来
|
3月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
6月前
|
SQL 安全 BI
基于jeecg-boot的nbcio-boot因升级mybatis-plus到3.5.3.1和JSQLParser 到4.6而引起的在线报表配置报错处理
基于jeecg-boot的nbcio-boot因升级mybatis-plus到3.5.3.1和JSQLParser 到4.6而引起的在线报表配置报错处理
160 0
|
2月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
44 1
|
3月前
|
缓存 Java 数据库连接
mybatis1.常见配置
本文介绍了MyBatis框架中的常见配置及其加载顺序。配置可通过`properties`元素、资源文件或方法参数传递,其中方法参数传递的属性具有最高优先级。文章列举了几个重要的配置项,如`cacheEnabled`用于全局开启或关闭缓存功能;`lazyLoadingEnabled`控制对象的延迟加载行为;`useGeneratedKeys`允许JDBC支持自动生成主键;`defaultExecutorType`设定默认执行器类型等。此外,还介绍了多环境配置方法,通过`environments`元素可定义不同环境下的数据库连接信息,并可根据需求动态选择加载特定环境
|
4月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
86 3
|
5月前
|
SQL 人工智能 Java
mybatis-plus配置sql拦截器实现完整sql打印
_shigen_ 博主分享了如何在MyBatis-Plus中打印完整SQL,包括更新和查询操作。默认日志打印的SQL用?代替参数,但通过自定义`SqlInterceptor`可以显示详细信息。代码示例展示了拦截器如何替换?以显示实际参数,并计算执行时间。配置中添加拦截器以启用此功能。文章提到了分页查询时的限制,以及对AI在编程辅助方面的思考。
575 5
mybatis-plus配置sql拦截器实现完整sql打印
|
4月前
|
Java 数据库连接 mybatis
SpringBoot配置Mybatis注意事项,mappers层下的name命名空间,要落实到Dao的video类,resultType要落到bean,配置好mybatis的对应依赖。
SpringBoot配置Mybatis注意事项,mappers层下的name命名空间,要落实到Dao的video类,resultType要落到bean,配置好mybatis的对应依赖。
|
5月前
|
XML 前端开发 Java
Mybatis-Plus乐观锁配置
Mybatis-Plus乐观锁配置
|
5月前
|
Java Spring
mybatisplus的typeAliasesPackage 配置
【6月更文挑战第20天】mybatisplus的typeAliasesPackage 配置
604 3