MyBatis概述
什么是MyBatis?
我們可以從MyBatis官網上來查到MyBatis的簡介(在這里分享一下我對于學一個框架的見解,我覺得第一步應該是去框架官網上看它的介紹的第一句話,來了解它到底是個什么東西,而不是上去直接百度),在這里翻譯一下。
1、Mybatis是一個一流的持久化框架,它支持定制化SQL、存儲過程和高級映射。(是什么)
2、MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。(優勢)
3、MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。(怎么做的)
第一句話就是概念,我們在介紹MyBatis的時候可以直接用。然后是第二句話,這是MyBatis相比較JDBC的明顯優勢所在,比如說我們想對數據庫進行一個插入的操作,可以分別貼一下兩種方法的代碼
//JDBC方式進行插入
public static int insert(Test test) throws SQLException { Connection connection = null; PreparedStatement preparedStatement = null; try { Class.forName("com.mysql.cj.jdbc.Driver"); connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC", "root", "123456"); connection.setAutoCommit(false); preparedStatement = connection.prepareStatement("INSERT INTO test VALUES (?,?,?)"); if (null != test.getId()) { preparedStatement.setInt(1, test.getId()); } else { preparedStatement.setNull(1, INTEGER); } preparedStatement.setInt(2, test.getNums()); preparedStatement.setString(3, test.getName()); connection.commit(); return preparedStatement.executeUpdate(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (null != connection) { connection.close(); } } catch (SQLException e) { e.printStackTrace(); } } return 0; }
//MyBatis方式進行插入
public static int insert(SqlSession sqlSession, Test test) {
TestMapper testMapper = sqlSession.getMapper(TestMapper.class);
return testMapper.insert(test);
}
通過上面兩段代碼的展示,我覺得什么都不用說了,無論是復雜性和可讀性,MyBatis的優勢都太明顯了。
MyBatis的使用
(1)xml文件
可以通過Generator來自動生成代碼,但是代碼里可能有一些亂七八糟的注釋,配置Generator的方式的過程可以簡單說一下,配置它主要是先在pom文件中配置plugin,然后通過GeneratorConfig.XML文件來進行,不過我不是很提倡這種,因為對于后續的維護和回滾有很大影響,不過也有解決辦法,就是你創建兩個項目,一個負責Generator,一個是你的主項目,可以拷貝Generator里生成的文件。
然后配置mapper.xml文件,在里面定義Bean、寫SQL語句。
(2) Annotation
主要就是通過注解來操作,比如說通過@Select寫SQL語句。
我個人還是比較傾向于第一種,目前也只用過第一種。但是看了網上的相關博客之后,覺得這兩種模式各有利弊,可以把他們倆的優劣勢列出來
| 優勢 | 劣勢 | |
| Mapper.xml |
(1)跟接口分離,統一管理 (2)不會直接看到復雜的SQL語句,從而提高代碼可讀性 |
通常需要操作多個XML文件 |
| Annotation | 通過注釋就可以看到具體的SQL語句 | 代碼可讀性差 |
MyBatis-Config.xml文件解析
我們通過MyBatis-config.xml文件來控制MyBatis的使用,主要是控制properties和settings來進行的。
properties
首先是properties,我們通過它來設置我們的DataSource,也就是數據源,我們用的哪個數據庫、數據庫賬號和密碼等一些信息都在這設置
<dataSource type="UNPOOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="11111111"/>
</dataSource>
我們也可以通過傳入屬性到SqlSessionFactory里來進行控制,但是和在Mapper接口中寫方法的兩種方式(直接寫和通過使用XML文件,兩者可以并存,但只能是互補關系,不然會報錯)不同的是,這樣是可以覆蓋的,因此MyBatis官方定義了他們的優先級:
|
如果屬性在不只一個地方進行了配置,那么 MyBatis 將按照下面的順序來加載: 在 properties 元素體內指定的屬性首先被讀取。 因此,通過方法參數傳遞的屬性具有最高優先級,resource/url 屬性中指定的配置文件次之,最低優先級的是 properties 屬性中指定的屬性。 |
settings
這個是設置MyBatis的一些默認行為,他應該怎樣準備,怎樣工作,怎樣結束,涉及到許多scope,我就不在這一一羅列了,具體的可以參考MyBatis官網的XML配置。
TypeHandlers
這也是一個比較重要的點,在寫這篇文章的時候,我對于他的理解,就是它可以幫助我們在Javatype和JDBCtype之間作了一個橋梁,可以讓我們的數據類型在寫入的時候不會出錯。MyBatis內部自己定義了許多的TypeHandlers,我們也可以自己定義。
Mappers
既然 MyBatis 的行為已經由上述元素配置完了,我們現在就要定義 SQL 映射語句了。但是首先我們需要告訴 MyBatis 到哪里去找到這些語句。 Java 在自動查找這方面沒有提供一個很好的方法,所以最佳的方式是告訴 MyBatis 到哪里去找映射文件。你可以使用相對于類路徑的資源引用, 或完全限定資源定位符(包括file:///的 URL),或類名和包名等。例如:
<!-- 使用相對于類路徑的資源引用 --> <mappers> <mapper resource="org/mybatis/builder/AuthorMapper.xml"/> <mapper resource="org/mybatis/builder/BlogMapper.xml"/> <mapper resource="org/mybatis/builder/PostMapper.xml"/> </mappers> <!-- 使用完全限定資源定位符(URL) --> <mappers> <mapper url="file:///var/mappers/AuthorMapper.xml"/> <mapper url="file:///var/mappers/BlogMapper.xml"/> <mapper url="file:///var/mappers/PostMapper.xml"/> </mappers> <!-- 使用映射器接口實現類的完全限定類名 --> <mappers> <mapper class="org.mybatis.builder.AuthorMapper"/> <mapper class="org.mybatis.builder.BlogMapper"/> <mapper class="org.mybatis.builder.PostMapper"/> </mappers> <!-- 將包內的映射器接口實現全部注冊為映射器 --> <mappers> <package name="org.mybatis.builder"/> </mappers>
這些配置會告訴了 MyBatis 去哪里找映射文件,剩下的細節就應該是每個 SQL 映射文件了,也就是接下來我們要討論的。
總結
- 上一篇: 电脑浏览外网操作方法是什么
- 下一篇: html中设置下划线的方法