SQL映射器Mapper接口
MyBatis基于代理機制,可以讓我們無需再寫Dao的實現。直接把以前的dao接口定義成符合規則的Mapper。
注意事項:
1.接口必須以Mapper結尾,名字是DomainMapper
2.mapper.xml文件要和Mapper接口建立關系,通過namespace:要能連接到Mapper接口
3.mapper.xml中寫查詢語句的標簽的傳入參數類型(parameterType)、返回結果類型(resultType)必須和mapper接口中對應方法的傳入參數類型和返回結果類型一致,id名字必須和mapper接口中的對應方法名保持一致。
操作步驟:
1、 創建一個DomainMapper接口:直接定義方法(共用了xml配置方式和接口+注解方式兩種)
注意:映射器Mapper接口,替換dao層,不用再寫mapper層(dao層)實現類;名字統一以Mapper結尾。
packagecn.wang._02mapper.mapper;importcn.wang._02mapper.domain.Product;importorg.apache.ibatis.annotations.Select;importjava.util.List;
public interfaceProductMapper {/*** 查詢一個商品:使用了接口+注解的方式*/@Select("select * from Product where id = #{id}")
Product findOne(Long id);/*** 查詢所有商品:使用了xml配置方式*/ListfindAll();
}
2、 在mapper目錄(原dao目錄)下創建映射文件DomainMapper.xml(ProductMapper.xml):
/p>
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select * from product
3、在resources目錄下創建核心配置文件:
/p>
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
MybatisUtils工具類
packagecn.wang.Utils;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importjava.io.Reader;public classMybatisUtils {//保證sqlSessionFactory是單例
private staticSqlSessionFactory sqlSessionFactory;//SqlSessionFactory類似于JPA的EntityManagerFactory,Hibernate的SessionFactory//SqlSession 類似于JPA的EntityManager,Hibernate的Session//該類被加載的時候就執行該靜態代碼塊
static{try{
Reader reader= Resources.getResourceAsReader("MyBatis-Config.xml");
sqlSessionFactory= newSqlSessionFactoryBuilder().build(reader);
}catch (Exception e) {//異常的類型要寫大一些,才能夠看到具體的報錯
e.printStackTrace();
}
}//提供一個外界調用的類
public staticSqlSession getSession(){//創建并返回SqlSession對象
returnsqlSessionFactory.openSession();
}//關閉sqlSession,釋放資源(很重要,不然項目上線后會造成內存溢出)
public static voidcolseSession(SqlSession sqlSession){if(sqlSession !=null){
sqlSession.close();
}
}
}
jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///mysql數據庫名稱
jdbc.username=用戶名
jdbc.password=密碼
可能遇到的錯誤:
(1)namespace寫錯了,應該對應mapper接口的完全限定名。
(2)Mapper映射文件忘記在核心配置文件中注冊了。
(3)注冊的路徑也可能寫錯。