Mybatis大綱
什么是Mybatis框架
MyBatis 本是apache的一個(gè)開源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了google code锻煌,并且改名為MyBatis 。2013年11月遷移到Github 姻蚓。??MyBatis是一個(gè)半自動(dòng)的ORM框架??ORM: Object Relational Mapping (作用解決數(shù)據(jù)庫(kù)發(fā)展和面向?qū)ο蟀l(fā)展不一致的問題)宋梧。??O:面向?qū)ο??R:關(guān)系型數(shù)據(jù)庫(kù)??M:映射??半自動(dòng):myBatis框架是需要我們自己手寫sql語(yǔ)句??MyBatis框架不依賴于服務(wù)器
Mybatis依賴包
mysql驅(qū)動(dòng)包+mybatis的核心包+mybatis的依賴
其中核心包為mybatis.jar
依次從上到下包的作用ant編譯Java類,生成class文件狰挡,ant可以把相關(guān)層架構(gòu)成包java文件解析包.spring依賴這個(gè)包動(dòng)態(tài)代理包.mybatis不需編寫實(shí)現(xiàn)類日志包.spring依賴這個(gè)包字節(jié)碼解析助手,處理.class文件日志包mybatis核心包數(shù)據(jù)庫(kù)驅(qū)動(dòng)日志包
Mybatis.xml配置
<?xml version="1.0" encoding="UTF-8" ?>
PUBLIC"-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--? ? 讀取屬性文件-->
<!--? ? 指定mybatis中的日志類型-->
<!--? ? 給實(shí)體類配置別名-->
<!--? ? ? ? 給指定的類起別名-->
<!--? ? ? ? <typeAlias type="com.erwin.entity.Student" alias="student"></typeAlias>-->
<!--? ? ? ? 包下所有類的別名就是當(dāng)前類名? 首字母會(huì)調(diào)整為小寫-->
<!-- 配置數(shù)據(jù)庫(kù)環(huán)境-->
<!--Mysql數(shù)據(jù)庫(kù)連接-->
<!--Mybatis事務(wù)管理 目前的事務(wù)管理和JDBC中的事務(wù)保持一致-->
<!--? ? ? ? ? ? 底層使用連接池連接-->
<!--? ? 進(jìn)行mapper文件的掃描-->
<!--? ? ? ? resourse 表示XML所在的目錄-->
<!--? ? ? 掃描包下的所有接口捂龄,然后去找和接口相同名字的XML-->
其中jdbc.properties書寫如下
m_driver=com.mysql.cj.jdbc.Driver
m_url=jdbc:mysql://localhost:3306/mybatis?verifyServerCertificate=false&useSSL=false&serverTimezone=UTC
m_user=root
m_pwd=
Mybatis配置屬性說(shuō)明
全局配置文件mybatis.xml
default配置當(dāng)前所使用的環(huán)境.值必須是的id值释涛,可以有多個(gè)標(biāo)簽.
聲明可能使用的環(huán)境,會(huì)被引用
事務(wù)管理器類型.
type屬性可取值:
JDBC 底層事務(wù)與JDBC原有事務(wù)管理相同
MANAGED? MyBatis不去管理事務(wù),交給其他容器進(jìn)行管理.
POOLED : 使用連接池技術(shù). 訪問頻率比較高時(shí)使用.連接池的使用可以降低服務(wù)器壓力,提高連接對(duì)象重用性
UNPOOLED: 不使用連接池技術(shù).每次對(duì)數(shù)據(jù)庫(kù)訪問時(shí)打開數(shù)據(jù)庫(kù)連接,訪問結(jié)束后關(guān)閉數(shù)據(jù)庫(kù)連接.
JNDI : java命名目錄接口.數(shù)據(jù)庫(kù)的連接可以依賴于其他技術(shù)或應(yīng)用.
常用屬性
resource="com/bjsxt/xxx.xml" 加載項(xiàng)目中資源,目錄尋找,中間是/
url="" 加載互聯(lián)網(wǎng)或本機(jī)的配置文件.示例如下:
配置Mapper層xml文件
<?xml version="1.0" encoding="UTF-8" ?>
PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--? ? id 方法名稱-->
<!--? ? resultType 返回值類型
? ? ? ? 如果返回值是一個(gè)對(duì)象,就寫對(duì)象所在包的全路徑
? ? ? ? 如果返回值是一個(gè)集合倦沧,這個(gè)時(shí)候書寫集合的泛型
-->
<!--? ? 注意student是配置在mybatis.xml中的別名唇撬,完整路徑為com.erwin.entity.Student-->
select * from student
mapper.xml 中標(biāo)簽解釋
中namespace=""值相當(dāng)于接口名
id 屬性: 相當(dāng)于方法名
resultType屬性:返回值類型,如果返回值是集合,寫集合的泛型.
parameterType屬性:參數(shù)類型.如果沒有參數(shù)省略該屬性.
其中Student類為Pojo,定義如下:
packagecom.erwin.entity;
importjava.io.Serializable;
publicclassStudentimplementsSerializable{
privateintid;
privateString name;
privateString gender;
publicStudent(intid, String name, String gender){
this.id = id;
this.name = name;
this.gender = gender;
}
publicStudent(){
}
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id = id;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(String name){
this.name = name;
}
publicStringgetGender(){
returngender;
}
publicvoidsetGender(String gender){
this.gender = gender;
}
@Override
publicStringtoString(){
return"Student{"+
"id="+ id +
", name='"+ name +'\''+
", gender='"+ gender +'\''+
'}';
}
}
最基本的調(diào)用方式
packagecom.erwin.test;
importcom.erwin.entity.Student;
importorg.apache.ibatis.io.Resources;
importorg.apache.ibatis.session.SqlSession;
importorg.apache.ibatis.session.SqlSessionFactory;
importorg.apache.ibatis.session.SqlSessionFactoryBuilder;
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.List;
publicclassTestA{
publicstaticvoidmain(String[] args)throwsIOException{
//[a] 解析mybatis.xml
? ? ? ? InputStream resourceAsStream = Resources.getResourceAsStream("com/erwin/mybatis.xml");
? ? ? ? //[b]獲得Session工廠
? ? ? ? SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resourceAsStream,"mysql");
? ? ? ? //[c]獲得Session對(duì)象
? ? ? ? SqlSession sqlSession = factory.openSession();
? ? ? ? //[d]調(diào)用Sql方法
? ? ? ? List<Student> students = sqlSession.selectList("erwin.selectAll");
? ? ? ? //[e]關(guān)閉資源
? ? ? ? sqlSession.close();
? ? ? ? System.out.println(students.get(0));
? ? }
}
日志文件的配置
#指定全局打印的級(jí)別和輸出
log4j.rootCategory=error, CONSOLE,LOGFILE
#指定erwinnamespace= debug展融,并打印
log4j.logger.erwin=debug
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=- %m%n
# LOGFILE issetto be a File appenderusinga PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:/log/0813.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n