1. 程式人生 > >crm開發總結02

crm開發總結02

1、eclipse當中配置環境變數classpath:
.classpath 檔案

2、mybatis的配置檔名稱隨意:
不一定是:mybatis-config.xml
不一定是:SqlMapper.xml
這些檔案的名字都是可以配置的。
但有要求,這些配置檔案需要放到類路徑下。

什麼是類路徑?bin目錄。
	在eclipse當中,和src同級目錄下有一個bin目錄,
	bin目錄下存放的是class檔案,實際上bin目錄才是
	類的根路徑。




//多個路徑url-pattern用,給字串分隔/  ?/不能省掉

3、在mybatis當中編寫xml檔案的時候,沒有提示,怎麼辦?
任何一個xml檔案都會關聯一個dtd檔案,dtd檔案是約束檔案,
約束xml檔案中可以出現的標籤,以及標籤的順序等,所以只有
關聯了dtd檔案之後,xml編寫的時候才會有提示。

當計算機連線網路的時候,編寫xml檔案會自動有提示,但是沒有
網路的時候沒有提示,怎麼辦?可以將本地的dtd檔案和xml檔案
產生關聯。

步驟:
	複製:-//mybatis.org//DTD Config 3.0//EN
	window --> Prefrences --> 輸入 xml catalog --> User ... --> add..

4、mybatis的核心配置檔案中一般不建議直接配置連線資料庫的資訊,建議將連線資料庫的資訊獨立的配置
到一個簡單的屬性檔案當中(key=value),然後在mybatis的核心配置檔案當中引入該屬性配置檔案。
步驟:
在src根目錄下/bin根目錄下,新建一個jdbc.properties檔案
在該檔案中提供配置:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/wkcto
jdbc.user=root
jdbc.password=root
將該屬性配置檔案的位置告訴mybatis:

在mybatis當中使用屬性配置檔案:
${jdbc.driver}

注意:
${jdbc.driver} 並不是EL表示式,EL表示式是JSP中的語法。
${jdbc.driver} 是mybatis自己定製的。

5、parameterType可以是簡單型別,簡單型別的時候,parameterType可以省略。
parameterType可以是javabean,當是javabean的時候,#{這裡一定要寫javabean的屬性名}
parameterType可以是Map,當是Map的時候,#{這裡一定要寫Map集合中的key}

什麼時候parameterType會使用Map呢?
	parameterType最主要的作用是什麼:給sql語句的佔位符傳值。
	有沒有這種情況:sql語句的佔位符來自多張表!!!!
	使用Map的前提是沒有合適JavaBean。
	sql語句:找出在“達拉斯”工作的員工,並且該員工的編號為“7369”?
		emp 員工表 e
		empno	ename .... deptno
		------------------------------
		7369	.....		100
		
		public class Emp{
			empno
			ename
			...
			deptno
		}
		
		dept 部門表 d
		deptno	dname	loc
		--------------------------
		100		研發部	達拉斯
		
		public class Dept{
			deptno
			dname
			loc
		}
	
	<select parameterType="Map">   <!--map.put("a" , "達拉斯"); map.put("b" , "7369");-->
		select
			e.*
		from
			emp e
		join
			dept d
		on
			e.deptno = d.deptno
		where
			d.dname = #{a}
		and
			e.empno = #{b};
	</select>

6、對於查詢結果集的處理來說,完全依靠:select標籤中的resultType,resultType屬性用來指定結果集的型別,
注意:在mybatis當中,結果集的型別可以是簡單型別,可以是javabean,也可以是Map,什麼時候使用Map?
沒有合適的javabean的時候,例如多張表連線查詢,取出多張表當中的欄位,沒有合適的javabean,此時可以選擇使用Map
當然,要注意:即使resultType是簡單型別,也不能省略。這是和parameterType有很大區別的地方。

查詢結果集放到Map集合的時候,誰來作為Map集合的key?
	查詢結果集的列名作為Map集合的key。

7、mybatis執行的sql語句怎麼輸出到控制檯呢?
可以藉助一個第三方的元件<日誌元件>:
log4j

我們這裡不研究log4j,只是用一下。
	怎麼用?
		第一步:引入log4j的jar : log4j-1.2.17.jar
		第二步:引入log4j的配置檔案
			在類的根路徑下,新建log4j.properties
		第三步:在配置檔案中編寫mybatis日誌配置資訊。
			在該檔案中新增以下配置:
				log4j.rootLogger=DEBUG,Console
				log4j.appender.Console=org.apache.log4j.ConsoleAppender
				log4j.appender.Console.layout=org.apache.log4j.PatternLayout
				log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
				log4j.logger.org.apache=INFO

注意:
	log4j是一個java語言平臺通用的日誌元件,可以使用在
	各大框架當中,不只是可以用在mybatis裡面。
******************
主要目標:
在web專案當中使用mybatis

1、建立一個web project,我這裡使用的servlet版本號是servlet 3.1,
在servlet 3.0版本之後,web.xml檔案就可以不寫了,所有的配置均採用註解
來完成。

2、eclipse部署專案的時候,關於專案的名稱:
settings目錄下的:org.eclipse.wst.common.component
<?xml version="1.0" encoding="UTF-8"?>






3、關於mybatis核心物件的生命週期:
SqlSessionFactoryBuilder:
這個類可以被例項化、使用和丟棄,一旦建立了 SqlSessionFactory,就不再需要它了。
String resource = “org/mybatis/example/mybatis-config.xml”;
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

SqlSessionFactory
	SqlSessionFactory 一旦被建立就應該在應用的執行期間“一直存在”,沒有“任何理由”對它進行清除或重建。
	SqlSessionFactory在整個容器當中只允許出現一個。
	
	一個SqlSessionFactory物件,代表了一個數據庫,當多資料庫開發的時候,SqlSessionFactory物件才會例項化多個。
	對於單一資料庫來說,只能有一個。
	
SqlSession
	每個執行緒都應該有它自己的 SqlSession 例項。SqlSession 的例項不是執行緒安全的,因此是不能被共享的,
	所以它的最佳的作用域是請求或方法作用域。

原則:
	一個執行緒一個Connection。 (JDBC)
	一個執行緒一個SqlSession。(MyBatis)

2、步驟:
2.1、 匯入相關jar
log4j-1.2.17.jar
mybatis-3.4.5.jar
mysql-connector-java-5.1.23-bin.jar
2.2、 引入相關配置檔案
jdbc.properties
log4j.properties
mybatis-config.xml
SqlMapper.xml
2.3、資料庫表我們就直接使用tbl_student了。
tbl_student
id name birth
-------------------------------
1 zhangsan 1980-11-11

id採用UUID。
2.4、準備一個UUID的工具類。

package com.wkcto.mybatis.utils;
import java.util.UUID;
public class UUIDGenerator {
private UUIDGenerator(){

     }
     public static String generate(){

    	 return UUID.randomUUID().toString().replace("-", "");
    	 
     }

}

2.5、提供一個mybatis的工具類:SqlSessionUtil
	SqlSession需要放到ThreadLocal當中,必須保證一個執行緒一個SqlSession物件。
2.6、動態代理(JDK動態代理,實現事務的自動管理。)
	事務在service層控制,所以以後我們不能直接呼叫service,
	需要先建立一個service物件的代理物件,通過代理物件執行service
	當中的方法。
2.7、準備前端頁面
	save.jsp
	準備form表單
2.8、web.xml檔案的編寫,但是我們專案中沒有web.xml檔案。使用註解。
2.9、新建MVC所需要的package
	domain
	controller
	service.impl
	dao.impl
	
2.10、提供StudentController、StudentService、StudentDao

2.11、SqlMapper.xml檔案一般和dao介面放一塊,並且該xml檔案的名稱一般和dao介面名稱一致。
不是必須的,只是開發規範。

2.12、在mybatis核心檔案中配置SqlMapper.xml檔案的路徑。
	<mappers>
		<mapper resource="com/wkcto/crm/dao/StudentDao.xml"/>
	</mappers>

2.13、在sqlmapper.xml檔案中,編寫sql語句:
	<insert id="saveStu" parameterType="com.wkcto.crm.domain.Student">
		insert into tbl_student
			(id,name,birth)
		values
			(#{id},#{name},#{birth})
	</insert>

<!-- 別名 -->
<typeAliases>
	<typeAlias type="com.wkcto.crm.domain.Student" alias="Student"/>
</typeAliases>