mybatis

三层架构:m层(模型层),v层(视图层),c层(控制层或表现层)

m层框架(持久层框架)

Mybatis Hibernate 都称之为持久层框架,主要目的就是连接数据库操作

v层(页面)

jsp+jstl+el

Html+angular.js

c层(表现层框架)

springmvc

Struts2

目的功能:主要是为了接传值和跳转页面使用,类似servlet功能

Spring(管理层框架)

Spring管理 mybatis,hibernate持久层框架。

持久化是程序在瞬时状态和持久状态间转换的过程。

mybatis  框架 :内存问题(瞬时状态) 持久状态(硬盘)

持久化操作:操作内存与硬盘之间的关系。

mybatis  是ORM框架:实体类和SQL语句之间建立映射关系。

ORM:1.编写程序的时候,以面向对象的方式处理数据    2.保存数据的时候,却以关系型数据库的方式存储。

ORM解决方案:

1.在持久化对象上执行基本的增、删、改、查操作。

2.对持久化对象提供一种查询语言或者API

3.对象关系映射工具(resultmap)

4.提供与事务对象交互、执行检查、延迟加载(lazy)以及其他优化功能(cache)

mybatis  概念:

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。 [1

充分说明,mybatis框架是一个优秀的常用的框架,mybatisjdbc的基础之上进行了二次封装。

Mybatis框架原理分析图:

sqlMapConfig.xml是Mybatis的核心配置文件

mapper.xml是每一个实体类对应的sql映射文件

SqlSessionFactory,称之为session工厂,采用工厂模式,目的是为了生成sqlSession对象,称之为二级缓存,对应的是数据库

sqlSession所有的操作都由sqlSession发出的,称之为一级缓存,对应的是实体类

Trancation事务,也是由sqlSession创建的,提交commit和回滚rollback

mappedStatement对象称之为执行对象,底层是preparedStatement预处理执行对象

 

1.jdbc操作:

必须有四个属性:Driver  url  name  password

第二步,利用反射机制加载驱动class.forName(driver)

第三步,DriverManager对象加入url,name,password从而获取connection连接对象

第四步,获取执行对象statement和preparedStatement

Mybatis与jdbc的区别:

1.jdbc里的所有代码都必须手动设置,mybatis里很多方法或者属性都已经进行了二次封装,使用的时候直接调用

2.Mybatis去除了jdbc很多冗余的代码

3.访问的速度Mybatis比jdbc效率高

4.使用Mybatis可以减少程序员的工作负荷,减少压力

5.在实际开发中都喜欢使用Mybatis框架作为持久层框架,易于维护。

创建mybatis里的核心配置文件(模版)

<?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>

   <!--引入外部文件的标签  -->

   <properties resource="properties/db.properties"></properties>

    <!-- 表示类型别名 库-->

    <typeAliases>

      <!-- 每一个类型的别名  type属性表示别名对应的类型地址 alias表示起的别名-->

      <typeAlias type="java.util.List" alias="list"/>

      <!-- package表示包,利用包的形式进行扫描包之下的所有的类,别名就是当前类名 -->

      <!-- <package name="com.kgc.pojo"/> -->

    </typeAliases>

   <!-- 作为连接数据库的环境 -->

   <!-- 环境配置 -->

    <environments default="development">

        <environment id="development">

        <transactionManager type="JDBC"/>

            <dataSource type="POOLED">

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

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

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

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

      <!--  <property name="driver" value="com.mysql.jdbc.Driver"/>

            <property name="url" value="jdbc:mysql://localhost:3306/school?characterEncoding=utf-8" />

            <property name="username" value="root"/>

            <property name="password" value="123"/> -->

            </dataSource>

        </environment>

    </environments>

  

    <!-- mappers表示代理模式扫描 ,目的主要是在当前配置文件中扫描到sql映射文件-->

   < <mappers>

      <mapper resource=""/>

    </mappers>

    <!-- plugins表示插件,主要是为了设置mybatis分页插件 -->

    <!-- 分页插件 -->

    <plugins>

       <plugin interceptor="com.github.pagehelper.PageInterceptor">  

          <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->

          <!-- pageNum表示当前页 pages表示尾页 -->

        <!-- true启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->

        <!-- false禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 --> 

            <property name="reasonable" value="true"/>

          </plugin>

    </plugins>

 

 </configuration>

sql映射文件解析(骨架)

注意;每一个pojo对应一个sql映射文件

<?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">

<!--代理扫描  namespace属性表示当前代理的命名空间,属性值一般情况下等于dao的接口类地址

   相当于dao接口实现类

-->

<mapper namespace="com.kgc.mapper.ProductMapper">

   <resultMap type="" id="">

  

   </resultMap>

   <!-- 表示查询标签 id属性表示当前标签的名称,属性值等于dao接口里的相对应的方法名称 -->

   <select id="">

      select * from product

   </select>

   <!-- 添加 -->

   <insert id="">

  

   </insert>

   <!-- 修改 -->

   <update id="">

  

   </update>

   <!-- 删除 -->

   <delete id="">

  

   </delete>

  

  

</mapper>

准备修改数据库并且修改db.properties

Mysql:

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/mall?characterEncoding=utf-8

jdbc.username=root

jdbc.password=123

Oracle:

#驱动名称
jdbc.driver=oracle.jdbc.driver.OracleDriver
#资源
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
#用户名
jdbc.username=admin64
#密码
jdbc.password=123456

 

修改sqlMapConfig.xml文件
 

 <configuration>

   <!--引入外部文件的标签  -->

   <properties resource="properties/db.properties"></properties>

    <!-- 表示类型别名 库-->

    <typeAliases>

      <!-- 每一个类型的别名  type属性表示别名对应的类型地址 alias表示起的别名-->

      <typeAlias type="com.kgc.pojo.Product" alias="prodcut"/>

    </typeAliases>

   <!-- 作为连接数据库的环境 -->

   <!-- 环境配置 -->

    <environments default="development">

        <environment id="development">

        <transactionManager type="JDBC"/>

            <dataSource type="POOLED">

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

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

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

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

      <!--  <property name="driver" value="com.mysql.jdbc.Driver"/>

            <property name="url" value="jdbc:mysql://localhost:3306/school?characterEncoding=utf-8" />

            <property name="username" value="root"/>

            <property name="password" value="123"/> -->

            </dataSource>

        </environment>

    </environments>

  

    <!-- mappers表示代理模式扫描 ,目的主要是在当前配置文件中扫描到sql映射文件-->

   <mappers>

      <mapper resource="mapper/ProductMapper.xml"/>

    </mappers>

 </configuration>

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

brid_fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值