Mybatis入门(一)
学习Mybatis的过程(一)
- 什么是Mybatis
- 原生jdbc开发的总结
- Mybatis框架的流程图
- Mybatis的学习思路
1.什么是Mybatis
Mybatis是一个持久层的框架,开源的的,是Apache下的一个顶级项目,现在这个项目托管到github里面了。点击传送门查看这个开源项目。
Mybatis让程序员把主要的精力放在sql上,自己编写sql,根据需要去灵活的编写。
官网的解释:
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
2.原生jdbc开发的总结
先看一段代码:
Class Test{public static void main(String[] args) {//数据库连接Connection connection = null;//预编译的Statement,使用预编译的Statement提高数据库性能PreparedStatement preparedStatement = null;//结果 集ResultSet resultSet = null;try {//加载数据库驱动Class.forName("com.mysql.jdbc.Driver");//通过驱动管理类获取数据库链接connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "mysql");//定义sql语句 ?表示占位符String sql = "select * from user where username = ?";//获取预处理statementpreparedStatement = connection.prepareStatement(sql);//设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值preparedStatement.setString(1, "王五");//向数据库发出sql执行查询,查询出结果集resultSet = preparedStatement.executeQuery();//遍历查询结果集while(resultSet.next()){System.out.println(resultSet.getString("id")+" "+resultSet.getString("username"));}} catch (Exception e) {e.printStackTrace();}finally{//释放资源if(resultSet!=null){try {resultSet.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(preparedStatement!=null){try {preparedStatement.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(connection!=null){try {connection.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
单独使用jdbc开发存在的问题:主要是
数据库连接和硬编码的问题
1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能。
设想:使用数据库连接池管理数据库连接。
2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。
3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
设想:将sql语句及占位符号和参数全部配置在xml中。
4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。
设想:将查询的结果集,自动映射成java对象。
3.Mybatis框架的流程图
1.SqlMapConfig.xml
是mybatis的全局配置文件,名称不固定的。
配置数据源等,配置映射文件(配置sql语句)
2.SqlSessionFactory
会话工厂,根据配置文件来创建工厂,创建SqlSession
3.SqlSession
会话,只一个接口,面向用户(程序员),操作数据库
4.Excutor
执行器,是一个接口(基本执行器,缓存执行器),作用是SqlSession内部通过执行器操作数据库。
5.mapped statemnt
底层封装对象,作用对数据库存储封装,包括sql语句,输入参数,输出结果类型
6.输入参数类型
java简单类型,pojo自定义,hashmap
7.输出结果类型
java简单类型,pojo自定义,hashmap
4.Mybatis的学习重点
Mybatis开发Dao的两种方法
原始的dao开发(程序需要编写dao接口和dao的实现类) (掌握)
Mybatis的mapper接口(相当于dao接口)代理的开发(掌握)
Mybatis的SqlMapConfig.xml配置(全局的配置文件)
Mybatis的核心
Mybatis的输入映射(掌握)
Mybatis的输出映射(掌握)
Mybatis的动态sql(掌握)
高级映射
高级缓存
spring和mybatis整合
逆向工程
Mybatis入门(一)相关推荐
- Mybatis入门之动态sql
Mybatis入门之动态sql 通过mybatis提供的各种标签方法实现动态拼接sql. 1.if.where.sql.include标签(条件.sql片段) <sql id="sel ...
- MyBatis1:MyBatis入门
MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence fra ...
- MyBatis(1):MyBatis入门
MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence fra ...
- MyBatis-学习笔记02【02.Mybatis入门案例】
Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...
- mybatis入门(七)之日志
转载自 mybatis入门(七)之日志 Mybatis 的内置日志工厂提供日志功能,内置日志工厂将日志交给以下其中一种工具作代理: SLF4J Apache Commons Logging Lo ...
- mybatis入门(一)之基础安装
转载自 mybatis入门 安装 要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可. 如果使用 Maven 来构建项目,则需将下面的 dep ...
- Mybatis入门程序增删改查操作
学习目标 了解Mybatis的基本知识 熟悉Mybatis的工作原理 掌握Mybatis入门程序的编写 文章目录 1.初始Mybatis 2.Mybatis入门程序 3.Mybatis操作总结 1.初 ...
- Mybatis入门 使用注解
使用XML方式地址为Mybatis入门 使用XML 1.目录结构 2.需要修改的地方 1.mybatis的配置文件 <?xml version="1.0" encoding= ...
- Mybatis入门 使用XML
1.项目结构 2.详细代码 数据库: 1.创建实体类bean package com.itheima.domain;import java.io.Serializable; import java.u ...
- MyBatis入门(二)---一对一,一对多
一.创建数据库表 1.1.创建数据表同时插入数据 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.6.27-log : Database - mybati ...
最新文章
- python【数据结构与算法】A - How Many Tables
- 为什么黑客用python-为什么如此多的黑客都用python?
- Python+selenium 自动化-chrome驱动的下载安装
- oracle9i解密rewrap,ORACLE9I+DATAGUARD+RMAN
- VHDL程序基本构建
- mynt product model: D1000-IR-120标定相机和IMU外参之二
- c51单片机led奇数偶数亮_两STM32单片机串口通讯实验
- python a and b_python-尽管Numpy建议a.b,为什么a.dot(b)比a @ b更...
- 【PAT - 甲级1003】Emergency (25分)(Dijkstra,最短路条数,双权值最短路)
- 学习MySQL / MariaDB初学者 - 第1部分
- (转)使用异步Python 3.6和Redis编写快速应用程序
- 嵌入式开发笔记(二)嵌入式系统启动过程 (S5pv210)
- java case 语句_ECMAScript switch 语句
- 1.2 xss原理分析与剖析(3)
- StatX 获250万美元融资,随时随地通知公司业务变化
- 腾讯翻译君在线翻译怎么翻译整个文件_What?还能翻译年报?!
- 利用WPF做出的简单界面布局一
- Linux如何安装pcre
- 实验四 C程序的编译和调试(Linux基础教程 第2版)
- Word2vec使用手册
热门文章
- https://www.cnblogs.com/jingmoxukong/p/7755643.html
- c++ httpserver 服务器
- Confluence 6 CSS 指南:修改顶部背景
- 用msvdm.dll文件实现微软的虚拟桌面
- [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)
- VS2010下测试程序性能瓶颈
- android 中 DOM解析xml
- 哪里是我们最好的避风港?
- JavaScript ES2021 新特性解析
- OSPF——路由聚合【(汇总)含配置命令】||地址汇总计算方法——详解