mybatis 環境搭建和基本說明
mybatis介紹就不多提了,直接步入正題。
先準備好eclipse和MySQL,然後先看一下目錄結構
文件和類很少,所以mybatis的搭建是非常簡單的,如搭建中遇到問題可以先參考文檔最後一部分的綜合說明。
1.下載mybatis-3.2.6.jar和mysql-connector-java-5.1.8.jar兩個jar包,可以到各自官網下載,裏面包含了之後需要的很多jar包。
2.創建Dynamic Web project項目名MyBatis(我的項目名:mybatis),把jar包復制到WEB-INF/lib文件夾下。
3.在建立好的項目中,再創建兩個Source Folder,分別為me.gacl.domain和me.gacl.mapping。
user.java
package me.gacl.domain; public class User { private int id; private String name; private String dept; private String phone; private String website; public String getWebsite() { return website; } public void setWebsite(String website) { this.website = website; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDept() { return dept; } public void setDept(String dept) { this.dept = dept; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", dept=" + dept + ", phone=" + phone + ", website=" + website + "]"; } }
userMapping.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,namespace的值習慣上設置成包名+sql映射文件名,這樣就能夠保證namespace的值是唯一的 例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除後綴) --> <mapper namespace="me.gacl.mapping.userMapper"> <!-- 在select標簽中編寫查詢的SQL語句, 設置select標簽的id屬性為getUser,id屬性值必須是唯一的,不能夠重復 使用parameterType屬性指明查詢時使用的參數類型,resultType屬性指明查詢返回的結果集類型 resultType="me.gacl.domain.User"就表示將查詢結果封裝成一個User類的對象返回 User類就是users表所對應的實體類 --> <!-- 根據id查詢得到一個user對象 --> <select id="getUser" parameterType="int" resultType="me.gacl.domain.User"> select * from user where id=#{id} </select> </mapper>
在src文件夾下建立conf.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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <!-- 配置數據庫連接信息 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/yiibai" /> <property name="username" value="root" /> <property name="password" value="" /> </dataSource> </environment> </environments> <mappers> <!-- 註冊userMapper.xml文件, userMapper.xml位於me.gacl.mapping這個包下,所以resource寫成me/gacl/mapping/userMapper.xml--> <mapper resource="me/gacl/mapping/userMapper.xml"/> </mappers> </configuration>
mysql,數據表:user
DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(64) NOT NULL DEFAULT ‘‘, `dept` varchar(254) NOT NULL DEFAULT ‘‘, `website` varchar(254) DEFAULT ‘‘, `phone` varchar(16) NOT NULL DEFAULT ‘‘, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES (‘1‘, ‘aaa‘, ‘Tech‘, ‘http://www.aaa.com‘, ‘13800009988‘);
建立測試文件:
包名:me.gacl.test
package me.gacl.test; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import me.gacl.domain.User; import me.gacl.domain.User2; public class Test1 { public static void main(String[] args) throws IOException { //mybatis的配置文件 String resource = "conf.xml"; //使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件) InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource); //構建sqlSession的工廠 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); //使用MyBatis提供的Resources類加載mybatis的配置文件(它也加載關聯的映射文件) //Reader reader = Resources.getResourceAsReader(resource); //構建sqlSession的工廠 //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); //創建能執行映射文件中sql的sqlSession SqlSession session = sessionFactory.openSession(); /** * 映射sql的標識字符串, * me.gacl.mapping.userMapper是userMapper.xml文件中mapper標簽的namespace屬性的值, * getUser是select標簽的id屬性值,通過select標簽的id屬性值就可以找到要執行的SQL */ String statement = "me.gacl.mapping.userMapper.getUser";//映射sql的標識字符串 //執行查詢返回一個唯一user對象的sql User user = session.selectOne(statement, 1); System.out.println(user); } }
然後運行它。
綜合說明:
到目前為止共有兩個xml配置文件。mybatis-config.xml文件時mybatis的核心配置文件,裏面配置了實體類別名<typeAliases>、數據庫連接環境<environments>、實體類映射的xml配置文件的加載<mappers>等。User.xml配置文件是我們寫sql語句的文件,與實體類一一對應,映射對應的數據庫表。下圖是對兩個配置文件和測試代碼關系的展示:
對應圖中編號
1. 實體類別名。在User.xml配置文件中的resultType返回值類型是實體的時候寫此別名,不配置的話,需要寫bdt.model.User會很麻煩,這樣一配置一勞永逸。resultType還有map等返回值類型,之後再說。
2. mappers標簽配置的是需要加載哪些配置文件,不配置系統就不知道你有此User.xml配置文件。
3. 映射的命名空間,目前這個可以是隨意字符串,但是在以後用接口的方式的時候就不能隨便寫了,目前可以隨便寫。
4. 要執行哪個語句,必須是唯一值,開發中會有很多增刪改查語句,這個必須唯一的指定要執行哪條語句。
5. 傳入語句的條件,會有很多類型,這裏是int類型,#{id}方式可以獲得傳進來的條件參數。
6. bdt.model.User,對應實體類。
7. 另外還需要註意圖中三個綠色方框內容,<typeAliases>、<environments>、<mappers>這三個的順序是不能顛倒的,如果顛倒會報如下錯誤:
The content of element type "configuration" must match
"(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".
顯而易見,配置文件中的標簽是有順序的,正確的順序錯誤提示中已經列出來了,之後我們還要添加<properties>配置文件,自然而然必須放到<typeAliases>之前。
好的,我的mybatis已經搭建完成並測試成功了,並對基本的配置有一點了解,但是還不夠,接下來會更深入的學習。
mybatis 環境搭建和基本說明