你知道目前最流行的Mybatis框架嗎?如何搭建呢婆硬?
MyBatis 本是apache的一個開源項(xiàng)目iBatis, 2010年這個項(xiàng)目由apache software foundation 遷移到了google code狠轻,并且改名為MyBatis 。2013年11月遷移到Github彬犯。
iBATIS一詞來源于“internet”和“abatis”的組合向楼,是一個基于Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)
MyBatis是一個支持普通SQL查詢谐区,存儲過程和高級映射的優(yōu)秀持久層框架湖蜕。MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及對結(jié)果集的檢索封裝。MyBatis可以使用簡單的XML或注解用于配置和原始映射宋列,將接口和Java的POJO(Plain Old Java Objects昭抒,普通的Java對象)映射成數(shù)據(jù)庫中的記錄。
mybatis不是一個完全的orm框架炼杖,Mybatis需要程序員自己寫sql灭返,但是也存在映射(輸入?yún)?shù)映射,輸出結(jié)果映射)坤邪,學(xué)習(xí)門檻mybatis比hibernate低熙含;同時(shí)靈活性高,特別適用于業(yè)務(wù)模型易變的項(xiàng)目艇纺,使用范圍廣怎静。
簡單概括:**更加簡化jdbc代碼,簡化持久層喂饥,sql語句從代碼中分離消约,利用反射肠鲫,將表中數(shù)據(jù)與java bean 屬性一一映射即ORM(Object Relational Mapping 對象關(guān)系映射) **
使用范圍:
在日常的開發(fā)項(xiàng)目中掷匠,如中小型項(xiàng)目是嗜,例如ERP(Crm客戶關(guān)系管理系統(tǒng),OA系統(tǒng)),需求與關(guān)系模型相對固定建議使用Hibernate,對于需求不固定的項(xiàng)目款青,比如:互聯(lián)網(wǎng)項(xiàng)目,建議使用mybatis欧芽,因?yàn)?b>需要經(jīng)常靈活去編寫sql語句飞傀。總之袋毙,mybatis成為當(dāng)下必須學(xué)習(xí)掌握的一個持久層框架型檀。
新建Maven項(xiàng)目
log4j 日志添加
resources目錄下配置文件添加
映射文件添加
實(shí)體類Customer添加
在父類工程pom獲取資源
測試
**新建maven項(xiàng)目 ,pom文件添加依賴jar **
<!-- mybatis jar 包依賴 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.1</version></dependency><!-- 數(shù)據(jù)庫驅(qū)動 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.39</version></dependency><!-- log4j日志打印 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.16</version></dependency>
在src/main/resources 資源包下添加log4j日志輸出properties文件,便于查看日志輸出信息
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
#Consoleoutput...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
新建mybatis.xml文件听盖,并加入配置信息如下(數(shù)據(jù)庫名mybatis,表 user)
<?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"><!-- 添加數(shù)據(jù)庫連接相關(guān)配置信息 --><configuration><environmentsdefault="development"><environmentid="development"><!-- 加入事務(wù)控制 --><transactionManagertype="jdbc"/><!-- 配置數(shù)據(jù)庫連接信息 --><dataSourcetype="pooled"><propertyname="driver"value="com.mysql.jdbc.Driver"/><propertyname="url"value="jdbc:mysql://127.0.0.1:3306/spring-test"/><propertyname="username"value="root"/><propertyname="password"value=""/></dataSource></environment></environments><!-- mapper 配置文件指定 文件數(shù)量可配置多個--><mappers><mapperresource="com/xxx/mapper/CustomerMapper.xml"/></mappers></configuration>
對于標(biāo)簽的配置可能不會出現(xiàn)自動提示:
解決辦法:引入mybatis-3-config.dtd 文件
Window-preferences-搜索xml-xml catalog
在User Specified Entries目錄下 add->
Locattion:http://mybatis.org/dtd/mybatis-3-mapper.dtd (值與xml模板中對應(yīng))
Key Type:URI
Key:-//mybatis.org//DTD Mapper 3.0//EN (值與xml模板中對應(yīng))
第二步:
關(guān)閉xml胀溺,重新打開裂七,如果重新打開不可以,重啟Eclipse即可仓坞。
最后點(diǎn)擊確定即可
新建CustomerMapper.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"><!--
? 1.命名空間配置? 全局唯一? 包名+文件名
? 2.配置Mapped Statement
? 3. statement配置
? ? ? id 值聲明statement編號? 同一命名空間(同一文件)下不可重復(fù)
? ? ? parameterType? 輸入?yún)?shù)即占位符的數(shù)據(jù)類型? 類型可以是 基本數(shù)據(jù)類型,字符串,java bean ,map,list等
? ? ? resultType? ? 輸出結(jié)果? 類型可以是基本數(shù)據(jù)類型,字符串,java bean,map等
? ? ? statement 描述 即待執(zhí)行的sql?
? ? ? #{id}? 占位符? 變量名為id/value 均可? ${value}? 變量名必須為value 字符串拼接形式? 無法避免sql 注入? ?
--><mappernamespace="com.xxx.mapper.customerMapper"><!-- 查詢客戶--><selectid="queryCustomerById"parameterType="int"resultType="com.xxx.pojo.Customer">SELECT id,user_name 'userName',user_balance 'userBalance' FROM? yg_customer WHERE? id=#{id}</select></mapper>
packagecom.xxx.pojo;publicclassCustomer{privateintid;privateString userName;privateString userBalance;publicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicStringgetUserName(){returnuserName;}publicvoidsetUserName(String userName){this.userName=userName;}publicStringgetUserBalance(){returnuserBalance;}publicvoidsetUserBalance(String userBalance){this.userBalance=userBalance;}@OverridepublicStringtoString(){return"Customer{"+"id="+id+", userName='"+userName+'\''+", userBalance='"+userBalance+'\''+'}';}}
<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes></resource></resources></build>
@Testpublicvoidtest()throwsIOException{/**? ? ?
? ? a)背零、讀取mybatis的配置文件? ?
? ? b)、加載配置文件創(chuàng)建SqlSessionFactory? ?
? ? c)无埃、根據(jù)SqlSessionFactory創(chuàng)建SqlSession?
? ? d)徙瓶、通過sqlSession操作數(shù)據(jù)庫? ? ?
? ? e)、處理結(jié)果? ?
? ? f)嫉称、關(guān)閉session?
? ? *//**? ?
? ? * 加載配置到內(nèi)存
? ? */InputStream is=Resources.getResourceAsStream("mybatis.xml");/**?
? ? *? 創(chuàng)建SqlSessionFactory 對象? hibernate 也是如此 必須先獲取SqlSessionFactory 實(shí)例化對象? ? ? */SqlSessionFactory factory=newSqlSessionFactoryBuilder().build(is);/**? ?
? ? *? 獲取session以便操作數(shù)據(jù)庫?
? ? *? 參數(shù)一:指定UserMapper.xml 映射文件id? 必須加入命名空間? ?
? ? *? 參數(shù)二: 指定輸入?yún)?shù)? ?
? ? */SqlSession session=factory.openSession();Customer customer=session.selectOne("com.xxx.mapper.customerMapper.queryCustomerById",2);/**? ?
? ? * 將返回的結(jié)果輸出? ?
? ? */System.out.println(customer);/**?
? ? * 操作完數(shù)據(jù)庫 關(guān)閉session? ?
? ? */session.close();}
說明:
1)侦镇、與spring 一樣,可以通過配置文件或注解的形式進(jìn)行配置;
2)、mybatis.xml织阅,此文件作為mybatis的全局配置文件虽缕,配置了mybatis的運(yùn)行環(huán)境等信息;
3)、mapper文件即sql映射文件蒲稳,文件中配置了操作數(shù)據(jù)庫的sql語句氮趋。此文件需要在mybatis.xml中加載。
4)江耀、有了配置文件后剩胁,通過mybatis環(huán)境等配置信息構(gòu)造SqlSessionFactory即會話工廠
5)、由會話工廠創(chuàng)建sqlSession即會話祥国,操作數(shù)據(jù)庫需要通過sqlSession進(jìn)行
6)昵观、sqlSession使用Executor(數(shù)據(jù)庫操作執(zhí)行器接口)操作數(shù)據(jù)庫,同Executor 具體實(shí)現(xiàn)類實(shí)現(xiàn)指定dao 層數(shù)據(jù)訪問操作舌稀。
框架底層封裝對象(sql語句啊犬、輸入?yún)?shù)、輸出結(jié)果類型)壁查,它包裝了mybatis配置信息及sql映射信息等觉至,mapper文件(即Mapper.xml)中一個sql對應(yīng)一個Mapped Statement對象,sql的id即是Mapped statement的id睡腿。
基本和簡單類型语御、HashMap、自定義POJO等席怪。輸入?yún)?shù)映射就是jdbc編程中對preparedStatement設(shè)置參數(shù)应闯,Executor通過Mapped Statement在執(zhí)行sql前將輸入的java對象映射至sql中。
基本和簡單類型挂捻、HashMap碉纺、自定義POJO。 Statement對sql執(zhí)行輸出結(jié)果進(jìn)行定義,輸出結(jié)果映射過程相當(dāng)于jdbc編程中對結(jié)果的解析處理過程骨田,Executor通過Mapped Statement在執(zhí)行sql后將輸出結(jié)果映射至java對象中唬涧。
基本和簡單類型、HashMap盛撑、自定義POJO等碎节。輸入?yún)?shù)映射就是jdbc編程中對preparedStatement設(shè)置參數(shù),Executor通過Mapped Statement在執(zhí)行sql前將輸入的java對象映射至sql中抵卫。
基本和簡單類型狮荔、HashMap、自定義POJO介粘。 Statement對sql執(zhí)行輸出結(jié)果進(jìn)行定義殖氏,輸出結(jié)果映射過程相當(dāng)于jdbc編程中對結(jié)果的解析處理過程,Executor通過Mapped Statement在執(zhí)行sql后將輸出結(jié)果映射至java對象中姻采。
這里使用Maven 工程雅采,對應(yīng)的mybatis jar包下載通過maven 倉庫統(tǒng)一管理下載。