zoukankan      html  css  js  c++  java
  • MyBatis框架总结

    一. MyBatis简介

    MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

    每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。 

    用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。 

     MyBatis 最强大的特性之一就是它的动态语句功能。如果您以前有使用JDBC或者类似框架的经历,您就会明白把SQL语句条件连接在一起是多么的痛苦,要确保不能忘记空格或者不要在columns列后面省略一个逗号等。动态语句能够完全解决掉这些痛苦。尽管与动态SQL一起工作不是在开一个party,但是MyBatis确实能通过在任何映射SQL语句中

    使用强大的动态SQL来改进这些状况。

     动态SQL元素对于任何使用过JSTL或者类似于XML之类的文本处理器的人来说,都是非常熟悉的。在上一版本中,需要了解和学习非常多的元素,但在MyBatis 3 中有了许多的改进,现在只剩下差不多二分之一的元素。MyBatis使用了基于强大的OGNL表达式来消除了大部分元素

    二. MyBatis是对JDBC技术做的封装

    • 封装了获取连接、创建statement、设置sql参数、执行sql、释放连接过程

    • 封装了将查询结果ResultSet记录映射成实体对象过程

    • 封装了Dao对象实现过程(只提供接口,框架生成实现对象)

    三. 程序员使用MyBatis需要做以下工作: 

    这里写图片描述

    • 搭建MyBatis框架环境

    • 编写实体类

    • 编写SQL语句

    • 编写Dao接口

    • 获取SqlSession进行数据库操作

    四. Mybatis基本应用 

    实现基本的增删改查功能,下面是本案例的基本框架图

    1. 搭建MyBatis框架环境

    首先需要引入两个包:mybatis.jar 和sqljdbc42.jar包

    设置 mybatis 配置文件: SqlMapConfig.xml, 在 src目录下建立此文件,内容如下:

    <?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>     
        <!-- 为SQL定义部分的parameterType或resultType属性指定自定义类型的别名 -->
        <typeAliases>
            <typeAlias alias="ServiceStation" type="com.mybatis.models.ServiceStation" />
        </typeAliases>
        <!-- 设置数据库连接参数 -->
        <environments default="development">
            <environment id="development">
            <transactionManager type="JDBC" />
                <dataSource type="POOLED">  
                    <property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
                    <property name="url" value="jdbc:sqlserver://mssql-rw-cyp_coopbusiness.vip.test.suixinhuan.com;DatabaseName=CYP_CoopBusiness" />
                    <property name="username" value="Umanager" />
                    <property name="password" value="ASD123asd!1" />
               </dataSource>
            </environment>
        </environments>
        <!-- 加载SQL定义文件 -->
        <mappers>      
             <mapper resource="com/mybatis/sql/ServiceStation.xml" />
        </mappers>
    </configuration>
    View Code

    2. 编写实体类

    首先创建一个包:com.mybatis.models,并在其下创建与数据库表对应的实体 ServiceStation.java 类:

    package com.mybatis.models;
    
    import java.util.Date;
    
    /**
     * @author 自定义类
     *
     */
    public class ServiceStation {
        private String ID; 
        private String StationName; 
        private String CityCode; 
        private String CityName; 
        private String StationAddr; 
        private int IsEnabled; 
        private String Createor; 
        private String CreateorUser; 
        private Date CreateDate; 
        
        public String getID() { 
            return ID; 
        } 
        public void setID(String ID) { 
            this.ID = ID; 
        } 
        public String getStationName() { 
            return StationName; 
        } 
        public void setStationName(String StationName) { 
            this.StationName = StationName; 
        } 
        public String getCityCode() { 
            return CityCode; 
        } 
        public void setCityCode(String CityCode) { 
            this.CityCode = CityCode; 
        }   
        public String getCityName() { 
            return CityName; 
        } 
        public void setCityName(String CityName) { 
            this.CityName = CityName; 
        } 
        public String getStationAddr() { 
            return StationAddr; 
        } 
        public void setStationAddr(String StationAddr) { 
            this.StationAddr = StationAddr; 
        } 
        public int getIsEnabled() { 
            return IsEnabled; 
        } 
        public void setIsEnabled(int IsEnabled) { 
           this.IsEnabled = IsEnabled; 
        } 
        public String getCreateor() { 
            return Createor; 
        } 
        public void setCreateor(String Createor) { 
            this.Createor = Createor; 
        } 
        public String getCreateorUser() { 
            return CreateorUser; 
        } 
        public void setCreateorUser(String CreateorUser) { 
            this.CreateorUser = CreateorUser; 
        } 
        public Date getCreateDate() { 
            return CreateDate; 
        } 
        public void setCreateDate(Date CreateDate) { 
            this.CreateDate = CreateDate; 
        }    
    }
    View Code

    3. 编写SQL定义文件(映射文件)

    首先创建一个包:com.mybatis.sql,并在其下创建与这个实体 ServiceStation.java 类对应的映射文件 ServiceStation.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">
    
    <!-- namespace指定和哪个接口映射 -->
    <mapper namespace="com.mybatis.dao.ServiceStationMapper">
        <!-- resultType是select特有 -->
        <select id="findAll" resultType="com.mybatis.models.ServiceStation">
            select * from T_TRA_ServiceStation
        </select>
         
        <select id="findById" resultType="ServiceStation" parameterType="String">
            select * from T_TRA_ServiceStation where ID=#{ID}
        </select>
        
        <insert id="save" parameterType="ServiceStation">
            insert into T_TRA_ServiceStation values (#{ID},#{StationName},#{CityCode},#{CityName})
        </insert>
    
        <update id="update" parameterType="com.mybatis.models.ServiceStation">
            update T_TRA_ServiceStation set Createor=#{Createor},CreateorUser=#{CreateorUser} where ID=#{ID}
        </update>
    
        <!-- 如果parameterType为单个值,#{标识符}表达式标识符没有约定 -->
        <delete id="delete" parameterType="String">
            delete from T_TRA_ServiceStation where ID=#{ID}
        </delete>            
         
    </mapper>
    View Code

    说明:SQL参数部分,可以使用${标识符}或#{标识符},如果使用#{}内部采用预编译机制执行SQL操作。如果使用${}内部采用非预编译过程。

    下面是对这几个配置文件一点解释说明:

    1、配置文件 SqlMapConfig.xml 是 mybatis 用来建立 sessionFactory,里面主要包含了数据库连接相关内容,还有 java 类所对应的别名,比如:<typeAlias alias="ServiceStation" type="com.mybatis.models.ServiceStation" /> 这个别名非常重要,在具体的类的映射中,比如:ServiceStation.xml 中 resultType 或 parameterType 就是对应这个。要保持一致,这里的 resultType 还有另外单独的定义方式,后面学习到我们再详细介绍说明。

    2、SqlMapConfig.xml 里面 的  <mapper resource="com/mybatis/sql/ServiceStation.xml" /> 是包含要映射的类的 xml 配置文件。

    3、在ServiceStation.xml 文件里面主要是定义各种 SQL 语句,以及这些语句的参数,以及要返回的类型等等。

    4. 编写Mapper接口(Mapper映射器)

    首先创建一个包:com.mybatis.dao,并在其下创建接口 ServiceStationMapper.java 类:

    package com.mybatis.dao;
    
    import com.mybatis.models.ServiceStation;
    import java.util.List;
    
    /**
     * 编写Mapper接口(Mapper映射器)
     * 方法定义参考SQL定义的id、parameterType、resultType属性
     * 1.方法名与id属性一致
     * 2.参数类型与parameterType属性一致
     * 3.返回结果:多行查询List<resultType>;单行查询 resultType;增删改为void或int
     * 4.SQL定义文件中namespace="com.mybatis.dao.ServiceStationMapper"
     */
    public interface ServiceStationMapper {
          public List<ServiceStation> findAll();
    
          public ServiceStation findById(String id);
    
          public int save(ServiceStation obj);
    
          public int update(ServiceStation obj);
    
          public int delete(String id);
    }
    View Code

    5. 获取SqlSession操作

    package com.mybatis.dao;
    
    import java.io.IOException;
    import java.io.Reader;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    /*
     * 获取SqlSession操作(公共方法)
     */
    public class MyBatisUtil {
        public static SqlSession getSession() {  
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            Reader reader;
            try {
                reader = Resources.getResourceAsReader("SqlMapConfig.xml");
                SqlSessionFactory factory = builder.build(reader);   
                SqlSession session = factory.openSession();
                return session;
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
                return null;
            }      
        }
    }
    View Code

    6. 利用SqlSession获取Mapper接口对象

    运行程序测试结果,在 src 目录下建立一个包:com.mybatis,并在其下创建一个类:HelloMyBatisProgram, 来运行测试配置环境是否成功,具体代码如下示:

    package com.mybatis;
    
    import java.util.List;
    
    import org.apache.ibatis.session.SqlSession;
    
    import com.mybatis.dao.MyBatisUtil;
    import com.mybatis.dao.ServiceStationMapper;
    import com.mybatis.models.ServiceStation;
    
    /*
     * 测试类
     */
    public class HelloMyBatisProgram {
         public static void main(String[] args) {
              SqlSession session = MyBatisUtil.getSession();
              //由框架生成ServiceStationMapper接口实现对象
              ServiceStationMapper ssDao = session.getMapper(ServiceStationMapper.class);
              //System.out.println(ssDao.getClass().getName());        
              System.out.println("===========获取所有服务站列表============");
              List<ServiceStation> list = ssDao.findAll(); 
              for(ServiceStation item:list){
                  System.out.println(item.getStationName()+"  "+item.getCityCode()+"  "+item.getCityName());
              }          
              System.out.println("===========查找单个服务站信息============");        
              ServiceStation findObj = ssDao.findById("598212333755587533");  
              System.out.println(findObj.getStationName()+"  "+findObj.getCityCode()+"  "+findObj.getCityName());
              System.out.println("===========更新单个服务站信息============");        
              ServiceStation updateObj = ssDao.findById("598212333755587533");         
              updateObj.setCreateor("张三");
              updateObj.setCreateorUser("zhangsan");
              // 执行更新
              int result = ssDao.update(updateObj);  
              // 提交事务(注意:增删改之后必须执行提交)
              session.commit();
              System.out.println("更新返回结果:" + result);
              session.close();       
         }     
    }
    View Code

  • 相关阅读:
    c#爬虫-从内存中释放Selenium chromedriver.exe终极杀
    领域驱动设计-从贫血模型到充血模型
    推荐:.Net 5开源免费的内容管理系统
    Exceptionless服务端本地化部署
    Chrome扩展程序开发
    SqlSugar+SqlServer+NetCore3.1 入门案例
    Linux Qt5 一. 开发环境安装
    Boost Mutex详细解说
    Y7000 2020 安装ubuntu 16.04.3双系统后无法识别无线网卡问题
    《视觉SLAM十四讲》第三讲习题7
  • 原文地址:https://www.cnblogs.com/li150dan/p/9549758.html
Copyright © 2011-2022 走看看