Mybatis簡介及入門
mybatis簡介
MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和對映原生資訊,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。
mybatis操作對比
操作資料庫:JDBC——>DbUtils(QueryRunner)——>jdbcTemplate:小工具
框架:整體解決方案
jdbc處理流程:
功能簡單,sql寫在Java程式碼裡——>硬編碼,高耦合
Hibernate:全自動ORM(Object Relation Mapping)框架:目的在於消除sql,沒法操作sql(希望把sql語句交給開發人員)
Mybatis: 半自動框架,輕量級的,sql與編碼分離,sql是開發人員控制
mybatis之Helloworld
按照官方文件
1、新建實體類
2、maven依賴
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version></dependency>
3、全域性配置資訊mybatis-config
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE configuration PUBLIC "-//mapper.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--配置mybatis執行環境--> <environments default="development"> <environment id="development"> <!--type=“JDBC”代表使用JDBC的提交和回滾來管理事務--> <transactionManager type="JDBC"/> <!--mybatis提供了3種資料來源型別,分別是POOLED、UNPOOLED、JNDI--> <!--POOLED表示支援JDBC資料來源連線池--> <!--UNPOOLED表示不支援資料來源連線池--> <!--JNDI表示支援外部資料來源連線池--> <dataSource type="POOLED"> <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="123456"/> </dataSource> </environment> </environments> <!--註冊Mapper對映檔案方式--> <!--將sql對映檔案註冊到全域性配置檔案中--> <mappers> <!--註冊方式1,一個一個的配置--> <mapper resource="mapper/EmployMapper.xml"/> <!--註冊方式2,自動包內的mapper介面與配置檔案--> <!--<package name="mapper"/>--> </mappers> </configuration>
4、測試
1)根據xml全域性配置檔案獲得sqlSessionFactoty
2)獲得sqlSession物件
3)執行sql
4)關閉sqlSession
package test; import bean.Employee; 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.testng.annotations.Test; import java.io.IOException; import java.io.Reader; /** * @author chenpeng * @date 2018/5/16 11:40 */ public class MybatisTest { @Test public void test() throws IOException { /** * 1、根據xml配置檔案(全域性配置檔案),建立一個sqlSessionFactory物件 */ String resource = "mybatis-config.xml"; Reader reader = Resources.getResourceAsReader(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); //2、獲取sqlSession例項,能直接執行已經對映的sql語句 SqlSession sqlSession = sqlSessionFactory.openSession(); try { //3、兩個引數分別是唯一標識和要傳入的引數 Employee employee = sqlSession.selectOne("select",1); System.out.println(employee); } finally { //4、關閉sqlSession sqlSession.close(); } } }
5、建立對映的sql檔案
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE mapper PUBLIC "-//mapper.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="Employee"> <!--namespace:名稱空間 id:唯一標識 resultType:返回值型別 #{id}:標識從傳過來的引數中取出id --> <select id="select" resultType="bean.Employee"> SELECT * FROM t_employee WHERE id = #{id} </select> </mapper>
然而報錯了:
目錄結構:
在pom中配置:
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>
參考:https://blog.csdn.net/qq_23184291/article/details/78089115
mybatis介面式程式設計
介面式程式設計需要新建一個dao類:
public interface EmployeeMapper { EmployeeMapper getEmployeeById(Integer id ); }
mapper對映檔案的變化:
namespace內容變為介面的路徑,唯一識別符號變為介面的方法名
@Test public void test1() throws IOException { //獲取sqlSession物件 SqlSession sqlSession = getSession(); try { //獲取介面的實現類 //為介面建立一個代理物件mapper EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class); Employee employee = mapper.getEmployeeById(1); System.out.println(employee); } finally { //關閉sqlSession物件 sqlSession.close(); }通過getMapper方法獲得口類的代理物件,從而呼叫介面的方法。
小結:
1、推薦使用介面式程式設計:
2、SqlSession代表和資料庫一次會話,用完必須關閉
3、SqlSession和connection一樣都是非執行緒安全的,每次使用都應該獲取新的物件,不要放在共享成員變數。
4、mapper介面沒有實現類,但是mybatis會生成一個代理物件。(將介面和xml對映檔案進行繫結)
EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
5、兩個重要的配置檔案:
mybatis全域性配置檔案:包含資料庫連線池資訊,事務管理等資訊,系統執行環境
sql對映檔案:儲存了每一個sql語句的對映資訊。