1. 程式人生 > >【MyBatis】3:MyBatis環境搭建及入門程式示例

【MyBatis】3:MyBatis環境搭建及入門程式示例

             MyBatis開發環境搭建:

  1 建立Java Project

        使用什麼IDE無所謂,eclipse、myeclipse、idea等等都可以,jdk版本好像也沒什麼限制,只是有些東西低版本的不支援,比如MyBatis的核心xml檔案解析用的xpath是jdk1.5才有的,因此建議使用jdk1.5及其以上版本。
        2 下載MyBatis的jar包及其他依賴包並匯入工程中。
        MyBatis的核心包、依賴包以及資料庫驅動包、日誌包等等都是必須的。當然我們使用Junit編寫測試程式,因此Junit包也要引入,這樣基本上就齊了,如下圖所示:

           3 新增日誌的屬性配置檔案log4j.properties

在工程中的classpath路徑下新增一個名為 config的原始檔夾,用來存放各種配置檔案。首先我們建立log4j.properties檔案,MyBatis預設使用log4j作為列印日誌資訊的工具,其配置內容如下:
# Global logging configuration
# 在開發環境下日誌級別要設定成debug,生產環境設定成info或者error
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

        4 新增MyBatis的全域性配置檔案SqlMapConfig.xml
同樣我們將SQLMapConfig.xml檔案放在config資料夾下,該配置檔案是MyBatis核心配置檔案,配置內容為資料來源、事務管理以及後續要新增的對映檔案路徑等等。其初始配置資訊如下:

<?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>
	<!-- 和spring整合後 environments配置將廢除-->
	<environments default="development">
		<environment id="development">
		<!-- 使用jdbc事務管理-->
			<transactionManager type="JDBC" />
		<!-- 資料庫連線池-->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="mysql" />
			</dataSource>
		</environment>
	</environments>
	
</configuration>

         以上4步我們就完成了框架的初始環境搭建,下面我們就要開始編寫具體的程式程式碼和對映檔案進行入門程式的編碼了。

MyBatis示例程式編寫:
5 建立PO類,即實體類以及和該實體類對應的對映檔案
        我們以User為例,其對應的對映檔案為User.xml,需要注意的是,每個實體類對應一個對映檔案,並且和實體類同名。
        User.java

public class User implements Serializable {

	private int id;
	private String username;
	private Date birthday;
	private String sex;
	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 Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
}
       User.xml(在config資料夾下建立一個子資料夾名為sqlmap,裡面存放所有的對映檔案)
<?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">

<!-- namespace名稱空間,作用就是對sql進行分類化管理,理解sql隔離 
注意:使用mapper代理方法開發,namespace有特殊重要的作用
-->
<mapper namespace="test">

	<!-- 在 對映檔案中配置很多sql語句 -->
	<!-- 需求:通過id查詢使用者表的記錄 -->
	<!-- 通過 select執行資料庫查詢
	id:標識 對映檔案中的 sql
	將sql語句封裝到mappedStatement物件中,所以將id稱為statement的id
	parameterType:指定輸入 引數的型別,這裡指定int型 
	#{}表示一個佔位符號
	#{id}:其中的id表示接收輸入 的引數,引數名稱就是id,如果輸入 引數是簡單型別,#{}中的引數名可以任意,可以value或其它名稱
	
	resultType:指定sql輸出結果 的所對映的java物件型別,select指定resultType表示將單條記錄對映成的java物件。
	 -->
	<select id="findUserById" parameterType="int" resultType="cn.ljw.mybatis.po.User">
		SELECT * FROM USER WHERE id=#{value}
	</select>
	
	
</mapper>
6 將編寫的User.xml配置在MyBatis全域性配置檔案SQLMapConfig.xml中,載入對映檔案
<mappers>
		<mapper resource="sqlmap/User.xml"/>
</mappers>
7 編寫測試程式
@Test
	public void findUserById() throws IOException{
		
		//MyBatis配置檔案
		String resource="SqlMapConfig.xml";
		//得到配置檔案流
		InputStream inputStream= Resources.getResourceAsStream(resource);
		//建立會話工廠,傳入MyBatis的配置檔案資訊
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		
		//通過工廠得到SqlSession
		SqlSession sqlSession=sqlSessionFactory.openSession();
		
		//通過SqlSession操作資料庫
		//第一個引數:對映檔案中statement的id,格式為=namespace+“.”+statementid
		//第二個引數:指定和對映檔案中所匹配的parameterType型別的引數
		//sqlSession.selectOne結果是與對映檔案中所匹配的resultType型別的物件
		User user=sqlSession.selectOne("test.findUserById",25);
		
		System.out.println(user);
		//釋放資源
		sqlSession.close();
		
		
	}
        至此我們就完成了MyBatis第一個入門程式的編寫和測試,整個過程基本上都比較好理解,可能對於對映檔案不是很熟悉,MyBatis的實體類對映檔案裡面配置都是操作實體類物件的statement(可以理解成方法)對應的SQL語句以及該方法對於的引數型別以及返回值型別。我個人覺得,MyBatis的核心內容都是在對映檔案中,只要我們能夠熟悉並且靈活地編寫對映檔案,那麼我們已經掌握了MyBatis的精髓所在。MyBatis為什麼靈活,原因就在這個對映檔案中,在後續的學習中你會越來越有體會。