MyBatis使用详细教程

什么是MyBatis

MyBatis简而言之就是一个数据库框架,一种用于简化JDBC开发的持久层框架

既然会出现MyBatis框架来简化JDBC开发那么JDBC必然会存在一些开发上的不便或者缺点

JDBC的缺点

  1. 操作繁琐

  2. 硬编程(也就是说程序被写死了,当需求发生变化时得要改源码)

操作

了解完MyBatis之后,就是要了解他的一些基本操作流程

  1. 导入mysql数据库和MyBatis框架的jar包/maven直接导入坐标

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

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.25</version>
</dependency>
  1. 2. 设置配置信息

首先要在resources目录下创建配置文件,配置信息可以直接从官网复制粘贴

https://mybatis.org/mybatis-3/zh/index.html

<?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>
  1. 3. 获取配置信息

配置信息设置好之后就要获取配置信息,之后便是执行SQL语句,执行SQL语句就需要执行SQL的对象(万物皆对象)

MyBatis提供了一个类SqlSessionFactory来替我们获取sql执行对象

如何使用可以从官网复制粘贴

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  1.  4. 获取SQL执行对象

我们可以通过sqlSessionFactory来获取sqlSession对象

SqlSession sqlSession = sqlSessionFactory.openSession();
  1. 5. 执行SQL语句

众所周知我们Java程序必须得要CRUD,然后我们来逐个分析他们的异同以及它们的注意事项

这边采用更为高效简便的Mapper代理开发模式

Mapper代理开发

Mapper代理开发是体现***约定大于配置***思想的一个典型案例

首先我们可以先去idea上下载MyBatisX这款插件以便提高开发效率

首先我们在java.com.company包下面创建一个新包名mapper(一定要叫mapper,不然框架无法识别,约定大于配置!!!)

然后在这个包里创建一个接口XXXMapper接下我们都以UserMapper为例

创建完接口后我们在resources目录下创建一个和接口一模一样的(包括目录和文件名)XML文件,在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.suo.mapper.UserMapper">
    
</mapper>

我们需要做的就是修改mapper标签中namespace属性值为接口的路径,然后我们就可以进行快乐的SQL了

select

首当其冲就是select

我们首先在接口中写方法比如说

User selectByName(String name);

然后插件会自动帮我们在配置文件中生成select标签和sql语句我们只需要对sql语句进行修改即可

<select id="selectByName" resultType="com.suo.pojo.User">
        select * from t_user where name = #{name};
</select>

其中#{}相当于JDBC中的占位符?

${}相当于JDBC中对SQL进行字符串的拼接这样会导致sql注入问题,所以无脑用#{}就好了

对与传入参数和SQL语句中参数的对应关系如果只一个参数传入那么传入参数就是占位符中的数

如果有多个那么就需要用到注解了

User select(@Param("name") String name, @Param("password") String password);
<select id="select" resultType="com.suo.pojo.User">
        select * from t_user where name = #{name} and password = #{password};
</select>

MyBatis会自动通过注解帮我创建一个Map键值对集合注解里面的是键,然后会把注解后面的参数传给对应sql语句里名同名的值

然后我们还可以通过传入对象的方式传参,MyBatis底层会自动把把属性和属性值经行封装,其余的和上面一样

第三种方式是传入一个Map集合这个就不多说和上面一样的

insert

操作和select其实是一样的在UserMapper接口中声明方法,剩下的插件会帮我们完成的

这个得重点讲一讲

因为mySql默认是关闭事务的所以我们得手动提交事务否则数据会添加失败

重要的事情说三遍

手动提交事务!!!

手动提交事务!!!

手动提交事务!!!

sqlSession.commit();

delete

update

这两没啥好讲的和上面select一模一样

  1. 6. 关闭资源

最后就是要关闭资源了

sqlSession.close();

动态SQL

说MyBatis比JDBC强的一个很重要的因素就是动态SQL

如果业务现在想要查找一个用户通过它的id和账户

select * from t_user where id = #{id} and root = #{root}

很简单对吧,那么假如我现在要求不修改源码的情况下只通过账户或者id的方式查找一个用户的信息你该怎么办呢

MyBatis提供了一个标签

我们可以这么写

select * from tb_brand where
          <if test="id != null">
               id = #{id}
          </if>
          <if test="root != null and root != ''">
              and root = #{root};
          </if>

有了这个if做个条件判断问题是不是就解决了呀,但是问题又来了如果第一个if为false或者说两个if都为false那么会发生什么呢

select * from tb_brand where
              and root = #{root};
select * from tb_brand where

这两句sql是不是显然就是错的呀所以MyBatis又提供了标签

select * from tb_brand where
    <where>
          <if test="id != null">
               id = #{id}
          </if>
          <if test="root != null and root != ''">
              and root = #{root};
          </if>
    </where> 

where标签会自动帮我们判断并修正语法错误的

同理的Mybaties还为我们提供了标签用于修正update语句可能出现的语法错误

相当于switch case 语句

<foreach collection="array" item="id" separator="," open="("close=")">#{id} 用于批量删除

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值