Mybatis框架簡介與簡單應用
框架簡介
Mybatis原名是ibatis,是apache的開源專案,是一個持久層的框架,與資料庫進行互動,將資料持久化到關係型資料庫中,目前託管在 github中;
原理簡介
java中通過JDBC對資料庫進行操作,JDBC是一套資料庫的訪問介面,mybatis持久層框架對JDBC進行了封裝; 與Hibernate不同的是,mybatis需要程式設計師自己編寫sql,進而相對於ORM(物件關係對映)框架而言更加的靈活,更加易於優化 主要完成以下兩個功能
- 輸入對映:將java物件對映到statement中,即sql語句的輸入引數;
- 輸出對映:將sql語句的執行結果對映成java物件;
產生的原因
如果直接使用jdbc進行程式設計的話,主要面臨以下問題:
- 程式中存在硬編碼(資料庫驅動假愛,建立資料連線,Sql語句),不利於系統維護
- Mybatis解決的方法是將這些全部寫在’.xml’配置檔案中
- 資料庫連線使用時會頻繁的開關資料連線,造成資源浪費
- 解決方法是使用連線池
- 向preparedStatement設定引數時 將引數下標 號(從1開始)硬編碼在程式碼,並且將向佔位符號設定的引數也硬編碼了。
- 設想解決方案:可以自動通過程式將java型別物件對映到preparedStatement中。
- 從Resultset中取出結果集進行遍歷,將列名硬編碼
- 設想解決方案:可以自動通過程式將sql查詢結果集對映到時java物件中,自動完成將sql查詢的列值構造成一個java物件。
環境搭建
- 下載地址:下載mybatis
- 檔案介紹
- mybatis-3.2.7.jar:mybatis的核心包
- lib:mybatis的依賴包
- mybatis-3.2.7:mybatis使用手冊
- 用eclipse建立一個java工程
- 在mysql中建立一個數據庫並新建表格,插入測試資料
- 建立資料表
CREATE
- 插入測試資料
insert into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (1,'王五',NULL,'2',NULL),(10,'張三','2014-07-10','1','北京市'),(16,'張小明',NULL,'1','河南鄭州'),(22,'陳小明',NULL,'1','河南鄭州'),(24,'張三丰',NULL,'1','河南鄭州'),(25,'陳小明',NULL,'1','河南鄭州'),(26,'王五',NULL,NULL,NULL);
- 建立資料表
- 在java工程中建立一個對應的實體類
- java程式碼如下
package cn.itcast.mybatis.po;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private int id;
private String username;// 使用者姓名
private String sex;// 性別
private Date birthday;// 生日
private String address;// 地址
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", sex=" + sex
+ ", birthday=" + birthday + ", address=" + address + "]";
}
}
- 匯入對應的jar包
- 書寫配置檔案
<?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>
<!-- 和spring整合後 environments配置將廢除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事務管理 -->
<transactionManager type="JDBC" />
<!-- 資料庫連線池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/mybatisdemouser?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
<!-- 載入mapper.xml -->
<!-- <mappers></mappers> -->
</configuration>
- 匯入日誌檔案:log4j.properties
案例演示
需求分析
建立一套介面實現以下功能:
- 根據使用者id查詢一個使用者資訊
- 根據使用者名稱稱模糊查詢使用者資訊列表
- 新增使用者
- 更新使用者
- 刪除使用者
構建介面類UserDao.java
package cn.wangyequn.dao;
import java.util.List;
import cn.wangyequn.domain.User;
public interface UserDao {
//根據id查詢
public User findUserById(Integer id);
//根據使用者名稱模糊查詢
public List<User> findUserByUsername(String username);
//插入使用者
public void insertUser(User user);
//修改使用者
public void updateUser(User user);
//根據id刪除使用者
public void deleteUserById(Integer id);
}
寫對映檔案UserMap.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“>
<!–
** namespace應該和對映介面名一致
** 標籤應該與所要進行的操作一致
–>
<mapper namespace=“cn.wangyequn.dao.UserDao”>
<!–
** id應該和方法名一致
** parameterType應該和引數的型別一致
** resultType應該和返回值型別一致
–>
<!– 根據id查詢 –>
<select id=“findUserById” parameterType=“java.lang.Integer” resultType=“cn.wangyequn.domain.User”>
SELECT * FROM USER WHERE id = #{id}
</select>
<!– 根據使用者名稱模糊查詢 –>
<select id=“findUserByUsername” parameterType=“java.lang.String” resultType=“cn.wangyequn.domain.User”>
SELECT * FROM USER WHERE username LIKE ‘%${value}%’
</select>
<!– 新增使用者
需要輸入引數是多個值,如果傳入簡單型別是無法滿足要求。
輸入引數型別可以定義為pojo(cn.itcast.mybatis.po.User包括多個屬性)
編寫測試類MybatisTest.java
package cn.wangyequn.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import cn.wangyequn.dao.UserDao;
import cn.wangyequn.domain.User;
public class MybatisTest {
@Test
public void test() throws IOException {
// mybatis全域性配置檔案
String resource = "SqlMapConfig.xml";
// 根據mybatis的全域性配置檔案構造 一個流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 建立SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
// 獲取UserDao的代理物件
UserDao userDao = sqlSession.getMapper(UserDao.class);
User findUserById = userDao.findUserById(10);
System.out.println("根據id 10 獲取到資料" + findUserById);
List<User> findUserByUsername = userDao.findUserByUsername("張");
System.out.println("根據 關鍵字 張 查詢到資料集合" + findUserByUsername);
userDao.deleteUserById(10);
User insertUser = new User();
insertUser.setUsername("王業群");
insertUser.setSex("男");
insertUser.setBirthday(new Date());
insertUser.setAddress("浙江杭州");
userDao.insertUser(insertUser);
System.out.println("插入資料:" + insertUser);
User updateUser = new User();
updateUser.setId(insertUser.getId());
updateUser.setUsername("丁翔");
updateUser.setBirthday(new Date());
updateUser.setSex("女");
updateUser.setAddress("安徽");
userDao.updateUser(updateUser);
System.out.println("更新資料" + insertUser + "為:" + updateUser);
sqlSession.commit();
sqlSession.close();
}
}
具體執行流程
相關推薦
Mybatis框架簡介與簡單應用
框架簡介 Mybatis原名是ibatis,是apache的開源專案,是一個持久層的框架,與資料庫進行互動,將資料持久化到關係型資料庫中,目前託管在 github中; 原理簡介 java中通過JDBC對資料庫進行操作,JDB
shell腳本基礎的簡單介紹與簡單應用
shell 變量 基礎 Shell腳本是Linux中很重要的一種“程序”。什麽shell腳本?shell腳本是提前設計的可執行語句,用來完成特定任務的文件。Shell腳本可分為交互式和非交互式交互式:指腳本在運行時,需要一些人為的參與,比如,鍵盤輸入數據,確認選項等。因為有人為的參與,所以運行時更加智能化,但
MyBatis 框架簡介
包裝 mysq 入參 ble 開發 mybatis3 poj 會話 運行環境 MyBatis 1.MyBatis簡介: 1):MyBatis是開源的持久層框架。 2):利用JDBC抽象出持久層實現。 3):提供了簡單易用的API與數據庫進行交互。
VLAN 技術的產生與簡單應用
網絡技術 vlan 在傳統的LAN(局域網)中,所有的設備都是屬於同一個廣播域,所以一旦一臺主機出現問題,就很有可能會影響同廣播域的其他主機,影響範圍十分廣泛。另外所有的用戶在同一個廣播域中,會引起網絡性能的下降,浪費可貴的帶寬; 為了縮小故障影響範圍,從而實現快速故障定位,
ELK入門與簡單應用
ELK簡單應用1. ELK概述ELK,也就是Elasticsearch、Logstash、Kibana三者的結合,是一套開源的分布式日誌管理方案.更多詳情,請見https://github.com/jeanphorn/elk-stackElasticsearch:負責日誌存儲、檢索和分析LogStash:負責
Admin(一)——Linux簡介與簡單命令
linux centOS linux簡單命令 一、RHEL 與CentOS的區別 RHEL是紅帽公司提供的商業版Linux系統,若要獲取DVD鏡像、安全更新等技術服務支持,一般需要付費訂閱;不過構成RHEL系統的各種軟件包都是基於GPL開源協議免費發布的。 CentOS
容器部署與簡單應用
pan rri 簡單應用 .cn 鏡像倉庫 explore esp 組件 ges 開啟hyper-v Win10 安裝 Docker for Windows 配置加速器:註冊阿裏雲 https://cr.console.aliyun.com/#/accelerator 配
SpringBoot-Mybatis框架使用與源碼解析
sql model tro inf 了解 aso tst fin static 前言: 現在微服務架構基本已經成為一種架構正確了,而SpringBoot技術也已經被應用在各個項目中。 SpringBoot不僅僅那些傳統的好處,更多是可以與其他組件進行結合,使用戶可以更方便
Spring Security權限框架理論與簡單Case
c-based db4 又能 出了 lte pen andro -o string Spring Security權限管理框架介紹 Spring Security 提供了基於javaEE的企業應用軟件全面的安全服務。這裏特別強調支持使用Spring框架構件的項目,Sprin
Mybatis框架簡介、搭建及核心元素講解
大家都知道當前比較流行的框架,如Spring、SpringMVC、Hibernate、Mybatis等框架,那今天咱們來講講當前比較流行的企業框架Mybatis。 首先先來介紹一下Mybatis這個框架:Mybatis是一個開源的資料持久化層框架,它內部封裝了通過JDBC訪問資料庫的操作,支
SSM 環境下的 AOP 配置與簡單應用
一、需要匯入的 jar 包 <!-- Spring AOP 日誌管理需要匯入的包 --> <dependency> <groupId>org.aspectj</groupId> <
Deft框架簡介與基本使用
deft簡介 Deft是一個超輕量級高效能O/R mapping資料訪問元件,簡單易用,幾分鐘即可上手。 原文地址:http://www.cnblogs.com/StrangeCity/p/5566471.html Deft包含如下且不限於此的優點:
windbg sx命令與簡單應用
0x00 sx 命令用於控制當異常或者事件發生時偵錯程式的行為。 Sx命令對應 windbg.exe(gui)的”debug”選單項中的”Event Filters”子選單項。 基本語法如下: 用法如下: Sx:列出所有支援的event與exception。 Sxr:恢復事件與異常處理
JxBrowser概述與簡單應用
Q:JxBrowser是什麼? JxBrowser是一個跨平臺的Java庫,允許將基於Google Chromium的Web瀏覽器元件整合到Java Swing / AWT / JavaFX應用程式中。使用JxBrowser,您可以將輕量級Swing / JavaFX元件嵌入到Java應用程式中,以顯
Mybatis框架中#{}與${}的差別(如何防止sql注入)
預設情況下,使用#{}語法,MyBatis會產生PreparedStatement語句中,並且安全的設定PreparedStatement引數,這個過程中MyBatis會進行必要的安全檢查和轉義。 #相當於對資料 加上 雙引號,$相當於直接顯示資料 示例1: 執行SQL:select * f
主題模型(LDA)(一)--通俗理解與簡單應用---一些程式碼
這篇文章主要給一些不太喜歡數學的朋友們的,其中基本沒有用什麼數學公式。 目錄 直觀理解主題模型 LDA的通俗定義 LDA分類原理 LDA的精髓 主題模型的簡單應用-希拉里郵件門 1.直觀理解主題模型 聽名字應該就知道他講的是什麼?假如有一篇文章text,通
【MyBatis】(一)MyBatis基礎知識點(概念,Mybatis框架的優缺點,簡單的Mybatis框架使用Demo,基本的增刪改查操作案例)
一、概念 簡單的說:一款封裝了資料庫JDBC操作的ORM框架技術.(Apache(ibatis) --> Google(Mybatis)) MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis 避免了幾乎
爬蟲-scrapy框架簡介和基礎應用
一.什麼是Scrapy? Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架,非常出名,非常強悍。所謂的框架就是一個已經被集成了各種功能(高效能非同步下載,佇列,分散式,解析,持久化等)的具有很強通用性的專案模板。對於框架的學習,重點是要學習其框架的特性、各個功能的用法即可。 二.安裝
主題模型(LDA)(一)--通俗理解與簡單應用
這篇文章主要給一些不太喜歡數學的朋友們的,其中基本沒有用什麼數學公式。 目錄 直觀理解主題模型 LDA的通俗定義 LDA分類原理 LDA的精髓 主題模型的簡單應用-希拉里郵件門 1.直觀理解主題模型 聽名字應該就知道他講的是什麼?假如有一
(六--一)scrapy框架簡介和基礎應用
一 什麼是scrapy框架 官方解釋 Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架。 可以應用在包括資料探勘,資訊處理或儲存歷史資料等一系列的程式中。 其最初是為了 頁面抓取 (更確切來說, 網路抓取 )所設計的, 也可以應用在獲取API所返回的資料(例如 Amazon