MyBatis01:第一個程序
起意
最近在學習MyBatis,看了狂神的教程,感覺簡單易懂。
這篇文章在狂神的文章上,加了一點自己的認識。
希望之后可以慢慢養成寫博客的習慣。
什么是MyBatis?
-
MyBatis 是一款優秀的持久層框架
-
MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集的過程(和jdbc比較)
-
MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 實體類 【Plain Old Java Objects,普通的 Java對象】映射成數據庫中的記錄。
-
MyBatis 本是apache的一個開源項目ibatis, 2010年這個項目由apache 遷移到了google code,并且改名為MyBatis 。
-
2013年11月遷移到Github .
-
Mybatis官方文檔 : 官方文檔(文檔可以仔細看看)
-
GitHub : github
為什么用MyBatis?
-
Mybatis就是幫助程序猿將數據存入數據庫中 , 和從數據庫中取數據 .
-
傳統的jdbc操作 , 有很多重復代碼塊 .比如 : 數據取出時的封裝 , 數據庫的建立連接等等… , 通過框架可以減少重復代碼,提高開發效率 .
-
MyBatis 是一個半自動化的ORM框架 (Object Relationship Mapping) -->對象關系映射
-
所有的事情,不用Mybatis依舊可以做到,只是用了它,所有實現會更加簡單!技術沒有高低之分,只有使用這個技術的人有高低之別
-
MyBatis的優點
-
簡單易學:本身就很小且簡單。沒有任何第三方依賴,最簡單安裝只要兩個jar文件+配置幾個sql映射文件就可以了,易于學習,易于使用,通過文檔和源代碼,可以比較完全的掌握它的設計思路和實現。
-
靈活:mybatis不會對應用程序或者數據庫的現有設計強加任何影響。sql寫在xml里,便于統一管理和優化。通過sql語句可以滿足操作數據庫的所有需求。
-
解除sql與程序代碼的耦合:通過提供DAO層,將業務邏輯和數據訪問邏輯分離,使系統的設計更清晰,更易維護,更易單元測試。sql和代碼的分離,提高了可維護性。
-
提供xml標簽,支持編寫動態sql。
-
…
-
最重要的一點,使用的人多!公司需要!
MyBatis和JDBC的比較
上面代碼的問題總結:
1、數據庫連接,使用時就創建,不使用立即釋放,對數據庫進行頻繁連接開啟和關閉,造成數據庫資源浪費,影響數據庫性能。
解決方案:使用數據庫連接池管理數據庫連接。
2、將sql語句硬編碼到java代碼中,如果sql 語句修改,需要重新編譯java代碼,不利于系統維護。
解決方案:將sql語句配置在xml配置文件中,即使sql變化,不需要對java代碼進行重新編譯。
3、向preparedStatement中設置參數,對占位符號位置和設置參數值,硬編碼在java代碼中,不利于系統維護。
解決方案:將sql語句及占位符號和參數全部配置在xml中。
4、從resutSet中遍歷結果集數據時,存在硬編碼,將獲取表的字段進行硬編碼,,不利于系統維護。
解決方案:將查詢的結果集,自動映射成java對象。
MyBatish和hibernate比較
-
hibernate:是一個標準ORM框架(對象關系映射),入門門檻較高的,不需要程序寫sql,sql語句自動生成了,對sql語句進行優化、修改比較困難的。
應用場景:
適用與需求變化不多的中小型項目,比如:后臺管理系統,erp、orm、oa。。
-
mybatis:專注是sql本身,需要程序員自己編寫sql語句,sql修改、優化比較方便。mybatis是一個不完全 的ORM框架,雖然程序員自己寫sql,mybatis 也可以實現映射(輸入映射、輸出映射)。
應用場景:
適用與需求變化較多的項目,比如:互聯網項目。
第一個MyBatis程序
-
入門程序環境說明
- jdk8
- MySql 8.0.16
- maven 3.6.3
- IDEA
-
IDEA項目結構
- 數據庫搭建
CREATE DATABASE `mybatis`;
USE `mybatis`;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(20) NOT NULL,
`name` varchar(30) DEFAULT NULL,
`pwd` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `user`(`id`,`name`,`pwd`) values (1,'狂神','123456'),(2,'張三','abcdef'),(3,'李四','987654');
2.導入MyBatis相關jar包
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
3.編寫MyBaits工具類—從 XML 中構建 SqlSessionFactory
- 參考官方文檔入門
package com.mao.utils;
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.InputStream;
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//獲取SqlSession連接
public static SqlSession getSession(){
return sqlSessionFactory.openSession();
}
}
4.編寫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>
<!--核心配置文件-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mao/dao/userMapper.xml"/>
</mappers>
</configuration>
5.創建實體類
package com.mao.pojo;
public class User {
private int id;
private String name;
private String pwd;
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getPwd() {
return pwd;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
6.編寫Mapper接口類
package com.mao.Dao;
import com.mao.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
public interface userMapper {
//查詢所有用戶
List<User> getUserList();
}
7.編寫Mapper.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">
<mapper namespace="com.mao.Dao.userMapper">
<select id="getUserList" resultType="com.mao.pojo.User">
select * from mybatis.user;
</select>
</mapper>
8。編寫測試類
- Junit測試包
package com.mao.Dao;
import com.mao.pojo.User;
import com.mao.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class UserMapperTest {
//查詢所有用戶
@Test
public void getUserList(){
//第一步,獲取SqlSesion對象
SqlSession sqlSession = MybatisUtils.getSession();
//第二步,執行SQL
userMapper userDao = sqlSession.getMapper(userMapper.class);
List<User> userList = userDao.getUserList();
for(User user:userList){
System.out.println(user);
}
//關閉sqlSession
sqlSession.close();
}
}
9.測試成功
問題說明
可能出現問題說明:Maven靜態資源過濾問題
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
MyBatis使用步驟總結
- 導入jar包,配置pom.xml
- 配置mybatis-config.xml 核心配置文件 (1、數據源,2、外部的mapper)
- 編寫MyBaits工具類—從 XML 中構建 SqlSessionFactory,SqlSession
- 創建實體類
- 編寫Mapper接口類
- 編寫Mapper.xml配置文件
- 使用,通過SqlSession操作數據庫 CRUD
- 調用session.commit()提交事務(增刪改)
- 調用session.close()關閉會話
智能推薦
第一個MyBatis程序
MyBatis 要多對官方文檔進行學習 https://mybatis.org/mybatis-3/zh/index.html 簡介 MyBatis 持久層框架 Dao Access Objects 定制化sql,存儲過程,高級映射 避免了所有JDBC代碼,設置參數,獲取結果集,都不用自己手寫 可以使用XML或注解,來配置和映射原生類型、接口和java的POJO為數據庫記錄 POJO(Plain ...
第一個mybatis程序
搭建環境 1,搭建數據庫 2,創建Maven項目 導入mysql驅動,mybatis,與junit等依賴 3,編寫SqlSession工廠類 注意,工廠類需要使用到mybatis-config.xml文件:即mybatis核心配置文件 作用: 構建SqlSessionFactory:意為SqlSession工廠 返回SqlSession 4,編寫一個mybatis核心配置文件 5,編寫User實體...
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 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...