Mybatis框架详细讲解----手把手教你如何搭建及使用Mybatis框架(内置代码与示范视频)

Mybatis概述

原是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation 迁移到了 Google Code,随着开发团队转投Google Code 旗下,iBatis3.x正式更名为MyBatis。是 一个基于Java的持久层框架。

MyBatis提供的持久层框架包括SQL Maps和Data Access Objects (DAO)。

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。

MyBatis 避免了几乎所有的 JDBC 代码手动设置参数以及获取结果集。

MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录,是一种 ORM(ORM Object Relational Mapping 对象关系映射)实现. Mybatis 将基本的 JDBC 常用接口封装,对外提供操作即可

更多知识大家可以去关注Mybatis 中文官网 https://mybatis.org/mybatis-3/zh/getting-started.html
.
在这里插入图片描述

前后知识对比学习

传统 JDBC 编程

1、 加载数据库驱动 2、 创建并获取数据库链接 3、 创建 statement 对象 4、 拼写 sql 语句 5、 设置 sql 语句中的占位符的值 6、 执行 sql 语句并获取结果 7、 对 sql 执行结果进行解析处理 8、 释放资源

不了解JavaJDBC部分的朋友们可以通过我之前的博客来简要了解下

学习链接
https://blog.csdn.net/qq_51352148/article/details/118797329?spm=1001.2014.3001.5501.

JDBC 编程问题

1、 数据库连接的创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决该问题。

2、 SQL 语句编写在 Java 代码中,这种硬编码造成代码不易维护,当 SQL 变动时需要修改 java 源代码。

3、 使用 preparedStatement 向占位符传参数存在硬编码,因为 SQL 语句的where 条件中占位符的个数可能会变化,修改 SQL 还要修改 Java 源代码,系统不易维护。

4、 对结果集解析存在硬编码,SQL 语句变化导致解析代码变化,系统不易维护。

MyBatis 架构

MyBatis 是优秀的持久层框架,它能够解决 JDBC 编程中存在的问题。接下来先了解 MyBatis 的架构

MyBatis 环境搭建

导入 MyBatis jar 包数据库驱动包.导入pom.xml文件中

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

Mybatis 源码下载

https://github.com/mybatis/mybatis-3/releases.

创建 MyBatis 全局配置

MyBatis 的配置文件包含了对 MyBatis 行为的设置信息。 配置文档的顶层结构如下(标签需要按照特定顺序排放)
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)

示例:

<!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">
            <!--配置事务管理类型,使用JDBC事务管理-->
            <transactionManager type="JDBC"></transactionManager>
            <!--数据源-->
            <dataSource type="UNPOOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis_db?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai"/>
                <property name="username" value="root" />
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
<!--添加sql映射文件-->
    <mappers>
        <mapper resource="mapper/AdminMapper.xml"/><!--填写sql映射文件地址-->
    </mappers>
</configuration>

创建 sql 映射文件

<?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.qn.mybatisPro.mapper.AdminMapper"><!--对应接口地址-->
    <insert id="saveAdmin" parameterType="com.qn.mybatisPro.model.Admin">
        /*id对应接口中的方法名,格式对应应用类所存在的地址*/
        <!--填写相应的sql语言,值会通过id对应的接口自动获得-->
        insert into admin(account,password,sex)values(#{account},#{password},#{sex})
    </insert>
</mapper>

#{} 占位符,是经过预编译的,编译好 SQL 语句再取值,#方式能够防止 sql 注入

${} 拼接符,会传入参数字符串,取值以后再去编译 SQL 语句, 但是此方式无法防止 Sql注入

注意:MyBatis 排序时使用 order by 动态参数时需要注意,用$而不是#

总结梳理

接下来进行梳理一下配置的顺序

mybatis搭建:

1.导入mybatis jar mysql驱动

2.配置mybatis核心配置文件(在mybatis-config.xml配置)

<!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">
            <!--配置事务管理类型,使用JDBC事务管理-->
            <transactionManager type="JDBC"></transactionManager>
            <!--数据源-->
            <dataSource type="UNPOOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis_db?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai"/>
                <property name="username" value="root" />
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
<!--添加sql映射文件-->
    <mappers>
        <mapper resource="mapper/AdminMapper.xml"/>
    </mappers>
</configuration>

3.在数据库中创建库和表, idea中配置对应的类(Admin)

4.创建映射接口(主要用于定义有哪些操作)

package com.qn.mybatisPro.mapper;
import com.qn.mybatisPro.model.Admin;
public interface AdminMapper {
  void saveAdmin(Admin admin);
}

5.创建sql映射配置文件( sql实现 )

<?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.qn.mybatisPro.mapper.AdminMapper"><!--对应接口地址-->
    <insert id="saveAdmin" parameterType="com.qn.mybatisPro.model.Admin">/*id对应接口中的方法名,格式对应应用类所存在的地址*/
        insert into admin(account,password,sex)values(#{account},#{password},#{sex})
    </insert>
</mapper>

6.测试

1.读取核心配置文件 2. 创建SqlSessionFactory 3.创建SqlSession 4. 获得接口代理对象 5.代理对象.接口中的方法

package com.qn.mybatisPro.test;

import com.qn.mybatisPro.mapper.AdminMapper;
import com.qn.mybatisPro.model.Admin;
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 org.apache.ibatis.session.defaults.DefaultSqlSessionFactory;

import java.io.IOException;
import java.io.Reader;

public class test1 {
    public static void main(String[] args) throws IOException {
        Admin admin=new Admin();
        admin.setAccount("admin");
        admin.setPassword("111");
        admin.setSex("男");

/*读取mybatis核心配置*/
        Reader reader= Resources.getResourceAsReader("mybatis-config.xml");
//创建sqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
//创建SQLSession对象表示一次与数据库连接会话 类似于JDBC中的Connection
        SqlSession sqlSession= sqlSessionFactory.openSession();
//获得映射接口的代理对象
        AdminMapper adminMapper=sqlSession.getMapper(AdminMapper.class);

        adminMapper.saveAdmin(admin);
        sqlSession.commit();//提交事务
        sqlSession.close();//关闭与数据库的交互
    }
}

在这里插入图片描述

概念图

在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值