Mybatis框架入門
標簽: 關于Mybatis框架 mybatis sql orm java
Mybatis框架入門
1.什么是MyBatis框架
- MyBatis是一個ORM的數據庫持久化框架;
- Mybatis底層還是原生的JDBC代碼,對JDBC代碼的封裝;
關于ORM的實現思想:將關系數據庫中表中的記錄映射成為對象,以對象的形式展現,程序員可以把對數據庫的操作轉化為對對象的操作。因此ORM的目的是為了方便開發人員以面向對象的思想來實現對數據庫的操作。
2.Mybatis的配置文件
mybatis-config.xml放到resources文件夾下
<?xml version="1.0" encoding="UTF-8" ?>
<!-- dtd約束 -->
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 配置(根標簽) -->
<configuration>
<!-- 獲取到jdbc.properties中的數據(四大金剛) -->
<properties resource="jdbc.properties" />
<!--
environments:環境們(一般來說只連一個數據庫)
default:默認使用哪一個環境(因為環境有可能有很多,所以需要一個默認的)
-->
<environments default="development">
<!--
environment:環境(每一個環境都可以連接一個數據庫)
id:這個環境的唯一名稱
-->
<environment id="development">
<!--
transaction(事務)Manager(管理):事務管理器
type="JDBC":事務管理器的類型
-->
<transactionManager type="JDBC" />
<!--
dataSource:數據源(連接池) mybatis自帶連接池
連接池必配四大金剛(驅動,路徑,用戶名,密碼)
-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.dirver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 找到寫sql的xml的位置 -->
<mapper resource="cn/itsource/domain/ProductMapper.xml" />
</mappers>
</configuration>
3.關于寫SQL語句的mapper.xml文件的存放位置
這個xml文件的存放位置取決于在mybatis-config.xml【mybatis的核心配置文件】文件中,我們配置的位置:比如我們配置為
<!-- 找到寫sql的xml的位置 -->
<mapper resource="cn/itsource/domain/ProductMapper.xml" />`
那么我們就要把這個xml文件放在對應的包cn/itsource/domain中(也就是和實體類放在一起) 為了測試,我把配置文件修改為
<!-- 找到寫sql的xml的位置 -->
<mapper resource="ProductMapper.xml" />`
那么我們就必須把mapper,xml配置文件放在和mybatis-config.xml配置文件相同的目錄下面。測試也是可以正常運行。
4.mapper.xml文件`
這個文件主要是完成sql語句的編寫,然后通過命名空間和id被調用執行。
<?xml version="1.0" encoding="UTF-8" ?>
<!-- dtd約束 -->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
mapper:映射(根標簽)
namespace:命名空間(單獨看是沒有意義的)
-->
<mapper namespace="cn.itsource.domain.ProductMapper">
<!--
select:查詢的sql寫在這里面
id:這條sql在當前命名空間中的唯一名稱
通過namespace+id找到這條sql : cn.itsource.domain.ProductMapper.findOne
parameterType:傳過來的參數類型(這個參數可以不寫)
resultType:返回值類型
返回類型必需寫全限定名(才能確定唯一的類型)
-->
<select id="findOne" parameterType="long" resultType="cn.itsource.domain.Product">
select * from product where id = #{www}
</select>
</mapper>
5.執行sql語句
沒用使用mapper映射器,只對dao層實現類的中的一個查詢方法進行測試
@Override
public Product get(Long id) {
try {
/**
* 1.讀取配置文件
* 在mybatis中已經為我們準備好了一個讀取配置文件的工具類:Resources
* 它會默認到classpath下面的根目錄去獲取相應的配置文件
*/
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
/**
* mybatis使用了構造者模式和工廠模式
* SqlSessionFactory(工廠)Builder(構造者)
* 2.獲取到SqlSessionFactory對象:就是用于創建/獲取SqlSession
* 現在可以先把它看成是一個連接池
*/
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
/**
* 3.獲取SqlSession對象(當前連接對象)
*/
SqlSession session = factory.openSession();
/**
* 4.操作數據庫
* 第一個參數(查詢sql的路徑):命名空間+id
* 第二個參數:傳的參數
*/
Product product = session.selectOne("cn.itsource.domain.ProductMapper.findOne",id);
return product;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
上面這種方式操作比較繁瑣,寫完接口還要寫實現類。MyBatis基于動態代理機制,讓我們無需再編寫Dao的實現:
1.傳統Dao接口,現在名稱統一以Mapper結尾:例如:IUserDao --> UserMapper
2.還有我們映射器配置文件要和映射器在同一個包: (1)包:cn.itsource.mapper中(ProductMapper接口 和 ProductMapper.xml) ProductMapper.xml中namespace直接寫ProductMapper接口的的完全限定名,sql語句的id對應ProductMapper接口中的方法名(如下圖所示)
工具類
public enum MyBatisUtil {
INSTANCE;
private static SqlSessionFactory build;
static{
try {
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
build = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
public SqlSession openSession() {
return build.openSession();
}
}
mapper映射器完成sql使用
public void get() {//查詢不需要提交事務,刪除添加修改需要提交事務session.commit();
SqlSession session = null;
try {
session = MyBatiesUtil.INSTANCE.opensqlSession();
ProductMapper mapper = session.getMapper(ProductMapper.class);
Product selectOne = mapper.selectOne(2L);
System.err.println(selectOne);
} catch (Exception e) {
e.printStackTrace();
}finally {
session.close();
}
}
智能推薦
【SSM框架入門】mybatis環境搭建與入門案例
1. Maven工程結構 2. mybatis環境搭建 2.1 新建數據庫和表 2.2 新建一個maven工程 2.3 pom.xml導入坐標 2.4 創建實體類和DAO接口 2.5 創建Mybatis的主配置文件——SqlMapConfig.xml 2.6 創建映射配置文件——IUserDao.xml 環境搭建的注意事項: ①在Mybatis中持久...
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壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
猜你喜歡
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...
styled-components —— React 中的 CSS 最佳實踐
https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...