zoukankan      html  css  js  c++  java
  • Mybatis学习笔记一

      没有系统的学过mybatis,但之前的工作中用到过,与hibernate比起来个人更喜欢mybatis一点,因为感觉只要配置的映射关系对了sql写对了一半不会出错,就算出错感觉找bug比hibernate要来的容易,最近抽空系统的学习了一下mybatis,这里记录下我的学习笔记和感想,仅供备忘;

      一、简单介绍(mybatis是什么)

      mybatis是一个持久层的框架,让程序员将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成满足需要的sql语句。它有两种开发方式,一种是ibatis也支持的原始dao的开发,既编写dao接口和它的实现类,另一种是使用mapper代理的方法,只需编写mapper的接口和它的配置文件即可,此方法是ibatis不支持的,也是企业中常用的;

      二、一般开发步骤(使用mapper代理开发)

      1、创建mybatis的主配置文件,SqlMapConfig.xml,用于配置mybatis的运行环境、数据源、事务等,如下:

     1 <configuration>
     2     <!-- 加载属性文件 -->
     3     <!--properties中还可以配置一些属性名和属性值  -->
     4     <!-- <property name="jdbc.driver" value=""/> -->
     5     <properties resource="db.properties">
     6     </properties>
     7     <!-- 全局配置参数,需要时再设置 -->
     8     <!-- <settings></settings> -->
     9     <!-- 别名定义 -->
    10     <typeAliases>
    11         <!-- 批量别名定义 
    12         指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以)
    13         -->
    14         <package name="cn.itcast.mybatis.po"/>
    15     </typeAliases> 
    16     
    17     <!-- 和spring整合后 environments配置将废除-->
    18     <environments default="development">
    19         <environment id="development">
    20         <!-- 使用jdbc事务管理,事务控制由mybatis-->
    21             <transactionManager type="JDBC" />
    22         <!-- 数据库连接池,由mybatis管理-->
    23             <dataSource type="POOLED">
    24                 <property name="driver" value="${jdbc.driver}" />
    25                 <property name="url" value="${jdbc.url}" />
    26                 <property name="username" value="${jdbc.username}" />
    27                 <property name="password" value="${jdbc.password}" />
    28             </dataSource>
    29         </environment>
    30     </environments>
    31     
    32 </configuration>

      2、创建你需要操作数据库表的实体类

      3、通过mapper代理的方法开发dao

        3.1 编写mapper.xml(这里以根据id查询为例)

          

    <mapper namespace="cn.itcast.mybatis.mapper.UserMapper">
    
         <!-- 在 映射文件中配置很多sql语句 -->
        <!-- 需求:通过id查询用户表的记录 -->
        <!-- 通过 select执行数据库查询
        id:标识 映射文件中的 sql
        将sql语句封装到mappedStatement对象中,所以将id称为statement的id
        parameterType:指定输入 参数的类型,这里指定int型 
        #{}表示一个占位符号
        #{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称
        
        resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。
         -->   
    
        <select id="findUserById" parameterType="int" resultType="user">
            SELECT * FROM USER WHERE id=#{value}
        </select>
        
    </mapper>

        3.2 编写mapper接口

          编写mapper接口需要遵循如下规范:

          3.2.1 在mapper.xml中namespace等于mapper接口地址

          3.2.2 mapper.java接口中的方法名和mapper.xml中statement的id一致

          3.2.3 mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致。

          3.2.4 mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。

      4、在SqlMapConfig.xml中加载mapper.xml,可参考下面代码:

        

    <mappers>
            <mapper resource="sqlmap/User.xml"/>
            <!--通过resource方法一次加载一个映射文件 -->
            <!-- <mapper resource="mapper/UserMapper.xml"/> -->
            <!-- 通过mapper接口加载单个 映射文件
            遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
            上边规范的前提是:使用的是mapper代理方法
             -->
            <!-- <mapper class="cn.itcast.mybatis.mapper.UserMapper"/> -->
            
            <!-- 批量加载mapper
            指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载
            遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
            上边规范的前提是:使用的是mapper代理方法
             -->
            <package name="cn.itcast.mybatis.mapper"/>
    
        </mappers>

      这样,mybatis的一个流程基本就走完了,然后就是写方法测试了,接下来的笔记来记录下mybatis的各个xml里的参数的意义及一些杂七杂八的备忘录!

          

          

          

  • 相关阅读:
    使用MobaXterm远程连接Ubuntu,启动Octave,界面不能正常显示
    ABP .Net Core 日志组件集成使用NLog
    ABP .Net Core Entity Framework迁移使用MySql数据库
    ABP前端使用阿里云angular2 UI框架NG-ZORRO分享
    阿里云 Angular 2 UI框架 NG-ZORRO介绍
    Visual Studio 2019 Window Form 本地打包发布猫腻
    VS Code + NWJS(Node-Webkit)0.14.7 + SQLite3 + Angular6 构建跨平台桌面应用
    ABP .Net Core 调用异步方法抛异常A second operation started on this context before a previous asynchronous operation completed
    ABP .Net Core To Json序列化配置
    .Net EF Core数据库使用SQL server 2008 R2分页报错How to avoid the “Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement.”
  • 原文地址:https://www.cnblogs.com/darling2047/p/6050743.html
Copyright © 2011-2022 走看看