第一周 框架初学之MyBatis

本文介绍了MyBatis框架的基础概念,从使用框架的优势到三层架构的划分,详细讲解了如何进行环境搭建,包括依赖配置和目录结构。重点讲解了JDBC与MyBatis的区别,以及MyBatis的ORM映射原理和操作步骤,最后给出了一个实战项目的配置和测试案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

框架

什么是框架

框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。
简而言之,框架其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。简单说就是使用别人搭好的舞台,你来做表演。而且,框架一般是成熟的,不断升级的软件。

使用框架的好处

框架封装了很多的细节,使开发者可以使用极简的方式实现功能,大大提高开发效率。

三层架构

表现层:用于展示数据
业务层:处理业务需求
持久层:是和数据库交互的

(MyBatis:持久层框架,实现增删改查)

持久层技术解决方案

JDBC技术

Connection
PreparedStatement
ResultSet

Spring的Jdbc Template

Spring中对jdbc的简单封装

Apache的DBUtils

他和Spring的JdbcTemplate很像,也是对Jdbc的简单封装

但以上这些都不是框架
JDBC是规范
Spring的JdbcTemplate和Apache的DBUtils都只是工具类

MyBatis框架概述

是一个持久层框架,使用java语言
封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动
它使用了ORM思想实现了结果集的封装

ORM

Object Telational Mappging 对象关系映射
简单的说

就是把数据库表和实体类的属性对应起来
让我们可以操作实体类就实现操作数据库表

需要做到

实体类中的属性和数据库表中的字段名称保持一致

mybatis的入门

mybatis的环境搭建

首先在idea中创建maven工程。
在这里插入图片描述
在这里插入图片描述
然后在pom.xml中添加上下列代码

<packaging>jar</packaging>
<dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.18</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

    </dependencies>

(如果写完之后标红,记得刷新一下Maven就可)

然后在main下的java中创建User类

import java.io.Serializable;
import java.sql.Date;

public class User implements Serializable {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

创建dao层IUserdao接口

import com.hncj.domain.User;

import java.util.List;

public interface IUserdao {

    /*
    * 查询所有操作
    * @return
    * */
    List<User>findAll();
}

接下来在resources文件中创建一个SQLMapConfig.xml文件,为数据库连接配置环境并指定映射配置文件的位置。

<?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">
<!-- mybatis的主配置文件 -->
<configuration>
    <!-- 配置环境 -->
    <environments default="mysql">
        <!-- 配置mysql的环境-->
        <environment id="mysql">
            <!-- 配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源(连接池) -->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的4个基本信息 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
    <mappers>
        <mapper resource="com/hncj/dao/IUserdao.xml"/>
    </mappers>
</configuration>

然后在resources中,根据SQLMapConfig.xml文件中mapper中的参数创建Directory文件夹,最后创建一个file文件(一定跟mapper中参数的名字需要一摸一样)

例如,SQLMapConfig.xml文件mapper属性中写着
<mapper resource="com/itheima/dao/IUserdao.xml"/>
则需要右键点击resources选择new然后选择Directory,创建com
然后右键点击com选择new,然后选择Directory,创建itheima
依次循环,直到最后一个,选择new后,选择file,创建IUserDao.xml文件

创建IUserdao.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.hncj.dao.IUserDao">
    <!--配置查询所有-->
    <select id="findAll" resultType="com.hncj.domain.User">
        select * from user
    </select>
</mapper>

在resources中直接拷入log4j.properties文件

https://pan.baidu.com/s/1pLIAdBMLjpFk4X2rcCvXxQ 提取码:dvj8

注意事项

1.创建IUserDao.xml和IUserDao.java时名称是为了保持一致
在Mybatis中它把持久层的操作接口名称和映射文件也叫做Mapper
所以:IUserDao和IUserMapper是一样的
2.在idea中创建目录是,他和包是不一样的
包在创建时:com.itheima.dao是三级结构
目录创建时:com.itheima.dao是一级目录
3.mybatis的映射配置文件位置必须和dao接口的包结构相同
4.映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
5.映射配置文件的操作配置,id属性的取值必须是dao接口的方法名

测试

在text文件夹下,创建com.hncj.test.MybatisTest实现类

package com.hncj.test;

import com.hncj.domain.User;
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.InputStream;
import java.util.List;


public class MybatisTest {
    public static void main(String[] args)throws Exception {
        //1.读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
        //4.使用SqlSession创建Dao接口的代理对象
        IUserDao userDao = session.getMapper(IUserDao.class);
        //5.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for(User user : users){
            System.out.println(user);
        }
        //6.释放资源
        session.close();
        in.close();
    }
}

项目结构

在这里插入图片描述

另附数据库代码

CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` datetime default NULL COMMENT '生日',
  `sex` char(1) default NULL COMMENT '性别',
  `address` varchar(256) default NULL COMMENT '地址',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值