MyBatis學習筆記(一)
什么是MyBatis
MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息。
MyBatis的作用
平時我們都用JDBC訪問數據庫,除了需要自己寫SQL之外,還必須操作Connection, Statement, ResultSet 這些其實只是手段的輔助類。 不僅如此,訪問不同的表,還會寫很多雷同的代碼,顯得繁瑣和枯燥。那么用了Mybatis之后,只需要自己提供SQL語句,其他的工作,諸如建立連接,Statement, JDBC相關異常處理等等都交給Mybatis去做了,那些重復性的工作Mybatis也給做掉了,我們只需要關注在增刪改查等操作層面上,而把技術細節都封裝在了我們看不見的地方。
JAR包下載
使用
創建數據庫
CREATE DATABASE mydatabase;
創建表
USE mydatabase;
CREATE TABLE users(
id int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
name varchar(32) DEFAULT NULL,
PRIMARY KEY (id)
)CHARSET=utf8;
插入數據
USE mydatabase;
INSERT INTO users(name) VALUES('小明');
INSERT INTO users(name) VALUES('小紅');
創建一個實體類(bean)
package com.my.bean.User
public class User{
private Integer id;
private String name;
.
.
//Getter and Setter
}
配置Configration.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!--MyBatis的核心配置文件-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--配置JDBC的加載驅動、url、用戶名、密碼-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="" value=""/>
</transactionManager>
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mydatabase?serverTimezone=GMT"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--加載配置SQL語句的配置文件-->
<mappers>
<!--文件路徑從src下開始-->
<mapper resource="com/my/config/sqlxml/User.xml"/>
</mappers>
</configuration>
配置SQL語句的User.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">
<!--命名空間,防止id沖突-->
<mapper namespace="User">
<!--自動存入類對象,執行時直接返回一個裝載著數據的對象,type是類名-->
<resultMap type="com.my.bean.User" id="UserResult">
<!--主鍵用id標簽,普通屬性用result標簽-->
<!--column對應數據庫列名 property對應被裝載對象的屬性名-->
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="name" jdbcType="VARCHAR" property="name"/>
</resultMap>
<!--定義常量,可用include標簽進行引用-->
<sql id="colName">id,name</sql>
<!--parameterType用來指定傳參的類型-->
<select id="getUserList" parameterType="com.my.bean.User" resultMap="UserResult">
SELECT <include refid="colName"/> FROM users
<!--使用OGNL表達式取user的屬性和拼接sql語句-->
<!--"是"的轉義字符–>-->
<!--where自動拼接成正確的sql語句-->
<where>
<if test="id != null and !"".equals(id.trim())">
AND id=#{id}
</if>
<if test="name != null and !"".equals(name.trim())">
AND name LIKE '%' #{name} '%'
</if>
</where>
</select>
<!--單個刪除操作-->
<delete id="deleteOne" parameterType="int">
DELETE FROM users WHERE id=#{_parameter}
</delete>
<!--批量刪除, 傳入一個List作為參數-->
<delete id="deleteBatch" parameterType="java.util.List">
DELETE FROM users WHERE id in(
<!--Separator用于分割-->
<foreach collection="list" item="item" separator=",">
#{item}
</foreach>
)
</delete>
</mapper>
注:寫在#{}中的表達式會被解析為預處理語句 如:DELETE FROM users WHERE id=?
而寫在${}中的會直接寫入 如 DELETE FROM users WHERE id=0
<where>
和<set>
標簽內寫入的sql語句會自動拼接,省去了寫WHERE 1=1的麻煩
<result>
中的column屬性要根據查詢語句的列名填寫,可以為列名起別名,較為靈活
<if>
中的test屬性可以書寫java語句,有些字符需要轉義
需要在Configration.xml中注冊該文件,才能調用
OGNL表達式
用于從傳入的對象參數中取值
從集合中取出數據和用<foreach>
循環歷遍
加載Configration.xml,打開一個會話
package com.my.db;
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 java.io.IOException;
import java.io.Reader;
/*
*通過MyBatis配置文件訪問數據庫
*/
public class DBAccess {
public static SqlSession getSqlSession() throws IOException {
//通過配置文件獲取連接數據庫的信息,文件路徑從src下開始
Reader reader = Resources.getResourceAsReader("com/my/config/Configuration.xml");
//通過配置信息構建一個SqlSessionFactory
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = builder.build(reader);
//通過SqlSessionFactory打開一個sqlSession會話
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
}
DAO層
package com.my.dao;
import com.my.bean.User;
import com.my.db.DBAccess;
import org.apache.ibatis.session.SqlSession;
import java.io.IOException;
import java.util.List;
/*
*從數據庫查詢
*/
public class UserDao {
//查詢
public List<User> getUserList(Integer id, String name){
SqlSession sqlSession = null;
List<Message> messageList = null;
try {
//封裝查詢條件的對象,負責傳入查詢語句
User user = new User();
user.setId(id);
user.setName(name);
//獲取sqlSession
sqlSession = DBAccess.getSqlSession();
//通過id找到配置文件里的SQL語句并執行,第二個參數是傳入的對象
messageList = sqlSession.selectList("User.getUserList", user);
} catch (IOException e) {
e.printStackTrace();
}finally {
//回收資源
if(sqlSession != null)
sqlSession.close();
}
return messageList;
}
//通過id刪除數據
public void deleteOne(int id){
SqlSession sqlSession = null;
try{
sqlSession = DBAccess.getSqlSession();
//SqlSession的刪除方法,參數是需要傳入的數據
sqlSession.delete("User.deleteOne", id);
//增刪改需要手動提交
sqlSession.commit();
}catch (IOException ex){
ex.printStackTrace();
}finally {
//回收資源
if(sqlSession != null)
sqlSession.close();
}
}
//通過id數組批量刪除數據
public void deleteBatch(List idList){
SqlSession sqlSession = null;
try{
sqlSession = DBAccess.getSqlSession();
//調用刪除SQL語句
sqlSession.delete("User.deleteBatch", idList);
//手動提交
sqlSession.commit();
}catch (IOException ex){
ex.printStackTrace();
}finally {
if(sqlSession != null)
sqlSession.close();
}
}
}
測試類
public class TestMyBatis{
@Test
public void testUser(){
UserDao dao = new UserDao();
List<User> userList = dao.getUserList(null, null);
for(User user : userList){
System.out.println(user.getId());
System.out.println(user.getName());
}
}
}
智能推薦
Mybatis學習筆記(一)
1、環境描述 java版本:1.8 開發工具:idea 2018版 mysql:8.x版本 mybatis:3.4.6版本 lombok mybatis 在開發中最為關鍵的是其 SqlSession 的使用和 mapper 文件的配置。 本文將圍繞它來介紹Mybatis的入門案例。 2、項目結構 2.1 配置文件 在 idea 中,使用maven項目。在 resources 資源文件夾中創建文件夾...
MyBatis學習筆記(一)
一、MyBatis介紹 MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記...
Mybatis學習筆記一
Mybatis學習筆記一 概述 Mybatis 是一個優秀的基于 java 的持久層框架,它內部封裝了 jdbc,使開發者只需要關注 sql 語句本身,而不需要花費精力去處理加載驅動、創建連接、創建 statement 等繁雜的過程。 mybatis 通過 xml 或注解的方式將要執行的各種 statement 配置起來,并通過 java 對象和 statement 中sql 的動態參數進行映射生...
MyBatis學習筆記(一)
1 、對原生態jdbc程序中問題總結 jdbc編程步驟: 1、 加載數據庫驅動 2、 創建并獲取數據庫鏈接 3、 創建jdbc statement對象 4、 設置sql語句 5、 設置sql語句中的參數(使用preparedStatement) 6、 通過statement執行sql并獲取結果 7、 對sql執行結...
Mybatis學習筆記(一)
嗷嗷 環境統一 JDK1.8 Mysql5.7 maven3.6.1 簡介 什么是mybatis MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,并且改名為MyBatis 。2013年11月遷移到Github。 iBATIS一詞來源于“internet”和...
猜你喜歡
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壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...