常用框架之MyBatis

    1. 框架:实际上就是制作软件的半成品。

         通过框架可以省略很多的代码。

    1. 框架分层:

    控制层(表示层)

    Servlet+jsp

    Struts2

    业务层

    JavaBean

    Spring

    持久层

    dao

    MyBatis、hibernate(对数据库操作,代替JDBC)

    1. MyBatis是一个基于ORM(Object Relationship Mapping对象关系映射)的持久层框架,支持普通SQL查询,存储过程和高级映射的优秀持久层框架,它消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索。它还可以使用简单的XML或注解用于配置和原始映射,将接口和java的POJO映射成数据库的记录。

    编程语言:Java 面向对象(OOP)。

    数据库:关系型数据库(不面向对象)——Oracle。

    ORM框架可以自动将对象中存储的数据对应的存储值数据库中。

    MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。

    dao:数据传输对象

    po:持久化对象

    MyBatis使用简单的XML或注解用于配置和原始映射,将接口和java的POJO映射长数据库中的记录。

     

     

    Session.getMapper()方法参数为接口时使用了代理模式创建了一个此接口的代理类。Cglib.jar

    1. MyBatis的特点:

    支持自定义SQL映射;

    支持存储过程及一些高级映射;

    支持两种配置方式,分别是:Annotation(注解)和XML

    1. MyBatis与ibatis的关系:

    MyBatis和ibatis是一个框架,3.0以前的版本名叫做ibatis。

    1. MyBatis环境的搭建:

    1.导包(mybatis.jar,相关的包,数据库驱动 )

    2.创建核心配置文件(主要是数据源)Configuration.xml

    3.创建映射文件(映射的是SQL语句)DeptMapper

    核心配置文件——Configuration.xml

    <?xml version="1.0" encoding="UTF-8" ?>

    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

    "http://mybatis.org/dtd/mybatis-3-config.dtd">

    <configuration>

    <environments default="development">

    <environment id="development">

    <transactionManager type="JDBC"/>

    <dataSource type="POOLED">

    <property name="driver" value="${driver}"/>

    <property name="url" value="${url}"/>

    <property name="username" value="${username}"/>

    <property name="password" value="${password}"/>

    </dataSource>

    </environment>

    </environments>

    <mappers>

    <mapper resource="org/mybatis/example/BlogMapper.xml"/>

    </mappers>

    </configuration>

     

    映射文件——XxxMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>

    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

    <mapper namespace="org.mybatis.example.BlogMapper">

    <select id="selectBlog" parameterType="int" resultType="Blog">

    select * from Blog where id = #{id}

    </select>

    </mapper>

     

    1. Dao层的创建方式:

    (1)dao类+xml映射文件;

    (2)dao接口+annotation配置 (零配置);session.getMapper(DeptDao.class);

    (缺点:编译后更改sql语句需要重新编译)

    (3)dao接口+xml映射文件

    (优点:编译后更改sql语句不需要重新编译,在映射文件中更改即可)

    1. log4j

    专用于java的日志输出工具,mybatis支持log4j,我们如果需要显示调试信息,只需要在src下增加一个名为log4j.xml,或log4j.properites的配置即可;

    使用步骤

    1.在src下添加事先准备好的log4j.properites

    2.在Configuration核心配置文件中增加日志配置        

    <settings>

    <setting name="logImpl" value="log4j" />

    </settings>

    1. 单元测试

    Junit;

    专门用于java单元测试的开源组件;而且myelclipse已经集成了JUnit;

    @Test:代表当前方法是测试方法,一个测试用例中可以有多个测试方法;

    1. 空值的处理:

    空 值的处理

    只需要在sql映射语句中加入,[jdbcType=数据类型]即可;

    例如:

    insert into emp(empno,ename,job,sal)

    values(sq_emp.nextval,#{ename},#{job,jdbcType=VARCHAR},#{sal})

    1. 结果映射

    ①多对一映射

    先定义vo(例如定义Emp,在Emp中定义一个Dept属性,设置好setter and getter)

    编写映射语句,其中resultMap的值,是自定义的结果类型,需要使用ResultMap标记创建

    例如

    编写resultMap

    普通属性映射使用id result子标记

    多对一映射使用<association property="属性" javaType="这个属性的类型">

    在此标记中可以对[对象属性]进行映射

    <resultMap type="emp" id="myEmp">

    <id column="empno" property="empno" />

    <result column="ename" property="ename" />

    <result column="job" property="job" />

    <result column="sal" property="sal" />

     

    <association property="dept" javaType="com.oracle.vo.Dept">

    <id column="deptno" property="deptno" />

    <result column="dname" property="dname" />

    <result column="loc" property="loc" />

    </association>

     

    </resultMap>

    ②一对多映射(集合映射)

    <select id="getEmp" resultMap="myDept">

    //表连接查询

    </select>

    <resultMap type="dept" id="myDept">

    <id column="deptno" property="deptno" />

    <result column="dname" property="dname" />

    <result column="loc" property="loc" />

    <collection property="emps" ofType="emp">

    <id column="empno" property="empno" />

    <result column="ename" property="ename" />

    <result column="job" property="job" />

    <result column="sal" property="sal" />

    </collection>

    </resultMap>

    1. 动态sql

    <if test="条件">

    <where></where>

    用于条件语句,如果此标记中无内容,则不会出现where,如有内容,则会去掉第一个and 或 or

    <choose>

    <when></when>

    </choose>

    <set>

    支持最后一个逗号,只适用于update语句

    <trim  prefix >

    可以删除任何的前缀和后缀

     

    <foreach>

    用于遍历

    属性:open close item collection seperator index

    如果我们的参数类型是数组,则参数名称是array,如果参数类型是List,则形参名是list;

    <delete id="delete" parameterType="int[]">

    delete from emp where

    empno in

    <foreach collection="array" open="(" close=")" separator="," item="a">

    #{a}

    </foreach>

    </delete>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值