mybatis框架入門介紹
mybatis(持久層框架)jdbc
第一天
課程計劃
- 總結jdbc開發的問題
- mybatis介紹
- mybatis入門程式
- mybatis框架原理
- mybatis兩種開發方法
- mybatis核心配置檔案
- mybatis與hibernate比較
- 總結jdbc開發的問題
- jdbc開發的步驟
- 載入驅動
- 建立資料庫連線物件
- 定義sql語句
- 建立statement語句物件
- 設定引數
- 執行
- 處理結果集
- 釋放資源
-
- jdbc示例程式
- 準備環境
- jdbc示例程式
jdk:1.7
ide:eclipse
資料庫:mysql
-
-
- 準備資料
-
-
-
- 建立專案
-
-
-
- 加入資料庫驅動依賴到lib目錄
-
-
-
- 編寫程式碼
-
package cn.bdqn.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet;
import org.junit.Test;
public class MySqlConnectionTest { //測試傳統訪問資料庫方式 @Test public void testMySqlConnection() { try //1.載入驅動 Class.forName("com.mysql.jdbc.Driver"); //2.建立資料庫連線物件 Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbqn", "root", "root"); //3.定義sql語句 String sql="select * from user where id=?"; //4.建立statement語句物件 PreparedStatement psmt = connection.prepareStatement(sql); //5.設定引數 psmt.setInt(1, 10); //6.執行 ResultSet resultSet = psmt.executeQuery(); //7.處理結果集 while(resultSet.next()) { System.out.println("使用者id:"+resultSet.getString("id")+"使用者名稱:"+resultSet.getString("username")); } //關閉資源連線 resultSet.close(); psmt.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } } }
|
執行結果
:
-
- 總結jdbc的問題
- 頻繁建立資料庫連線物件、和釋放。容易造成系統資源的浪費,影響系統性能。在企業專案中可以使用連線池解決這個問題。但是使用jdbc需要自己編寫連線池。mybatis內部已經提供了連線池。
- sql語句定義、引數設定、結果集處理存在硬編碼。在企業專案中sql語句變化的可能性較大,一旦發生變化,需要修改java程式碼,系統需要重新編譯,重新發布。不好維護。
- 結果集處理存在重複程式碼,處理麻煩。如果可以對映為java物件會比較方便。
- mybatis介紹
mybatis是Apache軟體基金會下的一個開源專案,前身是Ibatis框架。2010年這個專案由apache 軟體基金會遷移到google code下,改名為mybatis。2013年11月又遷移到了github(https://github.com/mybatis/mybatis-3/releases)。
mybatis是一個持久層的框架,是對JDBC操作資料庫的封裝,使開發者只需要關注業務本身,不需要花費精力去處理載入驅動、建立資料庫連線物件、建立statement語句物件、引數設定、結果集處理等一系列繁雜的過程程式碼。
mybatis通過xml或註解進行配置,將java物件與sql語句中的引數自動對映生成最終執行的sql語句,並將sql語句執行結果自動對映成java物件,返回給業務層(service)應用。
說明:
- mybatis早期版本叫Ibatis,目前託管在github
- mybatis是物件jdbc的封裝,是一個持久層的框架
- mybatis是通過xml或者註解進行配置,完成java物件與sql語句的對映(對應關係)。
- mybatis入門程式
- 需求
實現使用者表(user)的增、刪、改、查操作(CRUD)。
- 根據使用者id查詢使用者
- 根據使用者名稱稱模糊查詢使用者
- 新增一個使用者
- 根據使用者id修改使用者
- 根據使用者id刪除使用者
-
- 需求實現
- 在lib目錄,加入mybatis框架依賴包
- 需求實現
-
-
- 準備配置檔案
- mybatis-config.xml
- 準備配置檔案
-
說明:它是mybatis框架的主配置檔案。檔案的名稱可以進行修改。
<?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是我們框架的根標籤 --> <configuration> <!-- 配置框架的執行環境 --> <environments default="development"> <environment id="development"> <!-- 配置事務管理器 這裡預設JDBC --> <transactionManager type="JDBC"/> <!-- 資料來源配置 mybatis內部預設提供的資料庫連線池 POOLED --> <dataSource type="POOLED"> <!-- 連線資料庫的四要素 --> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/dbqn"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> </configuration> |
-
-
-
- log4j.properties
-
-
# Global logging configuration log4j.rootLogger=DEBUG, stdout
# Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n |
-
-
- 編寫使用者pojo
-
package cn.bdqn.pojo; import java.util.Date; public class User { private Integer id; // 使用者id private String username; // 使用者名稱 private Date birthday; // 出生日期 private String sex; // 性別 private String address; // 家庭住址 public User() { super(); } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } //重寫輸出使用者資訊 toString方法 @Override Shift+alt+s+s public String toString() { return "User [id=" + id + ", username=" + username + ", birthday=" + birthday + ", sex=" + sex + ", address=" + address + "]"; }
}
|
-
-
- 準備sql語句
-
select * from `user` where id=10 |
-
-
- 準備mapper對映檔案
-
說明:它是用於配置java物件與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"> <!-- namespace 相當於java語言中的包 (用以防止sql語句名稱衝突)實現sql語句隔離 --> <mapper namespace="test"> <!-- mybatis框架針對資料庫的每一種不同的操作提供了相應的標籤 分別是: select delete insert update --> <!-- select標籤 id 用於標識該sql語句的唯一識別符號 parameterType 輸入引數型別 用於指定傳入sql語句的引數型別 resultType 輸出引數型別 用於執行執行sql語句返回結果型別 #{id} 佔位符 相當於jdbc中的 ? --> <select id="queryUserById" parameterType="int" resultType="cn.bdqn.pojo.User"> select * from user where id=#{id} </select> </mapper> |
-
-
- 在mybatis-config.xml檔案中,載入UserMapper.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是我們框架的根標籤 --> <configuration> <!-- 配置框架的執行環境 --> <environments default="development"> <environment id="development"> <!-- 配置事務管理器 這裡預設JDBC --> <transactionManager type="JDBC"/> <!-- 資料來源配置 mybatis內部預設提供的資料庫連線池 POOLED --> <dataSource type="POOLED"> <!-- 連線資料庫的四要素 --> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/dbqn"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <!-- mappper標籤 載入對映檔案到主配置檔案 resource用於指定對映檔案的位置 --> <mapper resource="cn/bdqn/dao/UserMapper.xml" /> </mappers> </configuration> |
-
-
- 編寫測試程式碼
-
@Test public void queryUserById() throws Exception { //載入框架主配置檔案 InputStream ins = Resources.getResourceAsStream("mybatis-config.xml"); //建立SqlSessinFactoryBuilder物件 用於讀取配置檔案 SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder(); //呼叫build()方法 讀取配置檔案 SqlSessionFactory sqlSessionFactory = builder.build(ins); //使用工廠物件 建立SqlSession物件 /** * SqlSession物件 相當於 jdbc中的Connection物件 * 該物件提供了相應的操作資料的api方法 */ SqlSession sqlSession = sqlSessionFactory.openSession(); //根據使用者id查詢使用者資訊 /** * 第一個引數是執行的sql語句 名稱空間+sql語句id * 第二個引數 sql語句執行的引數 */ User user = sqlSession.selectOne("test.queryUserById", 10); //輸出使用框架查詢出的物件 System.out.println(user); } |
-
- 其它需求實現
- 根據使用者名稱稱模糊查詢使用者
- 準備sql語句
- 根據使用者名稱稱模糊查詢使用者
- 其它需求實現
select * from `user` where username like '%小%' |
-
-
-
- 配置對映檔案
-
-
<!-- 根據使用者名稱稱模糊查詢使用者 --> <select id="queryUserByName" parameterType="String" resultType="cn.bdqn.pojo.User"> select * from user where username like #{username} </select> |
-
-
-
- 編寫測試程式碼
-
-
@Test public void queryUserByUsername() throws Exception { //載入主配置檔案 InputStream ins = Resources.getResourceAsStream("mybatis-config.xml"); //讀取主配置檔案 並建立SqlSessionFactory物件 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(ins); //建立SqlSession物件 SqlSession sqlSession = sqlSessionFactory.openSession(); //呼叫查詢資料列表方法 List<User> userList = sqlSession.selectList("test.queryUserByName", "%小%"); //迴圈遍歷 輸出列表資料 for (User user : userList) { System.out.println(user); } } |
-
-
-
- 使用字串拼接符${}拼接引數
-
-
<!-- 根據使用者名稱稱模糊查詢使用者 --> <select id="queryUserByName" parameterType="string" resultType="cn.bdqn.po.User"> <!-- select * from `user` where username like #{username} -->
<!-- where username like '%小%',說明: ${value}:使用字串拼接符拼接引數 --> select * from `user` where username like '%${value}%' </select> |
-
-
-
- 佔位符#{}與字串拼接符${}區別
-
-
- 佔位符#{},相當於jdbc中的問號。當引數傳遞的是java簡單型別(八種基本型別+字串String)的時候,花括號中的內容可以是任意字串。
- 字串拼接符${},當引數傳遞的是java簡單型別的時候,花括號中的內容只能是:value。
- 佔位符#{}與字串拼接符${},當引數傳遞的是pojo的時候,花括號中的內容都是pojo的屬性。
-
- 新增一個使用者
- 準備sql語句
- 新增一個使用者
-
insert into `user`(id,username,birthday,sex,address) values(2,'小李飛刀','2018-04-08','1','明朝人') |
-
-
-
- 配置對映檔案
-
-
<!-- 新增使用者,說明: insert標籤:用於放置新增sql語句 #{id}:字串拼接符,當引數傳遞的是pojo的時候,花括號中的內容是pojo的屬性 --> <insert id="insertUser" parameterType="cn.bdqn.pojo.User"> insert into `user`(id,username,birthday,sex,address) values(#{id},#{username},#{birthday},#{sex},#{address}) </insert> |
-
-
-
- 編寫測試程式碼
-
-
/** * 測試新增使用者 */ @Test public void insertUserTest(){
// 1.建立sqlSession物件 SqlSession sqlSession = this.sqlSessionFactory.openSession();
// 2.使用sqlSession物件,呼叫方法執行 /** * insert方法:新增記錄 * statement:執行的sql語句(名稱空間+"."+sql語句id) * parameter:傳入的引數值 */ // 建立使用者物件 User user = new User(); user.setId(3); user.setUsername("林姑娘"); user.setBirthday(new Date()); user.setSex("2"); user.setAddress("明朝人");
sqlSession.insert("test.insertUser", user);
// 3.釋放資源 sqlSession.close();
} |
問題:java程式執行成功,但是資料庫中沒有記錄。原因是沒有提交事務。
-
-
-
- 提交事務
- 方式一
- 提交事務
-
-
/** * 測試新增使用者 */ @Test public void insertUserTest(){
// 1.建立sqlSession物件 SqlSession sqlSession = this.sqlSessionFactory.openSession();
// 2.使用sqlSession物件,呼叫方法執行 /** * insert方法:新增記錄 * statement:執行的sql語句(名稱空間+"."+sql語句id) * parameter:傳入的引數值 */ // 建立使用者物件 User user = new User(); user.setId(3); user.setUsername("林姑娘"); user.setBirthday(new Date()); user.setSex("2"); user.setAddress("明朝人");
sqlSession.insert("test.insertUser", user);
// 資料庫中提交事務:commit // 手動提交事務 sqlSession.commit();
// 3.釋放資源 sqlSession.close();
} |
-
-
-
-
- 方式二
-
-
-
/** * 測試新增使用者 */ @Test public void insertUserTest(){
// 1.建立sqlSession物件 //SqlSession sqlSession = this.sqlSessionFactory.openSession();
/** * 建立sqlSession的物件,指定自動提交事務。true:自動提交;false:不提交。預設是false */ SqlSession sqlSession = this.sqlSessionFactory.openSession(true);
// 2.使用sqlSession物件,呼叫方法執行 /** * insert方法:新增記錄 * statement:執行的sql語句(名稱空間+"."+sql語句id) * parameter:傳入的引數值 */ // 建立使用者物件 User user = new User(); user.setId(4); user.setUsername("林姑娘"); user.setBirthday(new Date()); user.setSex("2"); user.setAddress("明朝人");
sqlSession.insert("test.insertUser", user);
// 資料庫中提交事務:commit // 手動提交事務 //sqlSession.commit();
// 3.釋放資源 sqlSession.close();
} |
說明:自動提交事務的方式,只要sql語句一旦執行,就提交了事務。如果同時有多個操作,需要使用手動提交事務的方式。
-
-
- 根據使用者id修改使用者
- 準備sql語句
- 根據使用者id修改使用者
-
update `user` set username='李尋歡',sex='2' where id=2 |
-
-
-
- 配置對映檔案
-
-
<!-- 根據使用者id修改使用者,說明: update:用於放置修改sql語句 --> <update id="updateUserById" parameterType="cn.bdqn.pojo.User"> update `user` set username=#{username},sex=#{sex} where id=#{id} </update> |
-
-
-
- 編寫測試程式碼
-
-
/** * 測試根據使用者id修改使用者 */ @Test public void updateUserByIdTest(){ // 1.建立sqlSession物件 SqlSession sqlSession = this.sqlSessionFactory.openSession(true);
// 2.使用sqlSession物件,呼叫方法執行 /** * update方法:修改記錄 * statement:執行的sql語句(名稱空間+"."+sql語句id) * parameter:傳入的引數值 */ // 建立使用者物件 User user = new User(); user.setId(2); user.setUsername("小李飛刀"); user.setSex("1");
sqlSession.update("test.updateUserById", user);
// 3.釋放資源 sqlSession.close(); } |
-
-
- 根據使用者id刪除使用者
- 準備sql語句
- 根據使用者id刪除使用者
-
delete from `user` where id=3 |
相關推薦
mybatis框架入門介紹
mybatis(持久層框架)jdbc 第一天 課程計劃 總結jdbc開發的問題 mybatis介紹 mybatis入門程式 mybatis框架原理 mybatis兩種開發方法 mybatis核心配置檔案 mybatis與hibernate比較
Mybatis框架入門
https 關閉 public cursor 執行器 token Go bold batis Mybatis官網:http://www.mybatis.org/mybatis-3/ Mybatis的介紹 Mybatis是一個操作數據庫的框架。最開始叫做ibatis
MyBatis框架入門小案例(關於用mybatis框架對數據庫的增刪改查)
throw gets ioe ssa 靜態代碼塊 文件 boolean 實現 where 1.新建一個maven項目,建好相對應的包,在https://mvnrepository.com中導入MyBatis需要的依賴,復制到配置文件中 2.在resources文件下
MyBatis框架入門基本開發步驟
1、引入mybatis包,同時使用資料庫jar包也需要引入 a、mybatis-3.3.0.jar b、資料庫jar 2、編寫mybatis配置檔案configuration.xml,配置資料庫相關連線,以及對映資原
MyBatis框架入門(一)
第一章 MyBatis簡介 要有核心配置檔案,要有資料模型對應的mapper。 通過以上的兩個元件就能產生SqlSessionFactory,這個工廠能生產出SqlSession,就能使
mybatis框架入門程式:演示通過mybatis實現資料庫的模糊查詢操作
1. mybatis的基本準備操作見我的上一篇博文:https://www.cnblogs.com/wyhluckdog/p/10149480.html 2. 根據使用者名稱查詢使用者資訊: (1)對映檔案: 在User.xml中新增: <!-- 模糊查詢 返回結果可能
iOS7新JavaScriptCore框架入門介紹
原文地址http://blog.iderzheng.com/introduction-to-ios7-javascriptcore-framework/ 前陣子,Apple正式釋出了新的iOS 7系統,最大最直觀的改變在於介面變得小清新範了,我也提到《iOS,你真的越來越像Androi
mybatis框架——入門級
sed pri 操作 ride inpu 框架 統一 字段 ESS 什麽是mybatis框架? MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBati
(一)log4j框架入門介紹與使用
一.日誌框架的作用 使用日誌框架的好處顯而易見,方便、自在、功能強大能夠滿足各種需求,不好的地方也是有的,比如:如果你也進行了試驗你會發現,程式變慢了,需要一定的時間和精力作為學習的成本。 能夠控制日誌資訊想
Mybatis框架入門學習(一)
什麼是MyBatis? MyBatis是一個支援普通SQL查詢,儲存過程和高階對映的優秀持久層框架。MyBatis消除了幾乎所有的JDBC程式碼和引數的手工設定以及對結果集的檢索封裝。MyBatis可以使用簡單的XML或註解用於配置和原始對映,將介面和Java
Java - Struts框架教程 Hibernate框架教程 Spring框架入門教程(新版) sping mvc spring boot spring cloud Mybatis
java ee cloud pac .cn java get pin nat 輕量級 https://www.zhihu.com/question/21142149 http://how2j.cn/k/hibernate/hibernate-tutorial/31.html
MyBatis 框架之快速入門程序
用戶 框架 oot utf-8 文章 puts inter RM sco 一、使用 IDEA 快速創建 Maven 項目 關於如何快速創建 Maven 項目,這個可以參考下面這篇文章: Maven 項目管理工具基礎入門系列(一) 二、快速配置 MyBatis 依賴 jar
MyBatis入門介紹
MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和對映原生資訊,將介面和 Java 的 POJOs(Plain
MyBatis框架簡單入門
· MyBatis 起步: (1)MyBatis 是一個優秀的資料庫持久化框架 (2)可以解決java中進行JDBC操作時的繁雜步驟 將物件作為SQL的引數傳入 將查詢的結果轉換為Java物件 (3)
入門Mybatis框架
一、思路: XML方法: 第一步:建立一個數據庫,名字為frank;在該資料庫中建立一張資料表,名字為users;該表具有3個欄位,分別是整形的id;varchar型別的name;int型別的age。 Create database frank;(建立資料庫) Create tabl
30分鐘入門MyBatis框架學習
當專案框架SSH(spring、Struts、Hibernate)日落西山時,SSM(spring、SpringMVC、MyBatis)就大行其道,大部分專案都漸漸轉至SSM,因此MyBatis也成了Java程式設計師的必學知識,本文就mybat
新手入門java中Spring+SpringMVC+MyBatis框架整合詳細步驟
Springmvc+spring+mybatis環境搭建 注意:這裡我是用Spring的famerwork的參考文件聯合搭建 搭建spring環境 Spring的基本包+SpringMVC基本+MyBatis基本+mybatis-spring整合,增加tx包,aop包,c
mybatis框架介紹
前端時間學了mybatis,現在終於擠出時間來整理下了. 1.mybatis介紹: 1.MyBatis 原來是apache的一個開源專案ibatis,後來改名為mybatis,所以說ibatis和mybatis是同一個概念.MyBatis 是一款優秀的持久層框架,它支援定
MyBatis入門介紹,鳳凰涅槃:從 iBatis 到 MyBatis
對於從事 Java EE 的開發人員來說,iBatis 是一個再熟悉不過的持久層框架了,在 Hibernate、JPA 這樣的一站式物件 / 關係對映(O/R Mapping)解決方案盛行之前,iBaits 基本是持久層框架的不二選擇。即使在持久層框架層出不
Mybatis框架學習1:入門
一框架介紹 1.Mybatis介紹 MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis。是一個基於Java的持久層框架。 Mybatis本質和Hiberna