zoukankan      html  css  js  c++  java
  • Day1 Mybatis初识(一)

    框架

    将重复的,繁琐的代码实现封装,让程序员将更多的精力放在业务的理解和分析上。

    框架的作用

    提高开发效率

    隐藏细节

    三大框架SSH  -->   SSM

    1)        表述层:   用户交互   servlet        SpringMVC/Struts2

    2)        业务逻辑层:业务处理  javabean/ejb   Spring

    3)        数据持久层:数据库交互 jdbc          Mybatis/Hibernate

    传统JDBC的不足

    1)        四个参数的使用有硬编码(配置文件)

    2)        statement的使用中有硬编码

    3)        频繁打开和关闭连接(数据源(连接池))

    Mybatis框架

    MyBatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。

    Mybatis是一个优秀的ORM框架

    ORM:Object Relationship Mapping(对象关系映射) 

    Mybatis不需要开发人员过多关注数据库的连接关闭,stmt对象的创建;着重关注sql

    关注映射: 输入参数  和 输出结果

    1) mybatis下载

    apache ibatis前身。

    google code  à Mybatis

    github

    2) https://github.com/mybatis/mybatis-3/releases

    Mybatis的开发

    1)配置文件   (xml)

      a)xfg.xml:核心配置文件(全局配置文件)

         连接信息的配置(连接池),事务管理

      b) mapper.xml:映射文件

    2) SqlSessionFactory:session工厂

    3)SqlSession:面向程序员的接口(增删改查)

    4)搭建

    a) 创建java项目,导入jar

    b)配置核心配置文件(xml)

    核心配置文件:

    <!-- DTD:定义/约束 -->
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
      <!-- Mybtais核心配置文件:任何的地方都可以获取 -->
    <configuration>
        <!-- environments:环境集合(mysql/oracle)
                   default:默认(环境的id)
         -->
      <environments default="development">
          <!-- environment:代表一个环境
                  id:唯一标识
               transactionManager:事务管理器(管理事务)
                   type:jdbc
               dataSource:数据源(连接池)
                连接池:当项目启动,向数据库请求初始化连接数条连接放置在连接池中管理;
                     当连接的请求多于初始化连接数,此时会根据步长来增加连接数(创建连接);
                     最大不超过最大连接数,人就不够时需要根据超时时间进行等待;
                     当连接的请求远低于当前的连接数,此时会根据最小连接数释放相应的连接。
                     好处:减少了连接的频繁关闭。
                     缺点:连接需要占用资源
                    必须配置四个参数     driver  url  username  password
                    流行的数据源:DBCP   C3P0   DROID
                    
               type="POOLED"("池")
           -->
        <environment id="development">
          <transactionManager type="JDBC"/>
          <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql:///bd1711"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
          </dataSource>
        </environment>
        
      </environments>
      
      <!-- 映射器   -->
      <mappers>
        <mapper resource="BookMapper.xml"/>
      </mappers>
    </configuration>

    mapper映射文件

    <!DOCTYPE mapper
      PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      <!-- 
           mapper:描述对象和记录之间的映射关系
                   namespace:隔离sql,在mapper代理时由特殊用法
       -->
    <mapper namespace="com.lee">
    
       <!--  查询的映射:  (Statement对象) 
                   id:该标签的唯一标识
                   resultType:结果类型 (输出结果的映射) 
                   #{}:代表占位符 
                   parameterType:输入参数类型(输入参数的映射)(可省略)
       -->
      <select id="selectBook" resultType="entity.Book">
        select * from book where bid = #{bid}
      </select>
    
    </mapper>

    测试代码

    //加载配置文件为流
                InputStream is = Resources.getResourceAsStream("Mybatis.xml");
                //创建SqlSessionFactory(加载)
                SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
                //核心接口(发送增删改查语句) 
                SqlSession session = ssf.openSession();
                
                Book book = session.selectOne("com.lee.selectBook", 1);
                System.out.println(book);
                
                //释放资源
                session.close();

    配置详解

    核心配置文件

        properties
    <!-- 1.配置(动态替换) 
                1.1 java的属性文件外部引入   resource="jdbc.properties"
                1.2 property标签中配置
                
                当两者冲突时,最终使用java的属性文件的配置。
           -->
        <properties resource="jdbc.properties">
            <!--  <property name="driver" value="com.mysql.jdbc.Driver"/> --> 
        </properties>
        settings
    <!--2.settings 调整:影响整个Mybatis的行为  -->
        <settings>
            <!--  缓存总开关:  默认true,开启缓存    /  false关闭缓存  -->
            <setting name="cacheEnabled" value="true"/>
            <!-- 延迟加载总开关:   默认false,默认是立即加载   /  true延迟加载 -->
            <setting name="lazyLoadingEnabled" value="true"/>
        </settings>
        typealiases
    <!-- 3.别名
            typeAlias:单一类型起别名
                type:需要设置别名的全限定名称
                alias:别名
            package:包      
                默认别名就是类型(首字母大小写均可)
         -->
        <typeAliases>
            <!-- <typeAlias type="entity.Book" alias="book"/> -->
            <package name="entity"/>
        </typeAliases>
        typeHandlers:
    类型处理器
        objectFactory:对象工厂
        enviroment
    <environment id="development">
            <!-- 事务管理器: 
                JDBC: 和JDBC使用同样的提交和回滚策略
                MANAGED:依赖于应用服务器上下文(context)的配置(必须在服务器上运行)
            -->
          <transactionManager type="JDBC"/>
          <!-- 数据源:      c3p0,droid
                  UNPOOLED:请求时连接,完毕时关闭
                  POOLED:连接池
                  JNDI:依赖于应用服务器(在上下文配置数据源,然后在java获取上下文的引用从而获取数据源)
           -->
          <dataSource type="POOLED">
            <property name="driver" value="${db.driver}"/>
            <property name="url" value="${db.url}"/>
            <property name="username" value="${db.user}"/>
            <property name="password" value="${db.pwd}"/>
          </dataSource>
        </environment>
        mappers
    <!-- 映射器   :作用  寻找映射文件,sql-->
      <mappers>
          <!-- 1.相对于src映射文件的相对路径  -->
        <mapper resource="BookMapper.xml"/>
        <!-- 2.url:全路径 -->
        <!-- 3.class:使用mapper接口的class -->
        <!-- 4.package:注册整个包下所有的文件(mapper代理开发) -->
      </mappers>

    映射文件

    <!-- 1.使用二级缓存  -->
        <cache></cache>
        <!-- 2.引用其他命名空间缓存  -->
        <cache-ref namespace=""/>
    
    <!-- 3.实现复杂的类型封装 -->
        <resultMap type="" id=""></resultMap>
    
    <!-- 4.可被重用的语句块  -->
        <sql id="bookCols">
            bid,bname,author,price
        </sql>
    
    查询:  select   (查询一个,查询所有,模糊查询,分页查询)
    <!-- 模糊查询  :缺陷  有sql注入的风险     /  但是使用不同字段作排序时必须使用    -->
      <select id="selectLike" resultType="book">
          select * from book where bname like '%${value}%'
      </select>
      
      <!-- 分页查询
          1.编写类
          2.map
          3.rowbounds
       -->
      <select id="selectByPage"  resultType="book" parameterType="map">
          select * from book limit #{startRow},#{length}
      </select>
      
      <select id="selectByPage2"  resultType="book">
          select * from book
      </select>
    
    
    增删改:insert   update   delete
       主键返回
        <!-- 插入
              主键返回(用于建立多表之间的关系)
       -->
      <insert id="insertBook" parameterType="book" useGeneratedKeys="true" keyProperty="bid">
         insert into book(bname,author,price) values(#{bname},#{author},#{price})
      </insert>
      
      <insert id="insertBook2" parameterType="book">
          <selectKey keyProperty="bid" order="AFTER" resultType="int">
              <!-- select LAST_INSERT_ID() -->
              <!-- select SEQ_BOOK.nextval from dual -->
          </selectKey>
         insert into book(bname,author,price) values(#{bname},#{author},#{price})
      </insert>

    Eclipse导入本地dtd约束

  • 相关阅读:
    Linux 远程和本地的一些解决方式
    【Android界面实现】使用PagerTabStrip实现有滑动标签的Viewpager
    Elasticsearch
    Awk使用及站点日志分析
    我的软考之路(八)——三大原则学会数据流图
    BZOJ 3864 Hero meet devil DP套DP
    Android studio 自己定义打包APK名称
    C/C++——程序的内存分配
    剑指offer 高速排序
    HDU1069(还是dp基础)
  • 原文地址:https://www.cnblogs.com/qingyunzong/p/8394770.html
Copyright © 2011-2022 走看看