SSM框架-MyBatis 简单流程开发

MyBatis学习

1. MVC设计模式

什么是MVC?
三个词: Model View Controller 模型、视图、控制

按照之前的学习,用户访问下来的流程:
在这里插入图片描述
之前的用户直接访问控制层,控制层可以直接操作数据库,这样导致了代码很臃肿,不利于维护
servlet代码中:要处理请求、相应、视图跳转、 处理JDBC、处理业务代码、处理逻辑代码
实在要处理的事情太多了,后面就开始出现了层面分离
,从而出现了MVC设计模式
流程就演化为:
在这里插入图片描述
在这里插入图片描述

2. 三层架构

上面所提到的MVC是一种软件设计模式,而三层架构是一种软件架构
三层架构与MVC的目标一致:都是为了解耦和、提高代码复用

三层架构分为:界面层(UI)(web层)、业务逻辑层(BLL)(service层)、数据访问层(也叫持久层)(DAL)(dao层) ,再加上实体类库(Model)
界面层:用来接收客户端的输入,调用业务逻辑层进行功能处理,返回结果给客户端.过去的servlet就是界面层的功能.
业务逻辑层:用来进行整个项目的业务逻辑处理,向上为界面层提供处理结果,向下问数据访问层要数据.
数据访问层:专门用来进行数据库的增删改查操作,向上为业务逻辑层提供数据.

各层之间的调用顺序是固定的,不允许跨层访问.
界面层<------->业务逻辑层<------>数据访问层

3. SSM框架

在后面的学习进程中,是开始学习的SSM框架,算是一种开发一些小型项目所用到的框架,在学习微服务技术之前,都是要用到这些框架来做的。

框架:就是一种半成品的软件,将项目开发中所有的公共的、重复的功能解决掉,帮助程序来进行快速高效的开发,本身框架就是可复用、可扩展的。框架中定义好了一些功能,也可以在扩展一些功能

SSM框架:SpringMVC+Spring+MyBatis

SpringMVC:它是Spring家族的一员.专门用来优化控制器(Servlet)的.提供了极简单数据提交,数据携带,页面跳转等功能.
Spring:它是整合其它框架的框架.它的核心是IOC和AOP.它由20多个模块构成.在很多领域都提供了很好的解决方案.是一个大佬级别的存在.
MyBatis:是持久化层的一个框架.用来进行数据库访问的优化.专注于sql语句.极大的简化了JDBC的访问.

今天所整理的文章就是重点讲述的MyBatis

4. JDBC复习与回顾

在之前的学习过程中,链接数据库所用的就是JAVAEE规范下的JDBC规范,通过jdbc来连接数据库,然后进行数据的查询和更新
流程步骤:
1.将MySql服务器厂商提供Driver接口实现类注册到JVM

2.通过JDBC规范中DriverManager在Java工程与MySql服务器之间建立一个【连接通道】connection

3.通过MySql服务器厂商提供Connection接口实现类建立一个交通工具【PreparedStatement】

4.通过交通工具【PreparedStatement】将SQL命令从Java工程推送到MySql服务器上执行并带回执行结果

5.销毁本次交易过程涉及所有资源对象
案例:

public class 推送查询命令 {
    public static void main(String[] args) throws Exception {
        String sql="select * from dept";
        String url="jdbc:mysql://localhost:3306/bjpowernode";
        //1.将mysql服务器提供的jar包下的Driver接口实现类注册到JVM中
        Class.forName("com.mysql.jdbc.Driver");
        //2.建立连接通道
        Connection con=DriverManager.getConnection(url,"root","123456");
        //3.建立一个传输工具
        PreparedStatement ps=con.prepareStatement("");
        //4.对于查询语句进行操作,使用的不是更新手法了
        ResultSet rs= ps.executeQuery(sql);
        //5.展示临时表中所有数据行进行读取
        while (rs.next()){
            int deptNo=rs.getInt("deptNo");
            String dname=rs.getString("dname");
            String loc=rs.getString("loc");
            System.out.println("部门编号"+deptNo+" 部门名称"+dname+" 地址"+loc);

        }
        //6.销毁资源,从后往前进行销毁首先是resultSet、接着是PreparedStatement、最后是connection
        if (rs!=null){
            rs.close();
        }
        if (ps!=null){
            ps.close();
        }
        if (con!=null){
            con.close();
        }
    }
}

使用JDBC开发有着一些缺陷

  • 代码比较多,开发效率低
  • 需要关注Connection,Statement,ResultSet 对象创建和销毁
  • 对于ResultSet 查询的结果,需要自己封装为List
  • 重复的代码比较多,业务代码和数据库的操作混在一起

5. MyBatis简介

MyBatis 是一个优秀的基于 java 的持久层框架,内部封装了 jdbc,开发者只需要关注 sql 语句本身,而不需要处理加载驱动dirver、创建连接connection、创建 statement、关闭连接,资源close等繁杂的过程。

MyBatis 通过 xml 配置文件注解两种方式将要执行的各种 sql 语句配置起来,并通过 java 对象和 sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。

6. MyBatis开发流程

使用MyBatis进行开发的流程:
思路上:搭建环境–>导入mybatis---->编写代码–>测试

1、搭建一个环境,创建一个新的表,可以使用第三方数据库管理工具Navicat for MySQL 创建一个新的表,加好相应表的字段(sql学习效果很好的就可以用sql语言进行表的创建),并加入一些数据放入表中

2、创建一个maven项目,采用骨架来创建(quickStart),然后将包比如java、resource等文件夹补全然后在pom.xml中导入相关依赖(mybatis依赖、mysql依赖),可以从官网上找依赖

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!--mybatis依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.1</version>
    </dependency>
    <!--mysql依赖-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.9</version>
    </dependency>

  </dependencies>

依赖的版本是可以变化的,在导入的时候要注意版本变化,有些时候需要用到不同的版本,本地没有该文件的时候,maven会自动下载

3、根据官网的流程上,在resources文件夹下创建一个xml文件,默认采用官方推荐的文件名mybatis-config.xml(后面为了方便开发,可以在idea模板的模块建立一个mybatis主配置文件的模块)

<configuration>

    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <environments default="development">
        <environment id="development">
            <!--采用的是JDBC的管理器方式-->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/bjpowernode?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/bjpowernode/dao/StudentDao.xml"/>
        <!--作用是引入一个XML文件,用这个方式创建映射器-->
    </mappers>
</configuration>

在这个主配置文件中有相关的数据源和数据库管理方式的规范JDBC,数据库中还需要配置时区,以及中文存入的问题处理useSSL=true&useUnicode=true&characterEncoding=UTF-8

4、根据官网给出的流程,这里就开始用到的从SqlSessionFactory获取SqlSession
SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句
这一步是在官网上写死的步骤,进而获取到SqlSessionFactory
(这些内容是固定的,可以用工具类把这一块给封装起来)

        String config="mybatis-config.xml";
        InputStream in= Resources.getResourceAsStream(config);
        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
        SqlSessionFactory factory=builder.build(in);
        SqlSession sqlSession=factory.openSession();

可以通过 SqlSession 实例来直接执行已映射的 SQL 语句

5、之前的准备工作弄好之后,在实际的开发的时候,是首先将承载表中数据的实体类(pojo)给创建出来,比如说这次要处理的表是student表,就创建一个和表名相同的student类,作为最后查询出来或者是插入、更新数据库的实现类,这个类的属性也应当是和表里面的字段名相一致

public class Student {
    //定义属性,建议和表中的列名保持一致‘
    private Integer id;
    private String name;
    private String email;
    private Integer age;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                '}';
    }
}

6、在com.bjpowernode文件夹下创建一个dao文件夹,下面存放一个dao接口(其实dao等价于后面要写的mapper映射文件),在dao接口中定义好处理相关数据的方法

public interface StudentDao {
    //接口内定义方法,操作student表
    public List<Student> selectStudet();
    //插入方法,返回执行操作后的影响数据库的行数
    public int insertStudent(Student student);
}

后面会慢慢将dao接口给变换成mapper接口,需要在这个dao文件夹下创建于一个mapper映射文件
可以一开始命名的时候就可以将mapper给命名出来

7、在dao文件夹下写mapper映射文件,写映射文件就是为了让SqlSession来调用,mapper文件中是放置的sql语句的地方,从官网上可以找到这一部分,按照官网文档上来建立mapper.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.bjpowernode.dao.StudentDao">

    <select id="selectStudents" resultType="com.bjpowernode.domain.Student">
        select id,name,age from student order by id
    </select>

    <insert id="insertStudent">
        insert into student values(#{id},#{name},#{email},#{age})
    </insert>
    <!--除了XML方式定义映射器外,还可以采用注解方式定义映射器,只需要一个接口便可以通过注解SQl-->
    <!--用注解和XML方式同时进行定义的时候,XML会覆盖掉注解方式,推荐使用XML文件-->
</mapper>

namespace是命名空间,将mapper文件与dao接口给绑定起来,在下面写一些对应dao(mapper)接口中功能对应的sql语句,例如接口中selectStudents()这个方法,在mapper文件下面建立一个select标签,resultType是sql最后返回的结果类型,这个写的便是之前写的pojo实体类,下面就是写sql语句select id,name,age from student order by id
(当前只是简单的应用,后面还会学到向sql中传参以及动态sql,还有很多地方要学)

8.写完mapper文件之后,要将这个mapper文件给注册了,不然mybatis会找不到处理的位置
将mapper文件的位置给注册到mybatis-config.xml文件中

    <mappers>
        <mapper resource="com/bjpowernode/dao/StudentDao.xml"/>
        <!--作用是引入一个XML文件,用这个方式创建映射器-->
    </mappers>

9、这样可以利用之前拿到的SqlSession来执行相应的sql语句就可以了

第一种方式就是直接将路径给到sqlsession,然后直接运行

        String sqlId="com.bjpowernode.dao.StudentDao"+"."+"selectStudents";
        List<Student> studentList=sqlSession.selectList(sqlId);
        for (Student stu : studentList){
            System.out.println("查询的学生="+stu);
        }
        sqlSession.close();

第二种方式就是获取mapper利用

      studentDao stdao=sqlsession.getMapper( studentDao.class);
      //拿到这个接口的实现类,直接调用方法就可以了
      List<Student> studentList=stdao.selectList();

10.测试
写完这些代码之后,就是将结果给展示出来,获得一个结果集,然后来获得对应的数据
上述只是使用了查询这一个案例,怎删改查只是会在方法和mapper文件中的标签名会发生一些简单的变化,完全按照流程来做就可以了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值