初学mybatis框架

一、简述

  mybatis框架用了两天后,给我的感觉是dao层对数据库的操作变得简单多了,简化了大量的代码

二、开发步骤

  1.新建工程,把mybatis框架的jar包和依赖包拷贝到工程中。

  2.编写实体类,与数据库表进行对应。

  3.定义数据接口,并在接口中定义数据操作方法。

  4.编写接口映射文件,对接口的数据操作进行映射。

  5.编写mybatis全局文件配置,配置数据库连接参数,配置数据映射文件。

  6.编写测试类进行测试。(测试步骤:获取mybatis环境,实例化数据接口,调用接口方法,处理操作结果)。

三、学习过程中的知识碎片

  1.mybatis有两个配置文件,一个是全局配置文件,一个是接口映射文件。

    全局配置文件:

<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">

    接口映射文件:

<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

  2.配置时可使用properties进行简化,方便后续开发与维护。例如

<dataSource type="POOLED">
        <property name="driver" value="${p_driver}"/>
        <property name="url" value="${p_url}"/>
        <property name="username" value="${p_username}"/>
        <property name="password" value="${p_password}"/>
      </dataSource>

  把参数放在外

<properties>
    <property name="p_driver" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="p_url" value="jdbc:oracle:thin://localhost:1521/orcl"/>
    <property name="p_username" value="scott"/>
    <property name="p_password" value="zht"/>		
</properties>

  3.如果要配置的别名很多,可以使用package进行简化配置,配置pojo类所在的package包即可

<typeAliases>
<package name="com.neuedu.mybatisdemo.bean"/>
</typeAliases>

  4.mybatis的映射文件有四种配置方法 ,其中比较方便的是配置包名

<mappers>
<package name="com.neuedu.mybatisdemo.dao"/>
</mappers>

  5.resultMap与resultType相比较,resultMap看起来更直观明了,方便阅读理解,使用resultType时需要注意实体类的属性需要和数据库表的列名一致,如果不一致则需要使用别名,否则会匹配不上。

  6.在写sql语句配参时,使用${}和#{}均可实现,但#{}可以防止sql注入式攻击,更安全,推荐使用#{}。

  7.使用序列管理主键时的sql写法

<insert id="addStudent" parameterType="Student">
     <selectKey keyColumn="id" keyProperty="id" order="BEFORE" resultType="int">
        select tab_student.nextval as id from dual
     </selectKey>
     INSERT INTO student VALUES(#{id},#{account},#{password},#{truename}) 
</insert>         

  8.表关联查询,可以使用collection进行关系映射

<select id="findAll" resultMap="studentMap">
     <!-- 表关联查询 -->
     SELECT c.*,s.* FROM <include refid="formsql"></include>
     </select>
     <sql id="formsql">
     student s LEFT OUTER JOIN tab_student_course t ON s.id=t.student_id LEFT OUTER JOIN course c ON t.course_id=c.course_id
     </sql>
<resultMap type="Student" id="studentMap">
         <id column="id" property="id"/>
         <result column="account" property="account"/>
         <result column="password" property="password"/>
         <result column="truename" property="truename"/>
         <collection property="courses" ofType="Course" javaType="ArrayList">
             <id column="course_id" property="courseId"/>
              <result column="course_name" property="courseName"/>
              <result column="course_score" property="courseScore"/>
              <result column="start_date" property="startDate"/>             
         </collection>
     </resultMap>

  9.多条件查询的分页查询

 

<select id="searchByPager" parameterType="Pager" resultMap="courseMap">
      SELECT * FROM
    (SELECT c.*,ROWNUM r 
    FROM (SELECT * FROM course WHERE 1=1
    <if test="course.courseName != null">and course_name like concat(concat('%',#{course.courseName}),'%')</if>
    <if test="course.startDate != null">and start_date > #{course.startDate}</if>
    <if test="course.courseScore !=null">and course_score > #{course.courseScore}</if>
    ORDER BY course_score DESC) c
    WHERE ROWNUM &lt; =#{end})
    WHERE r&gt;=#{begin}
  </select>

 

posted @ 2018-03-06 19:37  小身板  阅读(148)  评论(0编辑  收藏  举报