1.MyBaits 3.2 简介

MyBatis 介绍

1.1.1 Mybatis是什么?

Mybatis是一个基于jdbc的支持普通SQL、存储过程以及高级映射的持久化框架技术

mybatis原本叫ibatis,是Apache组织的一个项目。后来被托管到googlecode下,并且改名为mybatis,当然mybatis和ibatis不只是改了个名字,它在ibatis的基础之上更是优化了一些东西,使程序员更容易学习和使用mybatis。现在mybatis被托管到github。

1.1.2 为什么学习mybatis?

  • 首先要知道mybatis在项目中的使用是处于哪一层?

Dao数据访问层

  • Dao层已经有jdbc和hibernate技术了,为啥还学习mybatis?

有两个方面考虑:

1、原生态jdbc程序存在问题;

2、Hibernate框架有些场景不好用。

1.1.3  分析原生态jdbc程序中存在的问题

Mybatis是对JDBC的一种封装,我们看看jdbc存在哪些问题,为什么要封装它。

1.1.4 Jdbc程序代码

public static void main(String[] args) {

Connection connection = null;

PreparedStatement preparedStatement = null;

ResultSet resultSet = null;

try {

//1、加载数据库驱动

Class.forName("com.mysql.jdbc.Driver");

//2、通过驱动管理类获取数据库链接

connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");

//3、定义sql语句 ?表示占位符

Stringsql = "select * from user whereusername = ?";

//4、获取预处理statement

preparedStatement = connection.prepareStatement(sql);

//5、设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值

preparedStatement.setString(1, "王五");

//6、向数据库发出sql执行查询,查询出结果集

resultSet = preparedStatement.executeQuery();

//7、遍历查询结果集

while(resultSet.next()){

System.out.println(resultSet.getString("id")+"  "+resultSet.getString("username"));

}

} catch (Exception e) {

e.printStackTrace();

}finally{

//8、释放资源

if(resultSet!=null){

try {

resultSet.close();

} catch (SQLException e){

// TODO Auto-generatedcatch block

e.printStackTrace();

}

}

if(preparedStatement!=null){

try {

preparedStatement.close();

} catch (SQLException e) {

// TODO Auto-generatedcatch block

e.printStackTrace();

}

}

if(connection!=null){

try {

connection.close();

} catch (SQLException e) {

// TODO Auto-generatedcatch block

e.printStackTrace();

}

}

}

}


1.1.5 Jdbc编程步骤(预处理preparedStatement)

1、  加载数据库驱动;
2、  通过驱动管理器创建数据库连接;
3、  编写业务SQL语句,并设置占位符;
4、  通过数据库连接创建PreparedStatement;
5、  通过PreparedStatement设置预处理SQL的参数;
6、  执行PreparedStatement;
7、  遍历并输出结果集信息;
8、  关闭连接等资源信息。
1.1.6     Jdbc问题总结

1、加载数据库驱动,存在硬编码;

2、通过驱动管理器创建数据库连接,存在硬编码。且频繁的创建数据库连接,会造成数据库的性能降低;

3、编写业务SQL,并设置占位符,存在硬编码;

4、  没毛病;

5、通过PreparedStatement设置预处理SQL的参数,存在硬编码;

6、  没毛病;

7、遍历并输出结果集信息,存在硬编码;

8、频繁的关闭数据库连接,会造成数据库的资源浪费且会造成数据库的性能降低。

1.1.7   Mybatis可以解决jdbc的问题

MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

如何解决jdbc的问题:

一、Jdbc编程步骤中的1、2、8,mybatis通过SqlMapConfig.xml配置来进行管理,并采取了连接池来获取连接,避免了资源的频繁创建与关闭。

二、jdbc编程步骤中的3、5、7,mybatis通过mapper映射文件来让程序员进行SQL的编写,参数的设置以及结果集的映射。


1.1.8 Mybatis和hibernate的不同特点及各自应用场景

是不是只有mybatis可以解决jdbc的问题呢?当然不是,hibernate也可以解决JDBC的这些问题。那既然有可以解决jdbc问题的持久层框架了,为什么还要学mybatis呢?

下面讲解一下mybatis和hibernate各自的技术特点及最佳应用场景。

Mybatis技术特点:

1、  通过直接编写SQL语句,可以直接对SQL进行性能的优化;

2、  学习门槛低,学习成本低。只要有SQL基础,就可以学习mybatis,而且很容易上手;

3、  由于直接编写SQL语句,所以灵活多变,代码维护性更好。

4、  不能支持数据库无关性,即数据库发生变更,要写多套代码进行支持,移植性不好。

5、  需要编写结果映射。

Hibernate技术特点:

1、  标准的orm框架,程序员不需要编写SQL语句。

2、  具有良好的数据库无关性,即数据库发生变化的话,代码无需再次编写。

3、  学习门槛高,需要对数据关系模型有良好的基础,而且在设置OR映射的时候,需要考虑好性能和对象模型的权衡。

4、  程序员不能自主的去进行SQL性能优化。

Mybatis应用场景:

需求多变的互联网项目,例如电商项目。

Hibernate应用场景:

需求明确、业务固定的项目,例如OA项目、ERP项目等。

时间: 2024-10-12 03:55:02

1.MyBaits 3.2 简介的相关文章

mybaits别名简介

typeAliases 别名 1.1      需求 在mapper.xml中,定义很多的statement,statement需要parameterType指定输入参数的类型.需要resultType指定输出结果的映射类型. 如果在指定类型时输入类型全路径,不方便进行开发,可以针对parameterType或resultType指定的类型定义一些别名,在mapper.xml中通过别名定义,方便开发. 1.2     mybatis默认支持别名 别名 映射的类型 _byte byte _long

Sping Boot + Spring Security + Mybaits + Logback + JWT验证项目开发框架搭建

简介 本文介绍Sping Boot + Spring Security + Mybaits + Logback 项目开发框架搭建过程,并且实现JWT验证,代码已上传到github,地址在文章最后可以直接下载代码. 搭建过程 1 建立工程 工程目录如下: 2 上传至GitHub 使用Git shell 进入文件夹 添加远程仓库 上传到远程仓库 如果提示这个错误 Permission denied(publickey) 需要将本地ssh key添加到仓库 首先产生本地sshkey 将本地sshkey

讲解mybaits的标签语法

前言:mybatis作为一个持久层的java框架,高度封装了jdbc原始代码,它拥有比Hiberante更便捷.更直接的sql语法和sql灵活配置的特性,比如简单的一个自动映射对象就大大减少了我们的代码,想起以前的时候,jdbc查询出来的数据,通过遍历ResultSet,然后再一个个的set进预置好的对象里,真的是大大减少了重复没有意义的代码.毫无疑问,myabits已经跻身于持久层框架的第一位,目前公司开发的项目大多摒弃Hiberanate,大势所趋为mybaits.今天我们就来聚焦myabi

[转] Druid简介(Spring Boot + Mybatis + Druid数据源【自己定制】)

Druid的简介Druid是一个非常优秀的数据库连接池.在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBoss DataSource. Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验. Druid是一个JDBC组件,它包括三个部分: 基于Filter-Chain模式的插件体系. DruidDataSource 高效可管理的数据库连接池. SQLParser Druid的功能兼容DBCPDruid提

Android网络通讯简介

网络通信应该包含三部分的内容:发送方.接收方.协议栈.发送方和接收方是参与通信的主体,协议栈是发送方和接收方进行通信的契约.按照服务类型,网络通信可分为面向连接和无连接的方式.面向连接是在通信前建立通信链路,而通信结束后释放该链路.无连接的方式则不需要在通信前建立通信连接,这种方式不保证传输的质量. Android提供了多种网络通信的方式,如Java中提供的网络编程,在Android中都提供了支持.Android中常用的网络编程方式如下: 针对TCP/IP协议的Socket和ServerSock

微信红包的架构设计简介

@来源于QCon某高可用架构群整理,整理朱玉华. 背景:有某个朋友在朋友圈咨询微信红包的架构,于是乎有了下面的文字(有误请提出,谢谢) 概况:2014年微信红包使用数据库硬抗整个流量,2015年使用cache抗流量. 微信的金额什么时候算? 答:微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储.. 采取实时计算金额的考虑:预算需要占存储,实时效率很高,预算才效率低. 实时性:为什么明明抢到红包,点开后发现没有? 答:2014年的红包一点开就知道金额,分两次操作

JSON 简介

ylbtech-JSON: JSON 简介 JSON:JavaScript Object Notation(JavaScript 对象表示法) JSON是存储和交换文本信息的语法,类似 XML. JSON 比 XML 更小.更快.更易解析. JSON 实例 { "employee":[ {"firstName":"John","lastName":"Doe"}, {"firstName"

Docker简介

Docker简介 什么是Docker: 正所谓Docker的英文本意为"搬运工",所以在我们的世界里,可以理解为Docker搬运的是装满任意类型的APP的集装箱,开发者可以通过Docker将APP变成一种标准化的.可移动植的.自动管理的组件.它用一种新的方式实现了轻量级的虚拟机,专业术语成为应用容器(Application Container) Docker的优势: 1.利用率高 ·Docker对系统资源的利用率很高,一台主机可以同时运行数千个Docker容器 2.可以快速的交付应用程

kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)

问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的原因是什么? 3.kafka集群consumer和producer状态信息是如何保存的? 4.partitions设计的目的的根本原因是什么? 一.入门 1.简介 Kafka is a distributed,partitioned,replicated commit logservice.它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现.k