初識mybatis
今天,一起來說說mybits這個框架吧。這是一個持久層的框架。之前叫做ibatis。所以,在它的代碼中出現ibatis這個詞的時候,不要感到驚訝。不是寫錯了,它確實就是這個樣子的。
mybatis是什么
首先,我們來看看mybatis是個什么東東,它有什么用?我們為什么要學習它。mybatis是一個持久層的框架。所謂的持久層,就是我們三層中的dao層。主要負責跟數據庫進行交互。可以建立數據庫表和系統中的對象的一對一映射關系。這種框架我們稱之為orm框架。但是mybatis框架需要自己寫sql語句,且不能像hibernate那樣自動生成sql語句,並且建立實體類和數據庫的映射。所以我們說它是不完全的orm框架。
有的同學可能對映射這個詞有點不太明了。這里舉個例子:如果我們在數據庫中有一user表,里面的字段有id、name、birthday、sex、address等字段,表中有一條數據,如圖所示:
而我們系統中也應該存在一個將這些字段存為屬性的類,如圖:
我們的這個表中的數據,對應表中的代碼的話,應該是一個User的對象。這個對象中的各個屬性的值即為表中的那一條數據。而框架通過我們的配置,將這個表中的記錄和這個類的對象建立一對一的關系。我們稱之為映射。這樣的映射建立之后,我們可以通過操作這個對象實現對數據庫的修改。這樣我們在考慮業務邏輯的時候就可以不再考慮我們的數據庫中的表是如何存儲的,而是對我們的實體對象進行操作。簡化開發。
那么,mybatis這個框架都可以做些什么呢?
這個其實也很簡單。無非是對數據庫的增刪改查。這是每個持久層框架都應該支持的事情。sql語句可以干的事情,mybatis基本上都可以做。
mybatis如何使用
在這里,我們不說那些特別高大上的使用方式,只是簡單地實現一個最基礎的mybatis框架的搭建以及我們的最基本的根據id查詢用戶的功能的實現。
第一步:創建java工程
第二步:導入jar包
在Java項目中,要想搭建一個框架,首先需要准備的是mybatis的jar包。而由於我們的mybatis是依賴log4j進行輸出的,所以我們還需要log4j的包。這里將博主用到的包進行下截圖分享。
第三步:log4j.properties的創建
在classpath下創建log4j.properties用於供log4j調用。其代碼可以從網上搜索直接粘貼使用。我的代碼如下:
# Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
第四步:sqlMapConfig.xml文件配置
在classpath目錄下創建sqlMapConfig.xml文件,sqlMapConfig.xml是mybatis的核心配置文件,現配置其數據源和事物管理。其內容如下:
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEconfiguration PUBLIC"-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 和spring整合后 environments配置將廢除--> <environmentsdefault="development"> <environmentid="development"> <!-- 使用jdbc事務管理,jdbc的默認事物管理是每條sql分配一個--> <transactionManagertype="JDBC"/> <!-- 數據庫連接池--> <dataSourcetype="POOLED"> <propertyname="driver"value="com.mysql.jdbc.Driver"/> <propertyname="url"value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/> <propertyname="username"value="root"/> <propertyname="password"value="root"/> </dataSource> </environment> </environments> </configuration>
第五步:創建po類
pojo包,是我們在開發中的實體類的包,類似於domain包。這里我們創建的是user類,代碼如下:
package cn.itcast.pojo; import java.util.Date; public class User { private int id; private String username;// 用戶姓名 private String sex;// 性別 private Date birthday;// 生日 private String address;// 地址 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address=" + address + "]"; } }
第六步:sql映射文件創建
在classpath下的sqlmap(該目錄可以任意,不過建議單獨為配置文件建立一個文件夾,以便於管理)目錄下創建一個user.xml的文件代碼如下:
<?xmlversion="1.0"encoding="UTF-8"?> <!DOCTYPEmapper PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace命名空間: 稍后講解 --> <mappernamespace="test"> </mapper>
第七步:加載映射文件
將sql映射文件添加到我們的mybatis的核心配置文件中,使我們的mybatis在運行的時可以識別映射文件。代碼如下:
<mappers> <mapperresource="sqlmap/User.xml"/> </mappers>
到這里,我們的框架搭建就完成了,下面,我們將進行第一個小功能的實現。
1.在我們的user.xml中添加我們的select語句。代碼如下:
<mapper namespace="test"> <!-- id:sql語句的唯一標識, 要求在同一個映射文件中id不能重復 parameterType:傳入參數類型 resultType:返回結果集類型 #{}占位符: 占位符起到占位的作用, 如果傳入參數是簡單類型(String, long, integer, double, boolean等)那么#{}中的變量名稱可以隨意起名 --> <select id="findUserById" parameterType="java.lang.Integer" resultType="cn.itcast.pojo.User"> SELECT * FROM user where id=#{id} </select> </mapper>
2.測試程序
@Test public void testFindUserById() throws Exception { String resource = "SqlMapConfig.xml"; //通過流將核心配置文件讀入 InputStream inputStream = Resources.getResourceAsStream(resource); //通過核心配置文件輸入流, 創建會話工廠 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream); //通過工廠創建會話 SqlSession openSession = factory.openSession(); //第一個參數: 調用的sql語句 namespace+.+sq語句id, 第二個參數:傳入sql語句中的參數 User user = openSession.selectOne("test.findUserById", 1); System.out.println(user); }
至此,我們的mybatis入門程序就開發完成了。其中不足之處,歡迎各位大神指導。