- 框架:实际上就是制作软件的半成品。
通过框架可以省略很多的代码。
- 框架分层:
控制层(表示层)
Servlet+jsp
Struts2
业务层
JavaBean
Spring
持久层
dao
MyBatis、hibernate(对数据库操作,代替JDBC)
- 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
- MyBatis的特点:
支持自定义SQL映射;
支持存储过程及一些高级映射;
支持两种配置方式,分别是:Annotation(注解)和XML
- MyBatis与ibatis的关系:
MyBatis和ibatis是一个框架,3.0以前的版本名叫做ibatis。
- 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>
- Dao层的创建方式:
(1)dao类+xml映射文件;
(2)dao接口+annotation配置 (零配置);session.getMapper(DeptDao.class);
(缺点:编译后更改sql语句需要重新编译)
(3)dao接口+xml映射文件
(优点:编译后更改sql语句不需要重新编译,在映射文件中更改即可)
- log4j
专用于java的日志输出工具,mybatis支持log4j,我们如果需要显示调试信息,只需要在src下增加一个名为log4j.xml,或log4j.properites的配置即可;
使用步骤
1.在src下添加事先准备好的log4j.properites
2.在Configuration核心配置文件中增加日志配置
<settings>
<setting name="logImpl" value="log4j" />
</settings>
- 单元测试
Junit;
专门用于java单元测试的开源组件;而且myelclipse已经集成了JUnit;
@Test:代表当前方法是测试方法,一个测试用例中可以有多个测试方法;
- 空值的处理:
空 值的处理
只需要在sql映射语句中加入,[jdbcType=数据类型]即可;
例如:
insert into emp(empno,ename,job,sal)
values(sq_emp.nextval,#{ename},#{job,jdbcType=VARCHAR},#{sal})
- 结果映射
①多对一映射
先定义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>
- 动态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>
常用框架之MyBatis
最新推荐文章于 2023-05-12 09:22:59 发布