mybatis(一).搭建一個MyBatis項目

        MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。

       能看到這篇文章的人,相信大家對(Java DataBase Connect  jdbc)已經熟練掌握了,SpringJdbc也應該熟悉。spring整合了java的JDBC東西,封裝成了一個組件,就是我們常說的持久層dao組件。大大的減少了開發人員的工作量,而MyBatis框架和SpringJDBC差不多,也是一個和數據庫交互的持久層組件(這裏說組件其實不合適,MyBatis不是某個東西的一部分,應該說是一種技術,一種框架)但實現原理不是封裝JDBC,到底怎麼實現,筆者現在也不知道,我們先來學會它,會使用它,再想它的實現原理。

接下來我們先搭建一個MyBatis項目,項目名稱是:mybatis_demo1。

 我們先來看看搭建一個MyBatis的主要步驟:

1.新建一個web項目

在eclipsp中新建一個web項目,mybatis_demo1,如下圖:

2.編寫主配置文件

在src目錄下先編寫主配置文件SqlMapConfig.xml,如下圖:

代碼如下:

注意:在xml文件中&符號用“&"表示

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" 
	"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
	<environments default="environment">
		<environment id="environment">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/jsd15077db?useUnicode=true&amp;characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>
	
	<!-- 加載sql定義文件 -->
	<mappers>
		<mapper/>
	</mappers>
</configuration> 

3.引入相關jar包

這裏我們要引入的jar包有:

mybatis包:mybatis-3.2.5.jar

數據庫連接包:mysql-connector-java-5.1.39-bin.jar  ,這裏我們用的是mysql數據庫

在WEB-INF/lib目錄下引入jar包,如下圖:

4.編寫對應的實體類

這裏我們要操作時的是用戶表user,先來看看該表的結構:

在src目錄下新建com.cdd.entity包,在該包下新建實體類:User,代碼如下:

package com.cdd.entity;

import java.io.Serializable;

public class User implements Serializable {

	private Integer id;   //用戶id
	private String username;  //登錄名稱
	private String pwd;    //密碼
	private String name;   //暱稱
	private String gender; //性別,1-男;0-女
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", pwd=" + pwd + ", name=" + name + ", gender=" + gender
				+ "]";
	}
}

5.編寫對應實體類的sql操作文件

在com.cdd包下新建一個包sql,在com.cdd.sql包下新建對應User的sql操作文件UserMapper.xml,先寫一個查詢所有用戶信息的sql,代碼如下:

注:

      當只需要傳一個參數的時,通常拼在sql語句裏的參數可以隨便寫,不必與字段名相同,例如:#{ name},這裏面的參數不必        是id(表字段名稱相同)。

      當傳過來多個參數的時候,通常情況下用一個實體類對象或Map集合來接收,拼在sql 的參數要和對應的字段名稱相同。

      拼接sql語句時,parameterType、reslutType對應的類型可以是Java中數據類型也可以是myBatis帶數據類型,通常情況下 myBatis帶的數據類型是java數據類型的小寫。例如: java.Lang.String  對應   string。

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="User">

	<!-- 查詢所有用戶信息 -->
	<select id="findAll" 
		resultType="com.cdd.entity.User">
		select * from user
	</select>
	
</mapper>

要加載該sql操作文件,還得在主配置文件中,把這個文件配置進去,配置好的主配置文件SqlMapConfig.xml代碼如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" 
	"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
	<environments default="environment">
		<environment id="environment">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/jsd15077db?useUnicode=true&amp;characterEncoding=utf-8" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>
	
	<!-- 加載sql定義文件 -->
	<mappers>
		<mapper resource="com/cdd/sql/UserMapper.xml"/>
	</mappers>
</configuration> 

這個主配置文件裏,增加的是這部分內容,如下圖:

6.獲取SqlSession

在com.cdd包下新建test包,在com.cdd.util包下創建一個類MyBatisUtil,代碼如下:

package com.cdd.util;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {

	public static SqlSession getSqlSession() throws IOException{
		//實例化一個SqlSession工廠構建器
		SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
		
		//主配置文件路徑
		String conf = "SqlMapConfig.xml";
		
		//獲取主配置文件的流
		//方式1:用字節流
		//InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(conf);
		//方式2:用字符流
		Reader reader = Resources.getResourceAsReader(conf);
		
		//獲取SqlSessionFactory實例
		SqlSessionFactory ssf = ssfb.build(reader);
		
		//獲取SqlSession
		SqlSession session = ssf.openSession();
		
		return session;
	}
}

7.測試

在com.cdd包新建包test包,在com.cdd.test包下新建Test1類,代碼如下:

注:

      SqlSession用完要記得關閉。

      當執行DML語句時, myBatis默認把數據庫提交關閉了,要顯式調用commit()方法。

package com.cdd.test;

import java.io.IOException;
import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.cdd.entity.User;
import com.cdd.util.MyBatisUtil;

public class Test1 {

	public static void main(String[] args) throws IOException{
		//獲取SqlSession
		SqlSession session = MyBatisUtil.getSqlSession();
		//調用findAll方法
		List<User> userList = session.selectList("findAll");
		//循環輸出
		for(User user : userList){
			System.out.println(user);
		}
		
		session.close();  //關閉session
	}
}

運行後,查看控制檯,如下圖:

注意:我剛纔在實體類User類中重寫了toString()方法,所有才會打印出每個用戶的全部信息。

到這裏一個MyBatis項目就搭建好了,接下來補充一些東西

返回數據類型:

1.類對象

(1).屬性名與字段一致,使用resultType來設置放回數據類型

(2).屬性名和與字段不一致

a.給字段使用別名,使它與屬性名一致

b.使用resultMap替代resultType定義如何裝載數據

這裏通過sql查到的cost_id與實體類CostBean1的id屬性相對應。

注:

    resultType默認按名稱匹配裝載數據;

    resultMap按指定一定匹配規則裝載數據;

    在用實體類對象去裝載查詢回來的數據時,當實體類對象的屬性和表字段不一致時,則裝載到數據後,實體類對象的這個屬性      值爲null,接不到數據       

2.Map集合

3.基本類型

參考資料:

        http://www.mybatis.org/mybatis-3/zh/index.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章