MyBatis概述

103 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情

1、MyBatis概述

MyBatis是最近几年非常流行的数据访问层(Dao层)框架,能够简单高效的实现对数据层访问。

2、MyBatis和JDBC的比较

(1)JDBC:java原生的关系型数据库的访问方式

A 每次操作数据库都需要获取连接,关闭连接,在大量访问数据库时,频繁的关闭连接消耗性能。

B 需要手动编写sql,有学习成本

C 需要手动赋值sql参数,查询结果需要手动封装到javabean中。

D sql语句写死在程序中,需要修改sql语句必须修改源文件。

(2)MyBatis

是一种半自动对象-表映射关系的Dao层框架,可以自动的进行对象的封装,但是sql语句仍然需要自己来写。 结合了JDBC和Hibernate框架的优点,可以手写sql语句灵活实现数据访问,自动封装数据,较少复杂代码。

3、MyBatis框架的结构

在这里插入图片描述

4、MyBatis的入门案例

(1)创建Java项目,并导入mybatis开发的相关jar包

(2)启动mysql数据库的服务,准备库、表以及数据; 定义javabean类为User类,和use表对应,形成映射关系

(3)编写配置文件SqlMapConfig.xml,默认放在src目录下。

(4)编写映射文件UserMapper.xml,默认放在src目录下。

(5)创建测试类,测试代码

5、MyBatis的参数传递

需要在映射文件XXMapper.xml中通过#{}进行值的接收 (1)值的传递---Map传递

(2)值的传递—javabean传递

(3)值的传递—单值传递

6、MyBatis框架的增删改查操作(动态sql语句)

<!-- 命名空间,保证值唯一,标识UserMapper.xml文件的,值一般包+xml的文件名命名组成 -->
<mapper namespace="com.lddx.mapper.UserMapper">
   <!-- 修改操作 -->
   <!-- 根据id修改年龄 -->
   <update id="update01">
      update user set age=#{age} where id=#{id};
   </update>  
   <!-- 
      思考:现在是根据id修改年龄   update user set age=#{} where id=#{};
                 后面如果想根据id同时修改年龄和姓名 update user set age=#{},name=#{} where id=#{}
                 两种不同的修改要求,需要写2个sql语句的配置,比较麻烦
          MyBatis框架提供了一种动态sql语句,可以解决入上问题
    --> 
    <!-- 修改操作,动态sql语句的写法 -->
    <update id="update02">
       update user 
       <set>
         <if test="age>=0">age=#{age},</if>
         <if test="name!=null">name=#{name}</if>
       </set> 
       where id=#{id};
    </update>
   

     <!-- 查询操作,静态sql语句的写法 ,需要写3个sql语句的配置,比较麻烦
            只根据id做查询 select * from user where id=#{};
            想根据id和name作为查询条件:select * from user where id=#{} and name=#{};
            想根据id,name和age作为条件查询:select * from user where id=#{} and name=#{} and age=#{}; 
     -->
     <select id="select01" resultType="com.lddx.bean.User">
        select * from user 
        <where>
            <if test="id!=0">id=#{id}</if>
            <if test="name!=null"> and name=#{name}</if>
            <if test="age>=0"> and age=#{age}</if>
        </where>
        ;
     </select>

   <!-- 插入操作,动态sql语句的写法
        insert into user(id) values(#{});
        insert into user(name) values(#{});
        insert into user(id,name) values(#{},#{});
        insert into user(name,age) values(#{},#{});
        insert into user(id,name,age) values(#{},#{},#{});
    -->
   <insert id="insert01">
      insert into user
      <trim prefix="(" suffix=")">
         <if test="id!=0">id,</if>
         <if test="name!=null">name,</if> 
         <if test="age>=0">age</if>
      </trim> 
      values
      <trim prefix="(" suffix=")">
         <if test="id!=0">#{id},</if>
         <if test="name!=null">#{name},</if> 
         <if test="age>=0">#{age}</if>
      </trim>
      ;
   </insert>

   <!-- 删除操作,动态sql语句的写法
        delete from user where id=#{};
        delete from user where id=#{} and name=#{}
        ...
        select * from user where id=#{} and name=#{};
    -->
     <delete id="delete01">
        delete from user
        <where>
            <if test="id!=0">id=#{id}</if>
            <if test="name!=null"> and name=#{name}</if>
            <if test="age>=0"> and age=#{age}</if>
        </where>
        ;
     </delete>

</mapper>