新的一年了,手裏的工作也陸續完工了,在北京漂了快4年了,明年可能有新的打算,考慮回到我夢開始的地方。爲了把握住金三銀四,打算從今天開始,溫習一下自己掌握的技術棧。就先拿mybatis開刀~
Mybatis是當今最流行的持久層框架之一,優秀的半自動ORM設計,可以讓我們靈活的通過配置來完成數據庫與java實體類的映射,免除了幾乎所有的 JDBC 代碼以及設置參數和獲取結果集的工作,使我們的代碼與sql分離,更好的管理項目。
首先,我們要使用mybatis很簡單,只要引入相應的jar包即可,拿maven項目來說,只需要引入其gav依賴,我們的例子中要結合mysql來學習mybatis,所以還需要引入mysql相關的驅動包:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.27</version> </dependency>
每個基於mybatis的應用都是以一個 SqlSessionFactory 的實例爲核心的,SqlSessionFactory 的實例可以通過 SqlSessionFactoryBuilder(建造者模式) 獲得。而 SqlSessionFactoryBuilder 則可以從 XML 配置文件(傳統spring項目,官方建議)或一個預先配置的 Configuration 實例(springboot項目)來構建出 SqlSessionFactory 實例。
這裏提到了SqlSessionFactoryBuilder,SqlSessionFactory ,XML 配置文件三個重要的元素,首先從配置文件說起。
打開IDEA,創建一個普通的maven項目,在resource文件夾下創建一個名爲mybatis-config.xml的配置文件(名字隨便取,建議使用mybatis-config.xml),內容如下:
<?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> <properties resource="config.properties"> <property name="username" value="root"/> <property name="password" value="root"/> </properties> </typeHandlers> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/divLayoutInfoMapper.xml"/> </mappers> </configuration>
配置文件的詳細內容在下節詳細討論,這裏就創建好該配置文件,便於我們能夠拿到SqlSessionFactoryBuilder類,進而獲取到SqlSessionFactory類。
代碼如下:
String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
這樣,我們就能拿到SqlSessionFactory對象了,接下來,從 SqlSessionFactory 中獲取 SqlSession,再通過SqlSession拿到相應的mapper,調用其方法即可
try (SqlSession session = sqlSessionFactory.openSession()) { DivLayoutInfoDao mapper = session.getMapper(DivLayoutInfoDao.class); List<DivLayoutInfo> divLayoutInfos = mapper.selectOne(); }
那麼問題來了,sql在哪裏執行的呢?mapper怎麼和sql綁定的呢?怎麼就通過調用方法的方式就實現了sql的執行呢?,那就是mybatis的核心之一,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="mybatis.dao.DivLayoutInfoDao"> <resultMap id="result" type="mybatis.pojo.DivLayoutInfo"> <result property="id" column="id" /> <result property="modeName" column="mode_name"/> </resultMap> <select id="selectOne" resultMap="result"> select * from div_layout_info </select> </mapper>
頭文件也是mapper特有,表示該配置文件爲mybatis的mapper配置文件,mapper標籤中的namespace屬性值對應與該mapper綁定的接口類,resultMap標籤中的type屬性值爲查詢結果集對應的java實體類路徑,sql標籤中的id對應接口中的方法名,這樣,我們就能夠把mapper接口和mapper.xml配置關聯起來了,這也是爲什麼我們可以通過調用接口中的方法就能實現執行sql的原因了。
至此,一個簡單的hello,mybatis的demo就完成了~