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里的参数的意义及一些杂七杂八的备忘录!

      

      

      

posted @ 2016-11-10 14:12  木木他爹  阅读(210)  评论(0编辑  收藏  举报