深入淺出JAVA MyBatis-快速入門
創(chuàng)建項目前的環(huán)境搭建
本篇使用工具:
1、JDK:jdk1.8
2、Mysql l數(shù)據(jù)庫 :mysql-5.7.31-winx64
3、Maven 開發(fā)工具 :apache-maven-3.8.1
4、IDEA開發(fā)工具: IntelliJ IDEA 2020.1.3 x64
在這里我們使用 MyBatis 開發(fā)一個簡單的 Java 項目完成增刪改查(默認你已安裝JDK和MySQL及會使用Maven和IDEA的基本操作)
簡介
什么是 MyBatis?
MyBatis 是一款優(yōu)秀的持久層框架,它支持自定義 SQL、存儲過程以及高級映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設置參數(shù)和獲取結果集的工作。MyBatis 可以通過簡單的 XML 或注解來配置和映射原始類型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 對象)為數(shù)據(jù)庫中的記錄。
特點
1.簡單易學本身就很小且簡單。沒有任何第三方依賴,最簡單安裝只要兩個jar文件+配置幾個sql映射文件易于學習,易于使用,通過文檔和源代碼,可以比較完全的掌握它的設計思路和實現(xiàn)。
2.靈活:mybatis不會對應用程序或者數(shù)據(jù)庫的現(xiàn)有設計強加任何影響。 sql寫在xml里,便于統(tǒng)一管理和優(yōu)化。通過sql語句可以滿足操作數(shù)據(jù)庫的所有需求。
解除sql與程序代碼的耦合:通過提供DAO層,將業(yè)務邏輯和數(shù)據(jù)訪問邏輯分離,使系統(tǒng)的設計更清晰,更易維護,更易單元測試。sql和代碼的分離,提高了可維護性。
(1)提供映射標簽,支持對象與數(shù)據(jù)庫的orm字段關系映射
(2)提供對象關系映射標簽,支持對象關系組建維護
(3)提供xml標簽,支持編寫動態(tài)sql
(開始)創(chuàng)建Maven項目,導入依賴
創(chuàng)建一個新的Maven項目
第一步:
第二步:
第三步:
第四步
第五步
所需依賴
直接放到 pom.xml中即可
<dependencies> <!--junit:測試用的--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!-- mybatis依賴--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.1</version> </dependency> <!-- mysql驅動--> <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 文件都會掃描到--> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
(開始)在數(shù)據(jù)庫中創(chuàng)建表
創(chuàng)建 users 表
表名 :users
userld :id userName : 姓名 userword : 密碼 sex : 性別 email :郵箱
創(chuàng)建表詳細信息
添加幾條假數(shù)據(jù)
創(chuàng)建實體類
包名
給實體類添加 有參,無參方法,get,set方法,toString方法
package com.guanshiang.pojo; //實體類 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)建對應的接口,以及映射,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); //查詢Users表的所有數(shù)據(jù) List<Users> queryUsers(); //查詢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"> <!--對應接口名--> <mapper namespace="com.guanshiang.mapper.UsersMapper"> <!-- select : 表示查詢操作 id:你要執(zhí)行的sql語法的唯一標識,mybatis會使用這個id的值來找到要執(zhí)行的sql語句 可以自定義,但是要求你使用接口中的方法名稱。 resultType : 表示結果類型的,是sql語句執(zhí)行后得到ResultSet,遍歷這個ResultSet得到java對象的類型 執(zhí)行完sql語句后,返回的java對象的類型 值寫的類型是權限類名稱 --> <!--查詢所有--> <select id="queryUsers" resultType="com.guanshiang.pojo.Users"> select * from users </select> </mapper> <!-- sql映射文件:寫sql語句的,mybatis會執(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是約束文件的名稱,擴展名是dtd的。 2、約束文件的作用:現(xiàn)在,檢查在當前文件中出現(xiàn)的標簽,屬性必須符合mybatis的要求 3、mapper 是當前文件的根標簽,必須的。 namepace:叫做命名空間,唯一值的,可以是自定義的字符串, 要求你使用dao接口的全限定名稱。 4、在當前文件中,可以使用特定的標簽,表示數(shù)據(jù)庫的特定操作。 <select>: 表示執(zhí)行查詢 <update>:表示更新數(shù)據(jù)庫的操作,就是在<update>中 寫的是update sql語句 <insert>:表示插入,放的是insert語句 <delete>:表示刪除,執(zhí)行的delete語句 -->
從 XML 中構建 SqlSessionFactory
以下來自Mybatis官方文檔
每個基于 MyBatis 的應用都是以一個 SqlSessionFactory 的實例為核心的。 SqlSessionFactory 的實例可以通過 SqlSessionFactoryBuilder 獲得。而 SqlSessionFactoryBuilder 則可以從 XML 配置文件或一個預先配置的 Configuration 實例來構建出 SqlSessionFactory 實例。 從 XML 文件中構建 SqlSessionFactory 的實例非常簡單,建議使用類路徑下的資源文 件進行配置。 但也可以使用任意的輸入流(InputStream)實例,比如用文件路徑字符 串或 file:// URL 構造的輸入流。MyBatis 包含一個名叫 Resources 的工具類,它包含 一些實用方法,使得從類路徑或其它位置加載資源文件更加容易。
String resource = “org/mybatis/example/mybatis-config.xml”; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build (inputStream);
XML 配置文件中包含了對 MyBatis 系統(tǒng)的核心設置,包括獲取數(shù)據(jù)庫連接實例的數(shù)據(jù) 源(DataSource)以及決定事務作用域和控制方式的事務管理器 (TransactionManager)。后面會再探討 XML 配置文件的詳細內容,這里先給出一個 簡單的示例:
創(chuàng)建XML配置文件
內容如下:
千萬注意:下面連接數(shù)據(jù)庫信息,要寫你本地的信息。千萬注意:下面連接數(shù)據(jù)庫信息,要寫你本地的信息。千萬注意:下面連接數(shù)據(jù)庫信息,要寫你本地的信息。
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0/EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 環(huán)境配置:數(shù)據(jù)庫的連接信息 default:必須和某個environment的id值一樣。 告訴mybatis使用哪個數(shù)據(jù)庫的連接信息,也就是訪問哪個數(shù)據(jù)庫 因為可能會有多個environment,也就是會有多個表數(shù)據(jù),配置不同的表用不同的id --> <environments default="mydiv"> <!-- environment 一個數(shù)據(jù)庫信息的配置,環(huán)境 id:一個唯一值,自定義:表示環(huán)境的名稱 --> <environment id="mydiv"> <!-- transactionManager: mybatis的事物務型 type:JDBC(表示使用jdbc中的Connection對象的commit,rollback做事務處理) --> <transactionManager type="JDBC"/> <!-- dataSource:表示數(shù)據(jù)源,連接數(shù)據(jù)庫的 type:表示數(shù)據(jù)源的類型,POOLED表示使用連接池 --> <dataSource type="POOLED"> <!-- driver,user,username,password 是固定的,不能自定義。 --> <!--數(shù)據(jù)庫的驅動名--> <property name="driver" value="com.mysql.jdbc.Driver"/> <!--連接數(shù)據(jù)庫的url字符串--> <property name="url" value="jdbc:mysql://localhost:3306/guan"/> <!-- 訪問數(shù)據(jù)庫的數(shù)據(jù)名稱--> <property name="username" value="root"/> <!-- 密碼--> <property name="password" value="guanshiang"/> </dataSource> </environment> </environments> <!-- 指定 sql mapper(sql映射文件)的位置--> <mappers> <!-- 一個1mapper標簽指定一個文件的位置 從類路徑開始的路徑信息。 target/clasess(類路徑) --> <!-- 可出現(xiàn)多次mapper --> <mapper resource="com\guanshiang\dao\StudentDao.xml"/> </mappers> </configuration> <!-- myvatis的主配置文件:主要定義了數(shù)據(jù)庫的配置信息,sql映射文件的位置。 1、約束文件的說明 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0/EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> mybatis-3-config.dtd:約束文件名稱 2、configuration:根標簽 -->
注意:看文件是否正確
<mappers> <mapper resource="com\guanshiang\dao\StudentDao.xml"/> </mappers>
在測試類中測試
在test中創(chuàng)建 測試類 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 { //訪問mybatis 讀取student數(shù)據(jù) //1、定義mybatis主配置文件的名稱,從類路徑的根開始(target/clasess) String config="mybatis.xml"; //2、讀取這個config表示的文件 InputStream in = Resources.getResourceAsStream(config); //3、創(chuàng)建SqlSessionFactoryBuider對象 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); //4、創(chuàng)建SqlSessionFactory對象 SqlSessionFactory factory = builder.build(in); //5、【重要】獲取SqlSession對象,從SqlSessionFactory中獲取SqlSession SqlSession sqlSession = factory.openSession(); //6、【重要】指定要執(zhí)行的sql語句的標識。sql映射文件中的namecapce + "." + 標簽的id值 String sqlId = "com.guanshiang.mapper.UsersMapper"+"."+"queryUsers"; //7、執(zhí)行sql語句,通過sqlId執(zhí)行 List<Users> users = sqlSession.selectList(sqlId); //8、輸出 for (Users u:users){ System.out.println(u); } //9、關閉sqlSession對象 sqlSession.close(); } }
運行結果:
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'}
總體目錄
總結:
本次沒有采用Mybatis工具類等。
如果想完成增刪改查等,只需要
先寫接口,在寫對應的sql映射文件.xml
在測試類中測試即可,改變 6、7、8步驟即可
接口已在上面寫好。
本篇就先完成一個查詢。
備注:感謝前輩們提供的學習資源,
本片借鑒于 :MyBatis官網文檔
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!
相關文章
Java實戰(zhàn)寵物醫(yī)院預約掛號系統(tǒng)的實現(xiàn)流程
只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+JSP+Spring+SpringBoot+MyBatis+html+layui+maven+Mysql實現(xiàn)一個寵物醫(yī)院預約掛號系統(tǒng),大家可以在過程中查缺補漏,提升水平2022-01-01Linux配置jdk1.8與jdk17兼容并存并啟動jar包指定jdk版本
JDK是Java語言的軟件開發(fā)工具包,主要用于移動設備、嵌入式設備上的java應用程序,這篇文章主要給大家介紹了關于Linux配置jdk1.8與jdk17兼容并存并啟動jar包指定jdk版本的相關資料,需要的朋友可以參考下2024-08-08