Mybatis概述+Demo1

Mybatis

简介

 

什么是Mybatis

  • Mybatis是一款优秀的持久层框架

  • Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程

  • Mybatis可以使用简单的XML或注解来配置和映射原生信息,将借口和Java的实体类映射成数据库中的记录

  • Mybatis本是apache的一个开源项目ibatis,2010年这个项目由apache迁移到了Google code,并且改名为Mybatis

  • 2013年11月迁移到Github

  • Mybatis官方文档:http://www.mybatis.org/mybatis-3/zh/index.html

  • Github:https://github.com/mybatis/mybatis-3

持久化

持久化是将数据在持久状态和瞬时状态间转换的机制

  • 既把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。

  • JDBC就是一种持久化机制,文件IO也是一种持久化机制

  • 在生活中:将鲜肉冷藏,吃的时候再解冻的方法也是。将水果做成罐头的方法也是。

为什么需要持久化服务呢?那是由于内存本身的缺陷引起的

  • 内存断电后数据会丢失,但有一些对象是无论如何都不能丢失的,比如银行账号等,遗憾的是,人们还无法保证内存永不断电。

  • 内存国语昂贵,与硬盘、光盘等外存相比,内存的价格要高2~3个数量级,而且维持成本也高,至少需要一直供电。所以即使对象不需要永久保存,也会因为内存的容量限制不能一直待在内存中,需要持久化来缓存到外存。

持久层

什么是持久层

  • 完成持久化工作的代码块 ===》dao层(Data Access Object 数据访问对象)

  • 大多数情况下特别是企业级应用,数据持久化往往也就意味着将内存中的数据保存到磁盘上加以固化,而持久化的实现过程则大多通过各种关系数据库来完成。

  • 不过这里有一个字需要特别强调,也就是所谓的“层”。对于应用系统而言

 

为什么需要Mybatis

  • Mybatis就是帮助程序员将数据存入数据库中,和从数据库中取数据

  • 传统的JDBC操作,有很多重复代码块.比如:数据取出时的封装,数据库的建立连接等等,通过框架可以减少重复代码,提高开发效率

  • Mybatis是一个半自动化的ORM框架(Object Relationship Mapping) > 对象关系映射

  • 所有的事情,不用Mybatis依旧可以做到,只是用它会更加简单,技术没有高低之分,只有使用这个技术的人有高低之分

  • Mybatis的优点

  • 简单易学:本身就小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件就可以了,易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现

  • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。

  • 解除sql和程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

  • 提供xml标签,支持编写动态sql

1.4 Mybatis第一个程序

思路流程:搭建环境 > 导入Mybatis > 编写代码 > 测试

1.4.1 代码演示

  1. 搭建实验数据库

  2. 导入Mybatis相关jar包

    <dependencies>
           <dependency>
               <groupId>org.mybatis</groupId>
               <artifactId>mybatis</artifactId>
               <version>3.5.4</version>
           </dependency>
           <dependency>
               <groupId>mysql</groupId>
               <artifactId>mysql-connector-java</artifactId>
               <version>5.1.38</version>
           </dependency>
           <dependency>
               <groupId>org.projectlombok</groupId>
               <artifactId>lombok</artifactId>
               <version>1.18.12</version>
               <scope>provided</scope>
           </dependency>
       </dependencies>
  3. 编写Mybatis核心配置文件

    1. 查看官方中文文档

      <?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"/>
           <dataSource type="POOLED">
             <property name="driver" value="${driver}"/>
             <property name="url" value="${url}"/>
             <property name="username" value="${username}"/>
             <property name="password" value="${password}"/>
          </dataSource>
        </environment>
      </environments>
       <mappers>
         <mapper resource="org/mybatis/example/BlogMapper.xml"/>
      </mappers>
      </configuration>
  4. 编写mybatis工具类

    • 查看帮助文档

      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 MybatisUtils {

        private static SqlSessionFactory sqlSessionFactory;

        static {
            try {
                String resource = "mybatis-config.xml";
                InputStream inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
          } catch (IOException e) {
                e.printStackTrace();
          }
      }

        //获取SqlSession连接
        public static SqlSession getSession(){
            return sqlSessionFactory.openSession();
      }

      }
  5. 创建db.properties文件

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://47.111.238.212:3306/java68?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
    username=root
    password=123456
  6. 创建实体类

    package com.crowned.bean;

    import lombok.Data;

    @Data
    public class Student {
       private int sid;
       private String sname;
       private  String gender;
    }
  7. 编写mapper接口类

    package com.crowned.dao;

    import com.crowned.bean.Student;
    import org.apache.ibatis.annotations.Select;

    import java.util.List;

    public interface StudentMapper {
    //   @Select("select * from students")
       public List<Student> all();
    }

     

  8. 编写mapper.xml配置文件

    • namespace十分重要,不能写错

    <?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.crowned.dao.StudentMapper">
       <select id="all" resultType="Student">
      select * from students
     </select>
    </mapper>
  9. 运行测试,成功查询数据就ok了

    import com.crowned.dao.StudentMapper;
    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 MyTest {
       public static void main(String[] args) throws IOException {
           InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
           SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
           SqlSession sqlSession = sessionFactory.openSession();
           StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
           System.out.println(mapper.all());
      }
    }

     

 

可能遇到的问题

Maven静态资源过滤问题

<build>
       <resources>
           <resource>
               <directory>src/main/java</directory>
               <includes>
                   <include>**/*.properties</include>
                   <include>**/*.xml</include>
               </includes>
               <filtering>false</filtering>
           </resource>
           <resource>
               <directory>src/main/resources</directory>
               <includes>
                   <include>**/*.properties</include>
                   <include>**/*.xml</include>
               </includes>
               <filtering>false</filtering>
           </resource>
       </resources>
</build>

 

 

posted @ 2020-05-19 09:21  秋山信月归  阅读(162)  评论(0)    收藏  举报