01.【MyBatis框架】
1. 前提
什么是框架
它是我們軟件開發中的一套解決方案,不同的框架解決的是不同的問題。
使用框架的好處:框架封裝了很多的細節,使開發者可以使用極簡的方式實現功能。大大提高開發效率。
三層架構
- 表現層:是用于展示數據的
- 業務層:是處理業務需求
- 持久層:是和數據庫交互的
持久層技術解決方案
-
JDBC技術:
Connection
、PreparedStatement
、ResultSet
-
Spring的JdbcTemplate:Spring中對jdbc的簡單封裝
-
Apache的DBUtils:它和Spring的JdbcTemplate很像,也是對Jdbc的簡單封裝
以上這些都不是框架
-
JDBC是規范
-
Spring的JdbcTemplate和Apache的DBUtils都只是工具類
2. mybatis的概述
mybatis是一個持久層框架,用java編寫的。
它封裝了jdbc操作的很多細節,使開發者只需要關注sql語句本身,而無需關注注冊驅動,創建連接等繁雜過程
它使用了ORM思想實現了結果集的封裝。
四大部分組成
mybatis的分析
ORM:對象關系映射
Object Relational Mappging
簡單的說:就是把數據庫表和實體類及實體類的屬性對應起來,讓我們可以操作實體類就實現操作數據庫表。
user User
id userId
user_name userName
今天我們需要做到,,實體類中的屬性和數據庫表的字段名稱保持一致。
user User
id id
user_name user_name
3. 入門
環境搭建
- 創建maven工程并導入坐標
- 創建實體類和dao的接口
- 創建Mybatis的主配置文件:
SqlMapConifg.xml
- 創建映射配置文件:
IUserDao.xml
測試類步驟
第一步:讀取配置文件
第二步:創建SqlSessionFactory工廠
第三步:創建SqlSession
第四步:創建Dao接口的代理對象
第五步:執行dao中的方法
第六步:釋放資源
目錄結構
注意事項
-
創建IUserDao.xml 和 IUserDao.java時名稱是為了和我們之前的知識保持一致。
在Mybatis中它把持久層的操作接口名稱和映射文件也叫做:Mapper
所以:IUserDao 和 IUserMapper是一樣的
-
在idea中創建目錄的時候,它和包是不一樣的
包在創建時:com.itheima.dao它是三級結構
目錄在創建時:com.itheima.dao是一級目錄 (不能一起創建!)
-
mybatis的映射配置文件位置必須和dao接口的包結構相同
-
映射配置文件的mapper標簽namespace屬性的取值必須是dao接口的全限定類名
-
映射配置文件的操作配置(select),id屬性的取值必須是dao接口的方法名
-
不要忘記在映射配置中告知mybatis要封裝到哪個實體類中
配置的方式:指定實體類的全限定類名
當我們遵從了第三,四,五點之后,我們在開發中就無須再寫dao的實現類。
基礎代碼
- pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.luis</groupId>
<artifactId>day01_01mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<!--打包方式-->
<packaging>jar</packaging>
<dependencies>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!--log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<!--Junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!--只在測試時起作用-->
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!--jdk編譯插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.9</source>
<target>1.9</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
- domain包
package cn.luis.domain;
import java.io.Serializable;
import java.util.Date;
/**
* @ClassName User
* @Description TODO
* @Author L
* @Date 2020.02.28 17:24
* @Version 1.0
* @Remark TODO
**/
public class User implements Serializable {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
// 省略...
}
}
- dao包
package cn.luis.dao;
import cn.luis.domain.User;
import java.util.List;
/**
* @InterfaceName IUserDao
* @Description 用戶的持久層接口
* @Author L
* @Date 2020.02.28 18:54
* @Version 1.0
* @Remark TODO
**/
public interface IUserDao {
/**
* @Description 查詢所有操作
* @Author Luis
* @Date 2020.02.28 18:56
* @Param []
* @Return java.util.List<cn.luis.domain.User>
**/
List<User> findAll();
}
- 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">
<!--mybatis的主配置文件-->
<configuration>
<!--配置環境-->
<environments default="mysql">
<!--配置mysql環境-->
<environment id="mysql">
<!--配置事務的類型-->
<transactionManager type="JDBC"></transactionManager>
<!--配置數據源(連接池)-->
<dataSource type="POOLED">
<!-- 配置連接數據庫的4個基本信息 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--指定映射配置文件的位置,映射配置文件的是每個dao獨立的配置文件-->
<mappers>
<mapper resource="cn/luis/dao/IUserDao.xml"/>
</mappers>
</configuration>
- IUserDao.xml
-
【namespace】用于綁定Dao接口的,即面向接口編程
它的好處在于當使用了namespace之后就可以不用寫接口實現類,
業務邏輯會直接通過這個綁定尋找到相對應的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">
<mapper namespace="cn.luis.dao.IUserDao">
<!--配置查詢所有 id:方法名稱 resultType:把結果集封裝到哪里去-->
<select id="findAll" resultType="cn.luis.domain.User">
/*sql語句*/
select * from user
</select>
</mapper>
- 測試類
代碼:
package cn.luis.test;
import java.io.InputStream;
import java.util.List;
import cn.luis.dao.IUserDao;
import cn.luis.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
* @ClassName MyBatisTest
* @Description mybatis入門案例
* @Author L
* @Date 2020.02.28 20:00
* @Version 1.0
* @Remark TODO
**/
public class MyBatisTest {
/**
* @Description 入門案例
* @Author Luis
* @Date 2020.02.28 20:01
* @Param [args]
* @Return void
**/
public static void main(String[] args) throws Exception {
//1.讀取配置文件 (讀取連接數據庫的信息)
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.創建SqlSessionFactory工廠 (工廠生產操作對象)
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
// 3.使用工廠生產SqlSession對象
SqlSession session = factory.openSession();
// 4.使用SqlSession創建Dao接口的代理對象 (session根據字節碼文件生成代理對象)
IUserDao dao = session.getMapper(IUserDao.class);
// 5.使用代理對象執行方法
List<User> users = dao.findAll();
for (User user : users) {
System.out.println(user);
}
// 6.釋放資源
session.close();
in.close();
}
}
結果:
User{id=41, username='老王', birthday=Tue Feb 27 17:47:08 CST 2018, sex='男', address='北京'}
User{id=42, username='小二王', birthday=Fri Mar 02 15:09:37 CST 2018, sex='女', address='北京金燕龍'}
User{id=43, username='小二王', birthday=Sun Mar 04 11:34:34 CST 2018, sex='女', address='北京金燕龍'}
User{id=45, username='mybatis updateuser', birthday=Sun Mar 01 01:14:18 CST 2020, sex='女', address='沈陽'}
User{id=46, username='老王', birthday=Wed Mar 07 17:37:26 CST 2018, sex='男', address='北京'}
User{id=48, username='小馬寶莉', birthday=Thu Mar 08 11:44:00 CST 2018, sex='女', address='北京修正'}
User{id=50, username='mybatis last insertid', birthday=Sun Mar 01 02:18:02 CST 2020, sex='男', address='沈陽'}
User{id=51, username='mybatis last insertid', birthday=Sun Mar 01 21:21:08 CST 2020, sex='男', address='沈陽'}
智能推薦
01.初識ROS
目錄 1.1 ROS是什么 1.1.1 ROS的起源 1.1.2 ROS的設計目標 1.1.3 ROS的特點 1.2 如何安裝ROS 1.2.1 操作系統和ROS版本選擇 1.2.2 配置系統軟件源(Ubuntu 軟件倉庫) 1.2.3 添加ROS軟件源(修改sources.list) 1.2.4 添加公鑰 1.2.5 安裝ROS 1.2.6 初始化 rosdep 1.2.7 設置環境變量 1.2...
01.初識Python
系列文章目錄 提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動添加 例如:第一章 Python 機器學習入門之pandas的使用 提示:寫完文章后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 系列文章目錄 前言 一、pandas是什么? 二、使用步驟 1.引入庫 2.讀入數據 總結 初識Python Python簡介 Python的歷史 Python的優缺點 Python...
01.初識Java
** 第一本 java基礎 ** 初始java,數據類型和運算符,流程控制,方法/數組,String,類,awt/swing圖形界面,面向對象三大特性繼承封裝多態,接口和抽象類,包和權限 ----完成一個圖形化的項目游戲項目 今天的目標: 了解計算機語言,java發展史,java特點,jvm的原理 掌握jdk的下載安裝,環境變量的設置以及環境變量含義,HelloWorld ** 一、計算機語言(了...
01. 初識Django
Django 一、web應用 1、web應用 2、bs、cs架構 二、基于socket寫一個web應用 1、main.py 2、index.html 3、http協議 4、請求協議(瀏覽器發出來的) 5、響應協議 6、響應狀態碼 四、URL簡介 五、web框架 1、wsgiref模塊 六、Django與其他web框架的區別 一、web應用 1、web應用 2、bs、cs架構 優點: 總結: 二、基...
01.初識Shell
Shell 什么是shell? shell是位于操作系統和應用程序之間,是他們二者最主要的接口,shell負責把應用程序的輸入命令信息解釋給操作系統,將操作系統指令處理后的結果解釋給應用程序。 我們常說的shell是命令行式的shell,在工作中常用的是linux系統下的bash。 shell 是 命令解釋器 創建shell腳本 腳本創建工具 vi/vim 腳本命名 見名知意: 以.sh結尾 腳本...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...