深入淺出JAVA MyBatis-快速入門(mén)
創(chuàng)建項(xiàng)目前的環(huán)境搭建
本篇使用工具:
1、JDK:jdk1.8
2、Mysql l數(shù)據(jù)庫(kù) :mysql-5.7.31-winx64
3、Maven 開(kāi)發(fā)工具 :apache-maven-3.8.1
4、IDEA開(kāi)發(fā)工具: IntelliJ IDEA 2020.1.3 x64
在這里我們使用 MyBatis 開(kāi)發(fā)一個(gè)簡(jiǎn)單的 Java 項(xiàng)目完成增刪改查(默認(rèn)你已安裝JDK和MySQL及會(huì)使用Maven和IDEA的基本操作)
簡(jiǎn)介
什么是 MyBatis?
MyBatis 是一款優(yōu)秀的持久層框架,它支持自定義 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作。MyBatis 可以通過(guò)簡(jiǎn)單的 XML 或注解來(lái)配置和映射原始類(lèi)型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 對(duì)象)為數(shù)據(jù)庫(kù)中的記錄。
特點(diǎn)
1.簡(jiǎn)單易學(xué)本身就很小且簡(jiǎn)單。沒(méi)有任何第三方依賴(lài),最簡(jiǎn)單安裝只要兩個(gè)jar文件+配置幾個(gè)sql映射文件易于學(xué)習(xí),易于使用,通過(guò)文檔和源代碼,可以比較完全的掌握它的設(shè)計(jì)思路和實(shí)現(xiàn)。
2.靈活:mybatis不會(huì)對(duì)應(yīng)用程序或者數(shù)據(jù)庫(kù)的現(xiàn)有設(shè)計(jì)強(qiáng)加任何影響。 sql寫(xiě)在xml里,便于統(tǒng)一管理和優(yōu)化。通過(guò)sql語(yǔ)句可以滿足操作數(shù)據(jù)庫(kù)的所有需求。
解除sql與程序代碼的耦合:通過(guò)提供DAO層,將業(yè)務(wù)邏輯和數(shù)據(jù)訪問(wèn)邏輯分離,使系統(tǒng)的設(shè)計(jì)更清晰,更易維護(hù),更易單元測(cè)試。sql和代碼的分離,提高了可維護(hù)性。
(1)提供映射標(biāo)簽,支持對(duì)象與數(shù)據(jù)庫(kù)的orm字段關(guān)系映射
(2)提供對(duì)象關(guān)系映射標(biāo)簽,支持對(duì)象關(guān)系組建維護(hù)
(3)提供xml標(biāo)簽,支持編寫(xiě)動(dòng)態(tài)sql
(開(kāi)始)創(chuàng)建Maven項(xiàng)目,導(dǎo)入依賴(lài)
創(chuàng)建一個(gè)新的Maven項(xiàng)目
第一步:

第二步:

第三步:

第四步

第五步

所需依賴(lài)
直接放到 pom.xml中即可
<dependencies>
<!--junit:測(cè)試用的-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- mybatis依賴(lài)-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<!-- mysql驅(qū)動(dòng)-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory><!--所在目錄-->
<includes><!--包括目錄下的 .properties,.xml 文件都會(huì)掃描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
(開(kāi)始)在數(shù)據(jù)庫(kù)中創(chuàng)建表
創(chuàng)建 users 表
表名 :users
userld :id userName : 姓名 userword : 密碼 sex : 性別 email :郵箱
創(chuàng)建表詳細(xì)信息

添加幾條假數(shù)據(jù)

創(chuàng)建實(shí)體類(lèi)
包名

給實(shí)體類(lèi)添加 有參,無(wú)參方法,get,set方法,toString方法
package com.guanshiang.pojo;
//實(shí)體類(lèi)
public class Users {
private Integer userId;
private String userName;
private String userword;
private String sex;
private String email;
public Users() {
}
public Users(Integer userId, String userName, String userword, String sex, String email) {
this.userId = userId;
this.userName = userName;
this.userword = userword;
this.sex = sex;
this.email = email;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserword() {
return userword;
}
public void setUserword(String userword) {
this.userword = userword;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Users{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", userword='" + userword + '\'' +
", sex='" + sex + '\'' +
", email='" + email + '\'' +
'}';
}
}
創(chuàng)建對(duì)應(yīng)的接口,以及映射,xml文件
接口:
package com.guanshiang.mapper;
import com.guanshiang.pojo.Users;
import java.util.List;
//接口 操作Users表
public interface UsersMapper {
//增加一條
int addUsers(Users users);
//刪除一條
int deleteUsersById(int id);
//修改一條
int updateUsers(Users users);
//查詢(xún)Users表的所有數(shù)據(jù)
List<Users> queryUsers();
//查詢(xún)Users一條
Users queryUsersByid(int id);
}
映射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">
<!--對(duì)應(yīng)接口名-->
<mapper namespace="com.guanshiang.mapper.UsersMapper">
<!--
select : 表示查詢(xún)操作
id:你要執(zhí)行的sql語(yǔ)法的唯一標(biāo)識(shí),mybatis會(huì)使用這個(gè)id的值來(lái)找到要執(zhí)行的sql語(yǔ)句
可以自定義,但是要求你使用接口中的方法名稱(chēng)。
resultType : 表示結(jié)果類(lèi)型的,是sql語(yǔ)句執(zhí)行后得到ResultSet,遍歷這個(gè)ResultSet得到j(luò)ava對(duì)象的類(lèi)型 執(zhí)行完sql語(yǔ)句后,返回的java對(duì)象的類(lèi)型
值寫(xiě)的類(lèi)型是權(quán)限類(lèi)名稱(chēng)
-->
<!--查詢(xún)所有-->
<select id="queryUsers" resultType="com.guanshiang.pojo.Users">
select * from users
</select>
</mapper>
<!--
sql映射文件:寫(xiě)sql語(yǔ)句的,mybatis會(huì)執(zhí)行這些sql
1、指定約束文件
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
mybatis-3-mapper.dtd是約束文件的名稱(chēng),擴(kuò)展名是dtd的。
2、約束文件的作用:現(xiàn)在,檢查在當(dāng)前文件中出現(xiàn)的標(biāo)簽,屬性必須符合mybatis的要求
3、mapper 是當(dāng)前文件的根標(biāo)簽,必須的。
namepace:叫做命名空間,唯一值的,可以是自定義的字符串,
要求你使用dao接口的全限定名稱(chēng)。
4、在當(dāng)前文件中,可以使用特定的標(biāo)簽,表示數(shù)據(jù)庫(kù)的特定操作。
<select>: 表示執(zhí)行查詢(xún)
<update>:表示更新數(shù)據(jù)庫(kù)的操作,就是在<update>中 寫(xiě)的是update sql語(yǔ)句
<insert>:表示插入,放的是insert語(yǔ)句
<delete>:表示刪除,執(zhí)行的delete語(yǔ)句
-->
從 XML 中構(gòu)建 SqlSessionFactory
以下來(lái)自Mybatis官方文檔
每個(gè)基于 MyBatis 的應(yīng)用都是以一個(gè) SqlSessionFactory 的實(shí)例為核心的。 SqlSessionFactory 的實(shí)例可以通過(guò) SqlSessionFactoryBuilder 獲得。而 SqlSessionFactoryBuilder 則可以從 XML 配置文件或一個(gè)預(yù)先配置的 Configuration 實(shí)例來(lái)構(gòu)建出 SqlSessionFactory 實(shí)例。 從 XML 文件中構(gòu)建 SqlSessionFactory 的實(shí)例非常簡(jiǎn)單,建議使用類(lèi)路徑下的資源文 件進(jìn)行配置。 但也可以使用任意的輸入流(InputStream)實(shí)例,比如用文件路徑字符 串或 file:// URL 構(gòu)造的輸入流。MyBatis 包含一個(gè)名叫 Resources 的工具類(lèi),它包含 一些實(shí)用方法,使得從類(lèi)路徑或其它位置加載資源文件更加容易。
String resource = “org/mybatis/example/mybatis-config.xml”; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build (inputStream);
XML 配置文件中包含了對(duì) MyBatis 系統(tǒng)的核心設(shè)置,包括獲取數(shù)據(jù)庫(kù)連接實(shí)例的數(shù)據(jù) 源(DataSource)以及決定事務(wù)作用域和控制方式的事務(wù)管理器 (TransactionManager)。后面會(huì)再探討 XML 配置文件的詳細(xì)內(nèi)容,這里先給出一個(gè) 簡(jiǎn)單的示例:
創(chuàng)建XML配置文件

內(nèi)容如下:
千萬(wàn)注意:下面連接數(shù)據(jù)庫(kù)信息,要寫(xiě)你本地的信息。千萬(wàn)注意:下面連接數(shù)據(jù)庫(kù)信息,要寫(xiě)你本地的信息。千萬(wàn)注意:下面連接數(shù)據(jù)庫(kù)信息,要寫(xiě)你本地的信息。
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0/EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 環(huán)境配置:數(shù)據(jù)庫(kù)的連接信息
default:必須和某個(gè)environment的id值一樣。
告訴mybatis使用哪個(gè)數(shù)據(jù)庫(kù)的連接信息,也就是訪問(wèn)哪個(gè)數(shù)據(jù)庫(kù)
因?yàn)榭赡軙?huì)有多個(gè)environment,也就是會(huì)有多個(gè)表數(shù)據(jù),配置不同的表用不同的id
-->
<environments default="mydiv">
<!-- environment 一個(gè)數(shù)據(jù)庫(kù)信息的配置,環(huán)境
id:一個(gè)唯一值,自定義:表示環(huán)境的名稱(chēng)
-->
<environment id="mydiv">
<!--
transactionManager: mybatis的事物務(wù)型
type:JDBC(表示使用jdbc中的Connection對(duì)象的commit,rollback做事務(wù)處理)
-->
<transactionManager type="JDBC"/>
<!--
dataSource:表示數(shù)據(jù)源,連接數(shù)據(jù)庫(kù)的
type:表示數(shù)據(jù)源的類(lèi)型,POOLED表示使用連接池
-->
<dataSource type="POOLED">
<!--
driver,user,username,password 是固定的,不能自定義。
-->
<!--數(shù)據(jù)庫(kù)的驅(qū)動(dòng)名-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!--連接數(shù)據(jù)庫(kù)的url字符串-->
<property name="url" value="jdbc:mysql://localhost:3306/guan"/>
<!-- 訪問(wèn)數(shù)據(jù)庫(kù)的數(shù)據(jù)名稱(chēng)-->
<property name="username" value="root"/>
<!-- 密碼-->
<property name="password" value="guanshiang"/>
</dataSource>
</environment>
</environments>
<!-- 指定 sql mapper(sql映射文件)的位置-->
<mappers>
<!-- 一個(gè)1mapper標(biāo)簽指定一個(gè)文件的位置
從類(lèi)路徑開(kāi)始的路徑信息。 target/clasess(類(lèi)路徑)
-->
<!-- 可出現(xiàn)多次mapper -->
<mapper resource="com\guanshiang\dao\StudentDao.xml"/>
</mappers>
</configuration>
<!--
myvatis的主配置文件:主要定義了數(shù)據(jù)庫(kù)的配置信息,sql映射文件的位置。
1、約束文件的說(shuō)明
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0/EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
mybatis-3-config.dtd:約束文件名稱(chēng)
2、configuration:根標(biāo)簽
-->
注意:看文件是否正確
<mappers>
<mapper resource="com\guanshiang\dao\StudentDao.xml"/>
</mappers>
在測(cè)試類(lèi)中測(cè)試
在test中創(chuàng)建 測(cè)試類(lèi) Test01
package com.guanshiang;
import com.guanshiang.pojo.Users;
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.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class Test01 {
@Test
public void test() throws IOException {
//訪問(wèn)mybatis 讀取student數(shù)據(jù)
//1、定義mybatis主配置文件的名稱(chēng),從類(lèi)路徑的根開(kāi)始(target/clasess)
String config="mybatis.xml";
//2、讀取這個(gè)config表示的文件
InputStream in = Resources.getResourceAsStream(config);
//3、創(chuàng)建SqlSessionFactoryBuider對(duì)象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//4、創(chuàng)建SqlSessionFactory對(duì)象
SqlSessionFactory factory = builder.build(in);
//5、【重要】獲取SqlSession對(duì)象,從SqlSessionFactory中獲取SqlSession
SqlSession sqlSession = factory.openSession();
//6、【重要】指定要執(zhí)行的sql語(yǔ)句的標(biāo)識(shí)。sql映射文件中的namecapce + "." + 標(biāo)簽的id值
String sqlId = "com.guanshiang.mapper.UsersMapper"+"."+"queryUsers";
//7、執(zhí)行sql語(yǔ)句,通過(guò)sqlId執(zhí)行
List<Users> users = sqlSession.selectList(sqlId);
//8、輸出
for (Users u:users){
System.out.println(u);
}
//9、關(guān)閉sqlSession對(duì)象
sqlSession.close();
}
}
運(yùn)行結(jié)果:
Users{userId=2, userName='管世軒', userword='1234', sex='男', email='21@qq.com'}
Users{userId=3, userName='管世盎', userword='weqrwr', sex='男', email='2722696413@qq.com'}
Users{userId=4, userName='管世千', userword='guanshiang', sex='男', email='1234@qq.com'}
Users{userId=10, userName='花花', userword='123456', sex='女', email='2722696413@qq.com'}
Users{userId=11, userName='李博', userword='asdfasf', sex='男', email='2722696413@qq.com'}
總體目錄

總結(jié):
本次沒(méi)有采用Mybatis工具類(lèi)等。
如果想完成增刪改查等,只需要
先寫(xiě)接口,在寫(xiě)對(duì)應(yīng)的sql映射文件.xml
在測(cè)試類(lèi)中測(cè)試即可,改變 6、7、8步驟即可
接口已在上面寫(xiě)好。
本篇就先完成一個(gè)查詢(xún)。
備注:感謝前輩們提供的學(xué)習(xí)資源,
本片借鑒于 :MyBatis官網(wǎng)文檔
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
SpringBoot自定義注解API數(shù)據(jù)加密和簽名校驗(yàn)
這篇文章主要介紹了SpringBoot自定義注解API數(shù)據(jù)加密和簽名校驗(yàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Java利用反射動(dòng)態(tài)設(shè)置對(duì)象字段值的實(shí)現(xiàn)
橋梁信息維護(hù)需要做到字段級(jí)別的權(quán)限控制,本文主要介紹了Java利用反射動(dòng)態(tài)設(shè)置對(duì)象字段值的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
MyBatis實(shí)現(xiàn)動(dòng)態(tài)查詢(xún)、模糊查詢(xún)功能
這篇文章主要介紹了MyBatis實(shí)現(xiàn)動(dòng)態(tài)查詢(xún)、模糊查詢(xún)功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06
關(guān)于Mybatis與JPA的優(yōu)缺點(diǎn)說(shuō)明
這篇文章主要介紹了關(guān)于Mybatis與JPA的優(yōu)缺點(diǎn)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
詳解IDEA多module項(xiàng)目maven依賴(lài)的一些說(shuō)明
這篇文章主要介紹了詳解IDEA多module項(xiàng)目maven依賴(lài)的一些說(shuō)明,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10
淺析Java的Spring框架中IOC容器容器的應(yīng)用
這篇文章主要介紹了Java的Spring框架中IOC容器容器的應(yīng)用,包括BeanFactory容器和ApplicationContext容器的介紹,需要的朋友可以參考下2015-12-12

