1. 程式人生 > >mybatis系列(一)--初識mybatis,以及mybatis的基本配置和執行

mybatis系列(一)--初識mybatis,以及mybatis的基本配置和執行

一.初識mybatis

iBATIS一詞來源於“internet”和“abatis”的組合,是一個基於Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO),MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案遷移到了google code,並且改名為MyBatis ,2013年11月遷移到Github。

二.mybatis的基本配置和執行

1.準備mybatis的jar包:mybatis-3.2.8.jar

   準備資料庫jar包(我用的是mysql):mysql-connector-java-3.1.12-bin.jar

2.準備mybatis的主配置檔案:mybatis-config.xml

專案架構看圖,其中jdbc.propertis為資料庫連線配置檔案

下面附上jdbc.propertis和mybatis-config.xml的程式碼

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=12345

<?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>
    
    <!-- 方法一: 從外部指定properties配置檔案, 除了使用resource屬性指定外,還可通過url屬性指定url-->
	<properties resource="jdbc.properties"/>
	
	
	<!-- 
		 通過package, 可以直接指定package的名字, mybatis會自動掃描你指定包下面的javabean,
	      並且預設設定一個別名,預設的名字為: javabean 的首字母小寫的非限定類名來作為它的別名。
	      也可在javabean 加上註解@Alias 來自定義別名, 例如: @Alias(user) 
	  <package name="com.dy.entity"/>
	 -->
	<typeAliases>
		<typeAlias alias="Student" type="com.douhao.model.Student"/>
	</typeAliases>
	
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driverClassName}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
			
			<!-- 方法二: 直接配置為xml 
				<dataSource type="POOLED">
						<property name="driver" value="com.mysql.jdbc.Driver" />
						<property name="url" value="jdbc:mysql://localhost:3306/test" />
						<property name="username" value="root" />
						<property name="password" value="1234" />
					</dataSource>
			-->
		</environment>
		
		<!-- 一個environments元素下面可以配多個environment元素,可以對應不同的環境,如開發環境和
		生產環境。給environment元素配置不同的id就可以實現,至於要用到哪個環境,可通過environments元素
		的default屬性實現,如<environments default="development">。這時就就會執行id是development的
		環境了。
		 -->
		<environment id="final">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/test" />
				<property name="username" value="root" />
				<property name="password" value="1234" />
			</dataSource>
		</environment>
		
	</environments>
	<mappers>
		<mapper resource="com/douhao/mappers/StudentMapper.xml" />
	</mappers>
	
	
	<!--
	<mappers>
     	  第一種方式:通過resource指定 
    <mapper resource="com/dy/dao/userDao.xml"/>
    
      	第二種方式, 通過class指定介面,進而將介面與對應的xml檔案形成對映關係
             不過,使用這種方式必須保證 介面與mapper檔案同名(不區分大小寫), 
             我這兒介面是UserDao,那麼意味著mapper檔案為UserDao.xml 
     <mapper class="com.dy.dao.UserDao"/>
      
      
      	第三種方式,直接指定包,自動掃描,與方法二同理 
      <package name="com.dy.dao"/>
      
     	 第四種方式:通過url指定mapper檔案位置
      <mapper url="file://........"/>
       
  </mappers>
  -->
</configuration>


現在我們有了mybatis的主配置檔案,但要想執行mybatis我們還要知道兩個很關鍵的知識點 

1.SqlSessionFactory 2.SqlSession

SqlSessionFactory 根據他的名字就知道,這是一個mybatis的session工廠,用來建立mybatis的核心:SqlSession

所以我們1.要通過剛剛的主配置檔案得到SqlSessionFactory。2.通過SqlSessionFactory開啟資料庫會話,獲得SqlSession

再說下SqlSession的作用:
1.向sql語句傳入引數
2.執行sql語句
3.獲取執行sql語句的結果
4.事務的控制 

思路明瞭:1.通過主配置檔案拿到SqlSessionFactory 2.通過SqlSessionFactory 拿到SqlSession 來操作我們的資料庫。下面看程式碼


package com.douhao.service;

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

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

import com.douhao.model.Student;


public class StudentService {
	/**
	 * 
	 * @author 
	 * @description 獲得SqlSessionFactory
	 * @return
	 * @throws IOException
	 * @update 2016年9月24日 下午4:21:54
	 */
	public SqlSessionFactory getSessionFactory() throws IOException{
		//通過配置檔案獲取資料庫連線的相關資訊
		Reader reader= Resources.getResourceAsReader("mybatis-config.xml");
		//通過配置資訊構建SqlSessionFactory
		SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
		return sqlSessionFactory;
	}
	
	public static void main(String[] args) {
		StudentService studentService=new StudentService();
		SqlSession sqlSession=null;
		try {
			SqlSessionFactory sqlSessionFactory=studentService.getSessionFactory();
			sqlSession=sqlSessionFactory.openSession();
			List<Student> list=sqlSession.selectList("student.findStudentById");//這裡配置的是StudentMapper.xml中 (namespace.元素id)
			System.out.println(list.size());
			for(Student s:list){
				System.out.println(s.getId());
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			if(sqlSession!=null){
				sqlSession.close();
			}
		}
	}

}


package com.douhao.model;

public class Student {
	
	Integer id;
	String name;
	String age;
	
	public Student() {
		super();
	}
	
	public Student(String name, String age) {
		super();
		this.name = name;
		this.age = age;
	}
	
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	

}

<?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">


<mapper namespace="student">

	<select id="findStudentById"  resultType="com.douhao.model.Student">
		select * from t_student
	</select>
	
</mapper> 


執行main方法後查出紀錄。至此mybatis能運行了。