1. 程式人生 > >mybatis 環境搭建和基本說明

mybatis 環境搭建和基本說明

name utf-8 rom ide typealias setting puts class tab

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 環境搭建和基本說明