<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
傳統的JDBC運算元據庫都是通過寫一個java類,在類中呼叫介面下的API執行相應的SQL,存在大量的寫死。試想,若是開發一個日活度高的系統,那SQL的變動的非常大,就要我們去相應的類中修改Java程式碼,特別是進行查詢操作時需要我們手動將結果集封裝到實體類中,造成後期維護壓力山大
總而言之,缺點多多
mybatis是一個優秀的基於java的持久層框架,它內部封裝了jdbc,使開發者只需要關注sql語句本身,而不需要花費精力去處理載入驅動、建立連線、建立statement等繁雜的過程。mybatis通過xml或註解的方式將要執行的各種statement設定起來,並通過java物件和statement中sql的動態引數進行對映生成最終執行的sql語句
最後mybatis框架執行sql並將結果對映為java物件並返回。採用ORM思想解決了實體和資料庫對映的問題,對jdbc進行了封裝,遮蔽了jdbc api底層存取細節,使我們不用與jdbc api打交道,就可以完成對資料庫的持久化操作
下面的組態檔在MyBatis的官網裡都有,自己去複製過來貼上到IDEA中更改對應的資訊即可,我寫出來的目的是為了保證文章的順序流暢(大家莫煩~)
1.匯入MyBatis相關座標
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.29</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.10</version> </dependency>
2.資料庫中建立相應的資料表,並編寫一個表中欄位對應的(Brand)實體類
3.編寫BrandMapper對映檔案
<?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="mapper.BrandMapper"> //Mapper代理開發: //定義與SQL對映檔案同名的Mapper介面, //並且將Mapper介面和SQL對映檔案放置在同一目錄下 //設定SQL對映檔案的namespace屬性為Mapper介面全限定名 //在Mapper介面中定義方法,方法名就是SQL對映檔案中sql語句的id,並保持引數型別和返回值型別一致 <select id="selAll" resultType="sqlTest.Brand"> select * from mybatis; </select> </mapper>
4.編寫封裝查詢結果物件的介面
public interface BrandMapper {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> public List<Brand> selAll(); }
5編寫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> <typeAliases> <package name="sqlTest"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--資料庫連線資訊--> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/pyq?useSSL=false"/> <property name="username" value="root"/> <property name="password" value="284650"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/userMapper.xml"/> <mapper resource="mapper/BrandMapper.xml"/> </mappers> </configuration>
6.編寫測試類,通過MyBatis實現查詢功能
public class MybatisDemo3 { public static void main(String[] args) throws IOException { //載入mybatis的核心組態檔,獲取sqlSessionFactory String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); //獲取sqlSession工廠物件 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //獲取sqlSession物件,來執行sql SqlSession sqlSession = sqlSessionFactory.openSession(); //獲取BrandMapper介面的代理物件 BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class); List<Brand> brands =brandMapper.selAll(); System.out.println(brands); //釋放資源 sqlSession.close(); } }
一頓操作下來好像也沒有簡單多少,其實不然,初次編寫的組態檔都是持久化的屬性,以後的變更只需要在介面裡寫出相應的方法即可,避免了大量的寫死
在進行查詢操作時,為了解決SQL表中欄位名稱和實體類中的屬性名不一致導致的不能自動封裝(查出為null)的問題,我們可以通過"起別名"也可以通過SQL片段來對查詢的資料進行定義修改,統一重複的操作
比如,在遇到表中的欄位名稱不符合實體類中駝峰命名的規範時、要對查詢的資料進行範圍限定時都可以通過sql片段來實現,就像這樣:
<sql id="cut"> bracd_name as bracdName,company_name as compantName </sql> <select id="selAll" resultType="sqlTest.Brand"> select <include refid="cut"/> from mybatis; </select>
通過SQL片段實現了所謂的範圍查詢,單表重複起別名工作的統一,但是針對多次不同的查詢範圍我們需要多次定義SQL片段(不靈活),這也不是一件簡單的事
於是resultMap幫我們解決了這個問題:
<resultMap id="rm" type="brand"> <result column="bracd_name" property="bracdName"/> <result column="company_name" property="companyName"/> </resultMap> <select id="selAll" resultMap="rm"> select * from mybatis; </select>
通過id來設定唯一標識,type來指定對映型別,把表的列名column和實體類的屬性名通過result進行對映,在我們的SQL中直接查詢所有即可,進行不同的查詢操作也不需要重複定義片段或者取別名,就變得十分簡單
編寫Mapper介面,寫出新增的方法:
void add(Brand brand);
設定SQL對映檔案:
<mapper> <insert id="add" > insert into mybatis(bracd_name,company_name,ordered,description,status) values (#{bracdName},#{companyName},#{ordered},#{description},#{status}); </insert> </mapper>
執行方法:
SqlSession sqlSession = sqlSessionFactory.openSession(); BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class); brandMapper.add(brand);
編寫Mapper介面,寫出修改的方法:
void update(Brand brand);
編寫對映檔案:
<update id="update" parameterType="sqlTest.Brand"> update mybatis set bracd_name=#{bracdName},company_name=#{companyName},ordered=#{ordered},description=#{description},status=#{status} </update>
執行方法:
SqlSession sqlSession = sqlSessionFactory.openSession(); BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class); int count= brandMapper.update(brand);
編寫Mapper介面,寫出刪除方法:
void deleteid(Brand brand);
編寫對映檔案:
<delete id="deleteid" parameterType="brand"> delete from mybatis where id=#{id} </delete>
執行方法:
SqlSession sqlSession = sqlSessionFactory.openSession(); BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class); int count= brandMapper.deleteid(id);
以上就是對MyBtias的初識,後面還有很多高階功能等待整理
到此這篇關於MyBatisPlus框架簡介及入門案例詳解的文章就介紹到這了,更多相關MyBatisPlus案例內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45