Mybatis框架 ---- 动态代理

动态代理



前言

什么是三层架构
在项目开发中,遵循的一种形式模式.分为三层.
1)界面层:用来接收客 户端的输入,调用业务逻辑层进行功能处理,返回结果给客户端.过去的servlet就是界面层的功能.
2)业务逻辑层:用来进行整个项目的业务逻辑处理,向上为界面层提供处理结果,向下问数据访问层要数据.
3)数据访问层:专门用来进行数据库的增删改查操作,向上为业务逻辑层提供数据.


提示:以下是本篇文章正文内容,下面案例可供参考

一、Mybatis是什么?

1.1 Mybatis概念

MyBatis 本是 apache 的一个开源项目iBatis, 2010 年这个项目由 apache software foundation 迁移到了 google code,并且改名为 MyBatis 。2013 年 11 月迁移到 Github,最新版本是 MyBatis 3.5.7 ,其发布时间是 2021 年 4月 7日。

MyBatis完成数据访问层的优化.它专注于sql语句.简化了过去JDBC繁琐的访问机制.

1.2 Mybatis结构

来自动力节点
该图来自动力节点

mybatis配置

1.SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

构造会话

2、 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
3、 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

底层隐藏的实现

4、 mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
5、 Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
6、 Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
7、 Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

1.3 MyBatis对象分析

  1. Resources 类,顾名思义就是资源,用于读取资源文件。其有很多方法通过加载并解析资源文件,返回不同类型的 IO 流对象。
  1. SqlSessionFactory 的 创 建 , 需 要 使 用 SqlSessionFactoryBuilder 对 象 的 build() 方 法 。 由 于SqlSessionFactoryBuilder对象在创建完工厂对象后,就完成了其历史使命,即可被销毁。所以,一般会将该 对象创建为一个方法内的局部对象,方法结束,对象销毁。
  2. SqlSessionFactory 接口对象是一个重量级对象(系统开销大的对象),是线程安全的,所以一个应用只需要一个该对象即可。创建 SqlSession 需要使用 SqlSessionFactory 接口的的 openSession() 方法。
    A. openSession(true):创建一个有自动提交功能的 SqlSession
    B. openSession(false):创建一个非自动提交功能的 SqlSession(手动提交)
    C.openSession():同 openSession(false)
  3. SqlSession 接口对象用于执行持久化操作。一个 SqlSession 对应着一次数据库会话,一次会话以SqlSession 对象的创建开始,以 SqlSession 对象的关闭结束。
    SqlSession 接口对象是线程不安全的,所以每次数据库会话结束前,需要马上调用其 close()方法,将其关闭。再次需要会话,再次创建。 SqlSession 在方法内部创建,使用完毕后关闭。

二、动态代理

2.1 开发步骤

  1. 建表Users
  2. 新建maven工程,刷新可视化
  3. 修改目录
  4. 修改pom.xml文件,添加依赖
  5. 添加jdbc.propertis文件到resources目录下
  6. 添加SqlMapConfig.xml文件
  7. 添加实体类
  8. 添加mapper文件夹,新建UsersMapper接口
  9. 在mapper文件夹下,新建UsersMapper.xml文件,完成增删改查功能
  10. 添加测试类,测试功能

2.2 动态代理的实现规范

  1. UsersMapper.xml文件与UsersMapper.java的接口必须同一个目录下.(同一目录)
  2. UsersMapper.xml文件与UsersMapper.java的接口的文件名必须一致,后缀不管.(文件命名一致)
  3. UserMapper.xml文件中标签的id值与与UserMapper.java的接口中方法的名称完全一致.(id与接口方法一致)
  4. UserMapper.xml文件中标签的parameterType属性值与与UserMapper.java的接口中方法的参数类型完全一致.(parameterType表接口方法参数类型)
  5. UserMapper.xml文件中标签的resultType值与与UserMapper.java的接口中方法的返回值类型完全一致.(resultType表接口方法返回类型 增删改五返回值)
  6. UserMapper.xml文件中namespace属性必须是接口的完全限定名称com.bjpowernode.mapper.UsersMapper (实体类起别名可直接小写类名代替)
  7. 在SqlMapConfig.xml文件中注册mapper文件时,使用class=接口的完全限定名称com.bjpowernode.mapper.UsersMapper.

目录结构
                         (1)目录结构

数据访问层接口 UsersMapper

/**
 * 数据访问层接口
 */
public interface UsersMapper {
    //查询所有用户信息
    List<Users> getAll();
    //更新操作
    int update(Users users);
    //给出列名列值 进行查找
    List<Users> selectmore(
            @Param("cn")
            String Cname,
            @Param("cv")
            String Cvalue);
}

UsersMapper.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">
        
// 规范6 UserMapper.xml文件中namespace属性必须是接口的完全限定名称
<mapper namespace="com.bjpowernode.mapper.UsersMapper"> 
// 规范3 和 5 (id与接口方法一致) (resultType表接口方法返回类型 增删改五返回值)
    <select id="getAll" resultType="users" >
    select * from  users;
    </select>

    <update id="update" parameterType="users">
    //	返回主键标签
    //Order:指定生成返回主键的时机,AFTER:先插入再返回主键
    //                            BEFORE: 先生成再完成插入
    // keyProperty: 生成的主键放入到对象的哪个属性中
    	<selectKey order="AFTER" keyProperty="id" resultType="int">
            select LAST_INSERT_ID()
        </selectKey>
        update users
        set username=#{userName},birthday=#{birthday},sex=#{sex},address=#{address}
        where id=#{id};
    </update>
    
<!--      List<Users> selsectmore(String Cname,String Cvalue);-->
    <select id="selectmore" resultType="users">
        select *
        from users
        where ${cn} like concat('%',#{cv},'%')//模糊查询 concat函数
    </select>
</mapper>

SqlMapConfig.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>

    <!--读取属性文件中数据库的配置-->
    <properties resource="jdbc.properties"></properties>
    <!--设置日志输出语句,显示相应操作的sql语名-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <!--MyBatis框架会自动为每个实体类起别名为类型的全小写或类名的大小写混合.推荐使用类名的全小写-->
    <typeAliases>
        <package name="com.bjpowernode.pojo"></package>
    </typeAliases>
    
    <environments default="development">
        <environment id="development">
        
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClassName}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
            
        </environment>
    </environments>
    
    <!--SqlMapConfig.xml文件中注册XXXMapper.xml-->
    <mappers>
        <package name="com.bjpowernode.mapper"></package>
    </mappers>
</configuration>

2.3 #{}和${}

#{}是对非字符串拼接的参数的占位符
如果入参是简单数据类型,#{}里可以任意写,
但是如果入参是对象类型,则#{}里必须是对象的成员变量的名称,#{}可以有效防止sql注入。
$ {}主要是针对字符串拼接替换.
如果入参是基本数据类型,$ {}里必须是value,
但是如果入参是对象类型,则${}里必须是对象的成员变量的名称。
${}还可以替换列名和表名


  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
FCat是基于Angular4+SpringCloud的企业级基础功能框架(户权限管理、区域管理、GIS地图、......),其核心设计目标是分离前后端、开发快速、学习简单、功能强大、不重复造轮子,其目标是帮助企业搭建一套基础功能框架; 核心技术:angualr、Spring Cloud、OAuth2、jwt、Spring Cloud Security、Eureka、Zuul、Hystrix、Feign、Ribbon、Redis、Mybatis、Mysql。 功能: 1、用户管理 2、菜单管理 3、组织类型管理 4、组织架构管理————组织管理、关联用户、组织授权 5、数据字典 6、日志管理 前端技术:Angular; 支持angular2、4、5版本,UI使用AdminLTE; angular-cli TypeScript 组件 模板 模块 服务 依赖注入 动态路由 Http 后端技术:SpringCloud; 1、Eureka 服务器用作服务注册服务器。 一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。 2、Zuul 基于JVM路由和服务端的负载均衡器 类似nginx,反向代理的功能 3、Hystrix 提供了熔断、隔离、Fallback、cache、监控等功能,能够在一个、或多个依赖同时出现问题时保证系统依然可用。 4、Feign 是声明式、模板化的http客户端。旨在用最少的开销和代码将您的代码连接到http apis。 5、Ribbon 提供客户端的软件负载均衡算法 6、Redis 存储热点数据 7、Session redis存储热点、共享会话数据 8、Security 提供声明式的安全访问控制解决方案的安全框架 9、OAuth2 一种授权框架,提供了一套详细的授权机制。用户或应用可以通过公开的或私有的设置,授权第三方应用访问特定资源。 10、JWT 提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法。 令牌(Token)本身包含了一系列声明,应用程序可以根据这些声明限制用户对资源的访问。 11、Config 配置文件统一管理 开发环境: node-v6.11.0-x64.msi redis3.X jdk1.8 MySQL Server 5.6 maven3.X IntelliJ IDEA webstorm
zheng项目不仅仅是一个开发架构,而是努力打造一套从前端模板 - 基础框架 - 分布式架构 - 开源项目 - 持续集成 - 自动化部署 - 系统监测 - 无缝升级 的全方位J2EE企业级开发解决方案。 zheng项目是一个基于Spring+SpringMVC+Mybatis的分布式敏捷开发系统架构,它提供了整套公共微服务服务模块:集中权限管理(单点登录)、内容管理、支付中心、用户管理(支持第三方登录)、微信平台、存储系统、配置中心、日志分析、任务和通知等,支持服务治理、监控和追踪,努力为中小型企业打造全方位J2EE企业级开发解决方案。 模块介绍: zheng-common Spring+SpringMVC+Mybatis框架集成公共模块,包括公共配置、MybatisGenerator扩展插件、通用BaseService、工具类等。 zheng-admin 基于bootstrap实现的响应式Material Design风格的通用后台管理系统,zheng项目所有后台系统都是使用该模块界面作为前端展示。 zheng-ui 各个子系统前台thymeleaf模板,前端资源模块,使用nginx代理,实现动静分离。 zheng-upms 本系统是基于RBAC授权和基于用户授权的细粒度权限控制通用平台,并提供单点登录、会话管理和日志管理。接入的系统可自由定义组织、角色、权限、资源等。用户权限=所拥有角色权限合集+用户加权限-用户减权限,优先级:用户减权限>用户加权限>角色权限 zheng-oss 文件存储系统,提供四种方案:阿里云 OSS、腾讯云 COS、七牛云和本地分布式存储。 zheng-api 服务网关,对外暴露统一规范的接口和包装响应结果,包括各个子系统的交互接口、对外开放接口、开发加密接口、接口文档等服务,可在该模块支持验签、鉴权、路由、限流、监控、容错、日志等功能。 zheng-cms 内容管理系统:支持多标签、多类目、强大评论的内容管理,有基本单页展示,菜单管理,系统设置等功能。 zheng-pay 一站式支付解决方案,统一下单接口,支持支付宝、微信、网银等多种支付方式。不涉及业务的纯粹的支付平台。 统一下单(统一下单接口、统一扫码)、订单管理、数据分析、财务报表、商户管理、渠道管理、对账系统、系统监控。 zheng-ucenter 通用用户管理系统, 实现最常用的用户注册、登录、资料管理、个人中心、第三方登录等基本需求,支持扩展二次开发。 zheng-wechat-mp 微信公众号管理平台,除实现官网后台自动回复、菜单管理、素材管理、用户管理、消息群发等基础功能外,还有二维码推广、营销活动、微网站、会员卡、优惠券等。 zheng-wechat-app 微信小程序后台 zheng-message 基于Netty实现SocketIO的实时推送系统。支持命名空间、二进制数据、SSL、ACK等功能。 环境搭建 开发工具: MySql:数据库 jetty:开发服务器 Tomcat:应用服务器 SVN|Git:版本管理 Nginx:反向代理服务器 Varnish:HTTP加速器 IntelliJ IDEA:开发IDE PowerDesigner:建模工具 Navicat for MySQL:数据库客户端 开发环境: Jdk7+ Mysql5.5+ Redis Zookeeper ActiveMQ Dubbo-admin Dubbo-monitor

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GGood_Name

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

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

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

打赏作者

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

抵扣说明:

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

余额充值