Mybatis学习笔记-01

1.Mybatis简述:

Mybatis是一款持久层对象关系映射(ORM : Object Relational Mapping) 框架。持久化可以这么理解,由于内存是易失性存储器,但是我们对数据的操作实际上都是对内存中的数据副本进行,用户通过写的系统调用,让操作系统负责将修改的数据进行写回操作,也就是写回在外存上。而对于Mabatis,就是将数据写回外存上相应的数据库中。框架指的是一种半成品软件,可以通过框架减少开发量。

2.Mybatis VS JDBC

实际上Java带有访问数据库的JDBC库,但是JDBC完成ORM操作存在很多问题。

1. 多处使用JDBC完成ORM操作会存在大量冗余代码

2.需要手动创建Connection、Statement类等。

3.对于查询的结果需要手动封装成对象。

4.访问效率低,没有Cache缓存策略。

以下是使用JDBC+MySql8的连接过程。

import java.sql.*;

public class MySqlConnection {
    public static void main(String[] args)  {
        Connection connect = null;
        Statement statement = null;
        ResultSet resultSet = null;
        try {
            //加载驱动类
            Class.forName("com.mysql.cj.jdbc.Driver");
            //创建数据库连接
            connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsut?serverTimezone=GMT%2B8", "root", "zjm@?42393");
            //创建Statement
            statement = connect.createStatement();
            //执行SQL查询 返回结果集
            resultSet = statement.executeQuery("select * from student");
            //输入查询的结果
            while (resultSet.next()){
                System.out.println(resultSet.getString("id"));
            }
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //先关闭结果集
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try{
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                connect.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

3.Mybatis使用初步

对于Mybatis来说,只要我们给出构建类的规则,他就可以自动帮我们完成封装,而不需要自己手写大量冗余代码。

1.新建Maven空项目

2.在Maven工程的pom.xml文件中配置Mybatis(由于Mybatis是对JDBC的高级封装,因此还是需要JDBC驱动的)

<?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>Mybaitas-01</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
    <!--MySql驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.14</version>
    </dependency>
    <!--Mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.0</version>
    </dependency>
</dependencies>

</project>

3.Mybatis的配置方式

A.xml配置  在Maven项目的resources中建立配置文件

为方便演示,这边提前建好了一张表:

create database study_mybatis default charset = utf8;
use study_mybatis;
create table t_user(
    id int primary key auto_increment,
    username varchar(50),
    password varchar(50),
    gender tinyint,
    register_time datetime
)default charset = utf8;

在XML文件中对Mybatis进行环境配置:

<?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="study_mybatis">
        <!--我们使用的开发环境配置  主要针对数据库-->
        <environment id="study_mybatis">
            <!--事务控制类型-->
            <transactionManager type="jdbc"></transactionManager>
            <!--数据库连接参数-->
            <!--使用连接池-->
            <dataSource type="org.apache.ibatis.datasource.pooled.PooledDataSourceFactory">
                <!--数据库连接信息-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <!--将&转译成&amp;-->
                <property name="url" value="jdbc:mysql://localhost:3306/study_mybatis?serverTimezone=GMT%2B8"/>
                <property name="username" value="root"/>
                <property name="password" value="zjm@?42393"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

B. 还有注解配置 后续补充

4.建立表中记录对应的类对象

package com.zt.Bean;

import java.util.Date;

public class User {
    private Integer id;
    private String username;
    private String password;
    private Boolean gender;
    private Date registerTime;

    public User() {
    }

    public User(Integer id, String username, String password, Boolean gender, Date registerTime) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.gender = gender;
        this.registerTime = registerTime;
    }

    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 String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Boolean getGender() {
        return gender;
    }

    public void setGender(Boolean gender) {
        this.gender = gender;
    }

    public Date getRegisterTime() {
        return registerTime;
    }

    public void setRegisterTime(Date registerTime) {
        this.registerTime = registerTime;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", gender=" + gender +
                ", registerTime=" + registerTime +
                '}';
    }
}

5.建立类对象对应的DAO接口

package com.zt.Dao;

import com.zt.Bean.User;

public interface UserDao {
    User queryUserById(Integer id);
}

6.通过配置文件告诉Mybatis与方法相关联的sql语句以及值的映射关系,剩下的由Mybatis负责完成

我们不再需要手动地写一堆JDBC方法和手动封装对象啦!

A . 建立DAO关联的Mapper文件

<?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">
<!--说明该配置文件相关联的DAO接口-->
<mapper namespace="com.zt.Dao.UserDAO">
    <!--描述方法-->
    <select id="queryUserById" resultType="com.zt.Bean.User">
        select id,username,password,gender,register_time
        from t_user
        where id = #{arg0}
    </select>
</mapper>

<select> : 这是一个查询方法

id :该标签指向的接口的方法名

resultType :希望Mybatis将数据返回的格式(上述例子是希望Mybatis将属性各自封装成类,当类对象的属性名与表中字段名一致时,Mybatis就可以自行对应映射,我们注意到我们在类对象中定义的registerTime与表中的register_Time并不匹配,所以registerTime不会被赋值

#{arg0}:取出方法的第一个值放在此处 

B . 在主配置文件中注册Mapper(注册不止一种方式 后续也会补充)。

由于Mybatis运行时只会读取我们指定的主配置文件,为了让其能识别到Mapper,必须在主配置文件中注册其他配置文件

<?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="study_mybatis">
        <!--我们使用的开发环境配置  主要针对数据库-->
        <environment id="study_mybatis">
            <!--事务控制类型-->
            <transactionManager type="jdbc"></transactionManager>
            <!--数据库连接参数-->
            <!--使用连接池-->
            <dataSource type="org.apache.ibatis.datasource.pooled.PooledDataSourceFactory">
                <!--数据库连接信息-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <!--将&转译成&amp;-->
                <property name="url" value="jdbc:mysql://localhost:3306/study_mybatis?serverTimezone=GMT%2B8"/>
                <property name="username" value="root"/>
                <property name="password" value="zjm@?42393"/>
            </dataSource>
        </environment>
    </environments>

    <!--注册Mapper-->
    <mappers>
        <mapper resource="UserDAOMapper.xml"/>
    </mappers>
</configuration>

7.测试

package com.zt.test;

import com.zt.Bean.User;
import com.zt.Dao.UserDAO;
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;

public class TestMybatis {

    public static void main(String[] args) throws IOException {
        //1.加载配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        //2.构建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //3.通过SqlSessionFactory构建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4.通过Sqlsession获得DAO的实现类
        UserDAO mapper = sqlSession.getMapper(UserDAO.class);
        //5.测试方法
        User user = mapper.queryUserById(1);
        System.out.println(user);
    }
}

1. 将Mybatis的配置文件读成流

2. 将流交给SqlSessionFactoryBuilder解析并生成对应的SqlSessionFactory

3. 用SqlSessionFactory生成SqlSession

4.用SqlSession用来生成DAO类

通过给查询结果的列起别名的方式建立映射

<?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">
<!--说明该配置文件相关联的DAO接口-->
<mapper namespace="com.zt.Dao.UserDAO">
    <!--描述方法-->
    <select id="queryUserById" resultType="com.zt.Bean.User">
        select id,username,password,gender,register_time as registerTime
        from t_user
        where id = #{arg0}
    </select>
</mapper>

当然了如果表的字段名与类对象的属性名是完全一致的,那么可以直接用select *(在实际的开发过程中,我们并不提倡使用select *,尽管我们就是要查所有的属性,select *会先查询数据字典将*转换为所有的列名,这会消耗性能)

<?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">
<!--说明该配置文件相关联的DAO接口-->
<mapper namespace="com.zt.Dao.UserDAO">
    <!--描述方法-->
    <select id="queryUserById" resultType="com.zt.Bean.User">
        select *
        from t_user
        where id = #{arg0}
    </select>
</mapper>

ORM映射方法:O是我们在resultType指定的类型,R是查询的表,M是Mybatis根据同名原则自行做的映射(当然也可以用as别名的方式建立映射)。

【注】由于Mybatis各个部分关联比较大,因此初学会有看不懂的情形,这里牵扯到很多知识,没有关系。代码已经上传到资源中,有需要请自行下载,无需C币。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园信息化系统解决方案旨在通过先进的信息技术,实现教育的全方位创新和优质资源的普及共享。该方案依据国家和地方政策背景,如教育部《教育信息化“十三五”规划》和《教育信息化十年发展规划》,以信息技术的革命性影响为指导,推进教育信息化建设,实现教育思想和方法的创新。 技术发展为智慧校园建设提供了强有力的支撑。方案涵盖了互连互通、优质资源共享、宽带网络、移动APP、电子书包、电子教学白板、3D打印、VR虚拟教学等技术应用,以及大数据和云计算技术,提升了教学数据记录和分析水平。此外,教育资源公共服务平台、教育管理公共服务平台等平台建设,进一步提高了教学、管控的效率。 智慧校园系统由智慧教学、智慧管控和智慧办公三大部分组成,各自具有丰富的应用场景。智慧教学包括微课、公开课、精品课等教学资源的整合和共享,支持在线编辑、录播资源、教学分析等功能。智慧管控则通过平安校园、可视对讲、紧急求助、视频监控等手段,保障校园安全。智慧办公则利用远程视讯、无纸化会议、数字会议等技术,提高行政效率和会议质量。 教育录播系统作为智慧校园的重要组成部分,提供了一套满足学校和教育局需求的解决方案。它包括标准课室、微格课室、精品课室等,通过自动五机位方案、高保真音频采集、一键式录课等功能,实现了优质教学资源的录制和共享。此外,录播系统还包括互动教学、录播班班通、教育中控、校园广播等应用,促进了教育资源的均衡化发展。 智慧办公的另一重点是无纸化会议和数字会议系统的建设,它们通过高效的文件管理、会议文件保密处理、本地会议的音频传输和摄像跟踪等功能,实现了会议的高效化和集中管控。这些系统不仅提高了会议的效率和质量,还通过一键管控、无线管控等设计,简化了操作流程,使得会议更加便捷和环保。 总之,智慧校园信息化系统解决方案通过整合先进的信息技术和教学资源,不仅提升了教育质量和管理效率,还为实现教育均衡化和资源共享提供了有力支持,推动了教育现代化的进程。
智慧校园信息化系统解决方案旨在通过先进的信息技术,实现教育的全方位创新和优质资源的普及共享。该方案依据国家和地方政策背景,如教育部《教育信息化“十三五”规划》和《教育信息化十年发展规划》,以信息技术的革命性影响为指导,推进教育信息化建设,实现教育思想和方法的创新。 技术发展为智慧校园建设提供了强有力的支撑。方案涵盖了互连互通、优质资源共享、宽带网络、移动APP、电子书包、电子教学白板、3D打印、VR虚拟教学等技术应用,以及大数据和云计算技术,提升了教学数据记录和分析水平。此外,教育资源公共服务平台、教育管理公共服务平台等平台建设,进一步提高了教学、管控的效率。 智慧校园系统由智慧教学、智慧管控和智慧办公三大部分组成,各自具有丰富的应用场景。智慧教学包括微课、公开课、精品课等教学资源的整合和共享,支持在线编辑、录播资源、教学分析等功能。智慧管控则通过平安校园、可视对讲、紧急求助、视频监控等手段,保障校园安全。智慧办公则利用远程视讯、无纸化会议、数字会议等技术,提高行政效率和会议质量。 教育录播系统作为智慧校园的重要组成部分,提供了一套满足学校和教育局需求的解决方案。它包括标准课室、微格课室、精品课室等,通过自动五机位方案、高保真音频采集、一键式录课等功能,实现了优质教学资源的录制和共享。此外,录播系统还包括互动教学、录播班班通、教育中控、校园广播等应用,促进了教育资源的均衡化发展。 智慧办公的另一重点是无纸化会议和数字会议系统的建设,它们通过高效的文件管理、会议文件保密处理、本地会议的音频传输和摄像跟踪等功能,实现了会议的高效化和集中管控。这些系统不仅提高了会议的效率和质量,还通过一键管控、无线管控等设计,简化了操作流程,使得会议更加便捷和环保。 总之,智慧校园信息化系统解决方案通过整合先进的信息技术和教学资源,不仅提升了教育质量和管理效率,还为实现教育均衡化和资源共享提供了有力支持,推动了教育现代化的进程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值