MyBatis(专注sql)

前言

 

1.三层架构

mvc:在web开发中,使用mvc架构模式。m:数据,v:视图,c:控制器

c:接收请求,调用service对象,显示请求的处理结果。当前使用servlet作为控制器

v:   现在使用的是jsp,html,js。显示请求处理结果,把m中的数据显示出来

m:数据来自mysql,文件,来自网络。

mvc作用:(1)实现解耦合(2)让各模块各负其责(3)系统扩展性更好

三层架构:

1.界面层(视图层):接收用户请求,调用service,显示请求的处理结果。包含了jsp,html,servlet等对象。在control包下。

2.业务逻辑层:处理业务逻辑,使用算法处理数据,把数据返回给页面,对应的是service包,和包中很多XXXXservice类。

3.持久层;访问数据库,或者读取文件,或者访问网络获取数据。有很多XXXdao。

 2.三层架构请求的处理流程

用户发起请求--->界面层--->业务逻辑层-->访问持久层---->数据库

概述

高级的JDBC,解决JDBC的缺点。

(1)注册驱动

(2)创建connecion,statement,resultset

(3)执行sql语句,得到Resultset

(4)处理resultset,把记录集中数据转为java对象,同时还能把java对象放入List集合

(5)关闭资源

(6)实现sql语句于java代码解耦合(JDBC是用java代码放在一起,业务也是在jdbc中编写)

mybaits不需要关注于JDBC的六步编程,因为框架中以及帮你编写好了,你只需要关注于sql语句编写

Mybatis官网文档:mybatis – MyBatis 3 | 入门

Mybatis入门

(1)建立数据表

(2)创建maven项目

(3)修改pom.xml:加入依赖mybatis,mysql,junnit,加入资源插件:

<resources>
      <resource>
        <directory>src/main/java</directory><!--所在的目录-->
        <includes><!--包括目录下的.properties,.xml 文件都会扫描到
->
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <!-- filtering选项 false不启用过滤器, *.property已经起到过
滤的作用了 -->
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>

(4)创建实体类Student,定义属性,属性名和列名一致

package com.bjp.domain;

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 +
                '}';
    }
}

(5)创建Dao接口,定义操作数据库方法。

package com.bjp.dao;

import com.bjp.domain.Student;

public interface StudentDao {
    //查询一个学生
    Student selectstudentById(Integer id);
}

(6)创建xml文件(mapper文件),写sql语句,mybatis推荐java代码和sql语句相分离,把mapper文件定义和dao接口在同一目录。一个表一个mapper文件(接口名.xml),定义和这个表相关的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.bjp.dao.StudentDao"><!--mapper是根标签,namespace是命名空间不能为空,唯一值,推荐使用dao接口的全限定名称。
                                                    参与识别sql语句的作用
                                                    在mapper里面可以写insert,update,delete,select标签-->
    <select id="selectBlog" resultType="Blog">
        select * from Blog where id = #{id}
    </select>
    <select id="selectstudentById" resultType="com.bjp.domain.Student"><!--select标签表示查询操作,里面是select语句
                                   id:要执行sql语句的唯一标识,是一个自定义的字符串,推荐使用dao中方法名称
                                   resultttype:告诉mybatis,执行sql语句,把数据赋值给那个类型的Java对象,使用的是java对象的全限定名称
                                   把执行sql语句执行结果变成java对象-->
        select id,name,email from student where id = 1001
    </select>
</mapper>

(6)创建mybatis的主配置文件(xml)文件

(1)定义创建连接实例的数据源(datasource)对象

(2)指向其他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="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!--配置数据源,创建connection连接对象-->
            <dataSource type="POOLED">
                <!--注册驱动-->
                <property name="driver" value="${com.mysql.jdbc.Driver"/>
                <property name="url" value="${jdbc:mysql://localhost:3306/ssm}"/>
                <property name="username" value="${root}"/>
                <property name="password" value="${root}"/>
            </dataSource>
        </environment>
    </environments>
    <!--指定其他mapper文件的位置,目的是找到其他文件sql语句-->
    <mappers>
        <!--resource值是路径,不是全限定名称-->
        <mapper resource="D:\BaiduNetdiskDownload\ch01-first\src\main\java\com\bjp\dao\StudentDao.xml"/>
    </mappers>
</configuration>

(7)创建测试内容

使用main方法,测试mybatis访问数据库

也可以使用junit访问数据库

 @Test
    public void testSelectstudentId() throws IOException {
        String resource = "src/main/resources/MyBatis.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        try (SqlSession session = sqlSessionFactory.openSession()) {
            Student blog = (Student) session.selectOne("com.bjp.dao.StudentDao.selectstudentById", 101);
                      //mapper文件中namespace.select|update|insert|标签的id属性值
        }finally {
            SqlSession.close();
        }
    }

占位符

 #{studentId}就是用java中传入的值替代#{studentId}。

<?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.bjp.dao.StudentDao"><!--mapper是根标签,namespace是命名空间不能为空,唯一值,推荐使用dao接口的全限定名称。
                                                    参与识别sql语句的作用
                                                    在mapper里面可以写insert,update,delete,select标签-->
    <select id="selectBlog" resultType="Blog">
        select * from Blog where id = #{id}
    </select>
    <select id="selectstudentById" resultType="com.bjp.domain.Student"><!--select标签表示查询操作,里面是select语句
                                   id:要执行sql语句的唯一标识,是一个自定义的字符串,推荐使用dao中方法名称
                                   resultttype:告诉mybatis,执行sql语句,把数据赋值给那个类型的Java对象,使用的是java对象的全限定名称
                                   把执行sql语句执行结果变成java对象-->
        select id,name,email from student where id = #{studentId}
    </select>
</mapper>
 @Test
    public void testSelectstudentId() throws IOException {
        String resource = "src/main/resources/MyBatis.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        try (SqlSession session = sqlSessionFactory.openSession()) {
            Student blog = (Student) session.selectOne("com.bjp.dao.StudentDao.selectstudentById", 101);
                      //mapper文件中namespace.select|update|insert|标签的id属性值 
                     传入101从java代码
        }finally {
            SqlSession.close();
        }
    }

概念

//mybaits是默认手工提交事务,insert,delete,update要加session.commit

自动提交

手动提交 

Mybaits的逆向工程

之前的第一个例子就是正向工程,通过数据表创建javabean,然后通过mapper接口定义操作数据库的方法,主配置文件等。现在逆向工程是通过数据表,直接自动生成这些。

快速开始一个逆向工程:MyBatis逆向工程记录【IDEA + MySQL8.0.19】_AlaGeek的博客-CSDN博客.

mybaits与spring整合

mybaits与spring整合需要spring-mybaits整合包,三者有版本配对要求。

 spring需要以下包:

 mybaits需要:msql的jar包,和mybaits包。

整合需要:mybatis-spring包。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值