zoukankan      html  css  js  c++  java
  • 初识MyBatis

    MyBatis

    是什么
     是一种ORM框架 实体类和SQL语句之间建立映射关系
     O===>Object  R===>Relation M===>Mapping

    特点
     基于SQL语法,简单易学
     能了解底层封装过程
     SQL语句封装在配置文件中,便于统一管理和维护,降低程序的耦合度
     方便程序的代码调式

    使用MyBatis的开发步骤
     下载mybatis-3.2.2.jar包并导入工程
     编写MyBatis核心配置文件(默认configuration.xml 建议自定义)
     创建实体类-POJO
     DAO层-SQL映射文件(mapper.xml)
     创建测试类
      读取全局配置文件mabatis-config.xml
      创建SqlSessionFactory对象,读取配置文件
      创建SqlSession对象
      调用mapper文件进行数据操作

    导入MyBatis源码
     选中引入工程中(即Referenced Libraries中)的mybatis-3.2.2.jar包
     右键===》properties===>Java Source Attachment===》导入到Location path
     folder  ------->External Folder(解压后)
     JAR  ------->Workspace
     zip  ------->External File(未解压)====》到自己相应的目录找到源码压缩包====》Apply

    mybatis核心配置文件的详细配置
     01、创建source folder 统一管配置志文件resources

     02、resources
      log4j.properties
      database.properties
      mybatis-config.xml(语义化命名的mybatis核心配置文件)

     03、mybatis-config.xml配置详细 

      001、copy文件头
      <?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">

      002、根节点configuration
      <configuration>  <!--注意各个节点的顺序-->

       <!-- 引入database.properties文件 -->
       <properties resource="database.properties"/>
       
       <!--设置运行时的属性-->
       <settings>
         <setting name="logImpl" value="LOG4J" />
       </settings>

       <!-- 配置多套运行环境,并指定默认运行环境-->
       <environments default="development">

        <environment id="development">
         <!-- 事务管理采用JDBC-->
         <transactionManager type="JDBC">
         </transactionManager>
         <!-- 配置数据源,POOLED是mybatis自带的,
         也可用Tomcat的JNDI-->
         <dataSource type="POOLED">
          <!--数据库连接四要素,结合自己的properties-->
          <property name="driver" value="${dirver}"/>
          <property name="url" value="${url}"/>
          <property name="username" value="${user}"/>
          <property name="password" value="${password}"/>
         </dataSource>
        </environment>

        <!--下面可以配置多套运行环境。注意id唯一,不要重复-->

       </environments>

      <!--将mapper文件加入到配置文件中-->
        <mappers>
         <mapper resource="cn.smbms.dao.user.UserMapper.xml" />
        </mappers>

    </configuration>

    DAO层xxx-Mapper.xml文件配置
     01、copy文件头
      <?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">
      <!-- 上一行是网络引入dtd文件,由于网络限制,需要手动引入 ->
     02、根节点mapper
      <!--namespace用于区别其他mapper,达到全局唯一。-->
      <mapper namespace="cn.smbms.dao.user.UserMapper"> 
       <!-- 查询用户表的记录数 -->
       <select id="count" resultType="int">
        select count(1) as count from smbms_user
       </select>

       <!---查询用户列表->  <!---返回类型用完全限定名->
       <select id="getUserList" resultType="cn.smbms.pojo.User">
        select * from smbms_user
       </select>
      </mapper>

    手动引入dtd
     01、找到dtd文件  
      jar包===》解压===》org/apache/ibatis/builder/xml/xxx.dtd
      放到自己想放的位置
     02、复制PUBLIC 后的 -//mybatis.org/DTD Mapper 3.0//EN
     03、引入dtd
      点击MyEclipse的window===>preferences===>搜xml
      选中User Specified Entries===>点击Add===file System 到自己刚才存放位置找dtd文件
      将刚才复制的 -//mybatis.org/DTD Mapper 3.0//EN 粘贴在 key 中

    测试,执行刚才配置的sql语句
     01、创建测试类
      建一个source folder 来放测试类
      New===》Other===>Junit Test Case===>填写包名,类名
     02、书写Test方法

     @Test
     public void test(){}
      String resource="mybatis-config.xml";
      int count=0;
      SqlSession sqlSession = null;
      try {
       //1、获取mybatis-config.xml的输入流
       InputStream is=Resources.getResourceAsStream(resource);//导入的是ibatis.io的包
       //2、创建SqlSessionFactory对象,完成对配置文件的读取
       SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
       //3、创建sqlSession
       sqlSession=factory.openSession();
       count = sqlSession.selectOne("cn.smbms.dao.user.UserMapper.count");
       logger.debug("UserMapperTest count ----->" + count);
      } catch(IOException e) {
       e.printStackTrace();
      } finally {
       sqlSession.close();
      }
     }

    MyBatis的优缺点
     MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,
     适用于性能要求较高或者需求多变的互联网项目

     优点
      与JDBC相比,减少了50%以上的代码量
      最简单的持久化框架、小巧简单易学
      SQL代码从程序代码中彻底分离,可重用
      提供XML标签、支持编写动态SQL
      提供映射标签、支持对象与数据库的ORM字段关系映射

     缺点
      SQL语句编写工作量大,对开发人员有一定要求
      数据库移植性差 

    SqlSessionFactory优化---创建MyBatisUtil单例类
    (并非最优,后期可集成Spring)

     public class MyBatisUtil{
      private static SqlSessionFactory factory;
      static{
       try {
        InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
        factory=new SqlSessionFactoryBuilder().build(is);
       } catch (IOException e){
        e.printStackTrace();
       }  
      }
      public static SqlSession createSqlSession(){
       return factory.openSession(false);
      }
      public static void closeSqlSession(SqlSession sqlSession){
       if(null!= sqlSession){
        sqlSession.close();
       }
      }
     }

    接口映射器--->UserMapper
     //与映射同包
     public interface UserMapper{
      public List<User> getUserList();//与映射id同名
     }

     //修改测试类中的相应代码
     userList=sqlSession.getMapper(UserMapper.class).getUserList();

    系统核心配置文件
     mybatis-config.xml-系统核心配置文件
     configuration 配置
      properties   可以配置在Java属性配置文件中
      setting   修改MyBatis在运行时的行为方式
      typeAliases  为Java类型命名一个别名(简称) 
      typeHandlers  类型处理器
      objectFactory 对象工厂
      plugins   插件
      environments  环境
       environment    环境变量
        transactionManager  事务管理器
        dataSource    数据源
      mappers  映射器

    配置 properties元素的两种方式
     通过外部指定的方式 database.properties,实现动态配置
      配置properties的resource指定(较高的优先级)
      <properties resource="database.properties" />
     直接配置为xml,实现动态配置
      配置property的name和value
      <properties>
       <property name="driver" value="com.mysql.jdbc.Driver" />
       <property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms" />
       <property name="user" value="root" />
       <property name="password" value="" />
      </properies>

    settings元素(9个)
     用来修改MyBatis运行时的行为方式
     主要是MyBatis的一些全局配置属性的设置

    typeAliases
     方式一:<typeAlis alias="user" type="cn.smbms.pojo.User" /><!--指定一个类的别名-->
     方式二:<package name="cn.smbms.pojo" /><!--为全包指定默认名,JavaBean的非限定类名-->

    environments元素
     配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上
     子元素节点:environment,但是必须指定其中一个默认运行环境(通过default指定)
      id  运行环境ID
      transactionManager 事务管理器
       <transactionManager type="[JDBC][MANAGED]" /> MANAGED--托管
      dataSource  数据源
       dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源
       有三种内建的数据源类型
        <dataSource type="[UNPOOLED][POOLED][JNDI]">

  • 相关阅读:
    8、泛型程序设计与c++标准模板库5.函数对象
    Linux和Windows系统分区原理
    Linux命令----cd
    为什么会产生TCP/IP?
    区间 dp
    dp-划分数 (递推)
    dp-LCS(递归输出最短合串)
    dp-(LCS 基因匹配)
    位运算符
    求对数
  • 原文地址:https://www.cnblogs.com/vic_/p/8334105.html
Copyright © 2011-2022 走看看