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>