框架概述和MyBatis环境搭建

学习视频:1001 框架概述_哔哩哔哩_bilibili

目录

框架概述 

1.1为什么要学

 1.2框架的优点

1.3 当前主流框架

        Spring框架

        Spring MVC框架

        MyBatis框架

​编辑

        Spring Boot框架

        Spring   Cloud框架

1.4 传统JDBC的劣势

MyBatis 

2.1 MyBatis概述

        ORM框架工作原理

        解决JDBC编程劣势

2.2 MyBatis环境搭建

pom.xml 

db.properties

mybatis-config.xml

 2.3 MyBatis入门程序

创建User实体类

UserMapper.xml 实现sql语句和java对象之间的映射

测试类

2.4 MyBatis的工作原理

8个步骤


框架概述 

1.1为什么要学


 1.2框架的优点


1.3 当前主流框架

        Spring框架

        Spring MVC框架

        MyBatis框架

        Spring Boot框架

        Spring   Cloud框架


1.4 传统JDBC的劣势


MyBatis 

2.1 MyBatis概述

        ORM框架工作原理

        解决JDBC编程劣势


2.2 MyBatis环境搭建

<!-- 只展示了其中一个依赖-- >
<dependencies>
     <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.11</version>
    </dependency>
...
</dependencies>

create database mybatis;

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&
characterEncoding=utf8&useUnicode=true&useSSL=false
mysql.username=root
mysql.password=root

<configuration><properties resource="db.properties"/>
<environments default="development">
<environment id="development">
        <transactionManager type="JDBC"/>
         <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}" />
                <property name="url" value="${mysql.url}" />
                <property name="username" value="${mysql.username}" />
                <property name="password" value="${mysql.password}" />
         </dataSource>
    </environment></environments>
</configuration>

pom.xml 

<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
    <artifactId>mybatistest</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
            <scope>runtime</scope>
        </dependency>

    </dependencies>

</project

db.properties

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
mysql.username=root
mysql.password=root

mybatis-config.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>
    <!--引入外部db.properties-->
    <properties resource="db.properties"></properties>

    <!--配置连接使用的相关参数
          default为默认使用的环境:development 测试环境
                                product     生产环境
      -->
    <environments default="development">
        <!--测试环境-->
        <environment id="development">
            <!--事务管理类型:指定事务管理的方式 JDBC-->
            <transactionManager type="JDBC"/>
            <!--数据库连接相关配置,动态获取config.properties文件里的内容-->
            <!--数据源类型:POOLED 表示支持JDBC数据源连接池
                            UNPOOLED 表示不支持数据源连接池
                            JNDI 表示支持外部数据源连接池
              -->
            <dataSource type="POOLED">
                <!--此处使用的是MySQL数据库,使用Oracle数据库时需要修改,仔细检查各项参数是否正确,里面配置了时区、编码方式、SSL,用以防止中文查询乱码,导致查询结果为null及SSL警告等问题-->
                <property name="driver" value="${mysql.driver}"/>
                <property name="url"
                          value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!--配置xxxMapper.xml文件的位置-->
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>

</configuration>


 2.3 MyBatis入门程序

use mybatis;
create table users(
    uid int primary key auto_increment,
    uname varchar(20) not null,
    uage int not null
);
insert into users(uid,uname,uage) values(null,'张三',20),(null,'李四',18);

package com.itheima.pojo;
public class User {
    private int uid;                  // 用户id
    private String uname;      // 用户姓名
    private int uage;              // 用户年龄
    // 省略getter/setter方法
   …
}

<mapper namespace="com.itheima.pojo.User">
    <!--id ="接口中的方法名"parameterType="传入的参数类型"
  resultType = "返回实体类对象,使用包.类名"-->
<select id="findById" parameterType="int" 
  	resultType="com.itheima.pojo.User"> 
 	select * from users where uid = #{id}
</select>
</mapper>

<!– mapping文件路径配置-->
<mappers>
    <mapper resource="mapper/UserMapper.xml"/>
</mappers>

        如果一个项目有多个映射文件,则mybatis-config.xml核心配置文件中需要在<mappers>元素下配置多个<mapper>元素指定映射文件的路径。

public class UserTest { 
     public void userFindByIdTest() {
          String resources = "mybatis-config.xml"; Reader reader=null;
          try { reader= Resources.getResourceAsReader(resources);
          } catch (IOException e) { e.printStackTrace();}
     SqlSessionFactory sqlMapper=new 	SqlSessionFactoryBuilder().build(reader);
     SqlSession session=sqlMapper.openSession();
     User user=session.selectOne("findById",1);
     System.out.println(user.getUname());
     session.close();}} 

创建User实体类

package com.it.pojo;

public class User {
    private int uid;
    private String uname;
    private int uage;

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public int getUage() {
        return uage;
    }

    public void setUage(int uage) {
        this.uage = uage;
    }

    @Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", uname='" + uname + '\'' +
                ", uage=" + uage +
                '}';
    }




}

UserMapper.xml 实现sql语句和java对象之间的映射

<?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为映射的根节点,用来管理DAO接口
      namespace指定DAO接口的完整类名,表示mapper配置文件管理哪个DAO接口(包.接口名)
      mybatis会依据这个接口动态创建一个实现类去实现这个接口,而这个实现类是一个Mapper对象
   -->
<mapper namespace="com.it.pojo.User">
    <!--
          id = "接口中的方法名"
          parameterType = "接口中传入方法的参数类型"
          resultType = "返回实体类对象:包.类名"  处理结果集 自动封装
          注意:sql语句后不要出现";"号
              查询:select标签
              增加:insert标签
              修改:update标签
              删除:delete标签
      -->
    <select id="findById"
        parameterType="int"
        resultType="com.it.pojo.User">
    select * from users where uid=#{id}

    </select>

    
</mapper>

测试类

package com.it.test;

import com.it.pojo.User;
import jdk.management.resource.ResourceRequest;
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.junit.Test;


import java.io.InputStream;

public class UserTest01 {
        @Test
    public void findById() throws Exception
        {
            //1.获取核心配置文件
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            //2.创建sqlSessionFactory工厂对象
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(is);


            //3.创建sqlSession对象
            SqlSession  sqlSession=sqlSessionFactory.openSession();

            //4.执行sql语句 sql语句唯一标识:namespace.statementId
            User user=sqlSession.selectOne("com.it.pojo.User.findById",1);
            System.out.println(user);
            //5.释放资源
            sqlSession.close();

        }

}


2.4 MyBatis的工作原理

8个步骤

(1)MyBatis读取核心配置文件mybatis-config.xml:mybatis-config.xml核心配置文件主要配置了MyBatis的运行环境等信息。      

(2)加载映射文件Mapper.xml:Mapper.xml文件即SQL映射文件,该文件配置了操作数据库的SQL语句,需要在mybatis-config.xml中加载才能执行。        

(3)构造会话工厂:通过MyBatis的环境等配置信息构建会话工厂SqlSessionFactory,用于创建SqlSession。

(4)创建会话对象:由会话工厂SqlSessionFactory创建SqlSession对象,该对象中包含了执行SQL语句的所有方法。        

(5)创建执行器:会话对象本身不能直接操作数据库,MyBatis底层定义了一个Executor接口用于操作数据库,执行器会根据SqlSession传递的参数动态的生成需要执行的SQL语句,同时负责查询缓存地维护。      

(6)封装SQL信息:SqlSession内部通过执行器Executor操作数据库,执行器将待处理的SQL信息封装到MappedStatement对象中。

(7)操作数据库:根据动态生成的SQL操作数据库。        

(8)输出结果映射:执行SQL语句之后,通过MappedStatement对象将输出结果映射至Java对象中。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吴有想法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值