純mybatis操做數據庫(不加入其它框架)

工做中碰到個須要操做數據庫的功能,直接寫sql已經沒法解決,由於涉及到很是多的業務邏輯,但直接去寫原生的jdbc也實在太痛苦,不能直接自動映射之類的問題就不說了,其餘的問題更多,因此有了這個直接用mybatis的小項目。java

將pom文件弄好,導入必要的jar包,能夠根據本身的需求來寫:mysql

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>delectData</groupId>
    <artifactId>jdbcData</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <!--spring的版本-->
        <spring.version>4.1.3.RELEASE</spring.version>

        <!-- log4j日誌包版本號 -->
        <slf4j.version>1.7.18</slf4j.version>
        <log4j.version>1.2.17</log4j.version>

        <!--mybatis的版本-->
        <mybatis.version>3.2.8</mybatis.version>

        <!--mysql鏈接的jar包版本-->
        <mysql-verison>5.1.32</mysql-verison>

        <!--阿里巴巴鏈接池版本-->
        <alibaba-version>1.0.6</alibaba-version>

        <!--設置編譯器打包的jdk版本,不然idea會老是使用1.5版本打包-->
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>


    <dependencies>

        <!--sybase數據庫-->
        <dependency>
            <groupId>com.sybase</groupId>
            <artifactId>sybase-jdbc</artifactId>
            <version>3</version>
            <type>jar</type>
        </dependency>



        <!--common-logging是apache提供的一個通用的日誌接口。用戶能夠自由選擇第三方的日誌組件做爲具體實現,像log4j,或者jdk-->
        <!--自帶的logging, common-logging會經過動態查找的機制,在程序運行時自動找出真正使用的日誌庫。固然,common-logging-->
        <!--內部有一個Simple logger的簡單實現,可是功能很弱。因此使用common-logging,一般都是配合着log4j來使用。使用它的好-->
        <!--處就是,代碼依賴是common-logging而非log4j, 避免了和具體的日誌方案直接耦合,在有必要時,能夠更改日誌實現的第三-->
        <!--方庫-->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>




        <!-- 添加日誌相關jar包 log4j是具體的日誌系統-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <!--slf4j-api做爲日誌接入的接口-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <!--slf4j-log4j12是連接slf4j-api和log4j中間的適配器-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <!--apache提供了對文件、文件名及文件系統的操做-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

        <!--處理經常使用的編碼方法的工具類包,例如DES、SHA一、MD五、Base64,URL,Soundx等-->
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.9</version>
        </dependency>



        <!--第二部分,mybatis的整合******************************************************************- -->

        <!--mybatis的核心包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>


        <!--數據庫還須要用到的其餘jar包-->
        <!--mysql鏈接的jar包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql-verison}</version>
        </dependency>

        <!--阿里巴巴鏈接池,鏈接池須要依賴spring-jdbc,使用的時候確認spring包中是否有這個jar-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${alibaba-version}</version>
        </dependency>


        <!--其餘=====================================================================================================================-->
        <!--阿里巴巴的json處理工具,與谷歌的Gson差很少-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.1.41</version>
        </dependency>


        <!--gson-->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.3.1</version>
        </dependency>




    </dependencies>


</project>

首先建立mybatis的工具類,用來獲取session方便操做增刪改查spring

package com.util;

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;

/**
 * MyBatis工具類
 */
public final class MyBatisUtil {

	//工具類中的方法都是static的,SqlSessionFactory是線程安全的
	private static SqlSessionFactory sqlSessionFactory;
	//建立ThreadLocale對象,ThreadLocale對象與SqlSession一一對應,綁定在一塊兒,SqlSession是線程不安全的
	private static ThreadLocal<SqlSession> threadLocale = new ThreadLocal<SqlSession>();

	//爲SqlSessionFactory對象設置值
	static{
		try {
			//讀取src/mybatis.xml配置文件
			Reader reader = Resources.getResourceAsReader("config/mybatis/mybatis-config.xml");
			//建立SqlSessionFactory對象
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	//不要讓外界經過new來建立工具類
	private MyBatisUtil(){}

	//獲取SqlSession對象
	public static SqlSession getSqlSession(){
		//獲取當前線程中綁定的SqlSession對象
		SqlSession sqlSession = threadLocale.get();
		//若是當前線程中沒有綁定SqlSession對象的話
		if(sqlSession == null){
			//找SqlSessionFactory要一個SqlSession
			sqlSession = sqlSessionFactory.openSession();
			threadLocale.set(sqlSession);
		}
		return sqlSession;
	}

	//關閉SqlSession對象
	public static void closeSqlSession(){
		SqlSession sqlSession = threadLocale.get();
		if(sqlSession != null){
			sqlSession.close();
			threadLocale.remove();
			sqlSession = null;
		}
	}
}


/*
 * 1_SqlSessionFactory在整個應用中只有一個,它的建立和銷燬很是耗時,叫重量級對象,多線程併發訪問是安全的,因此能夠作成實例變量
 * 2_SqlSessionFactoryBuilder對象只在static中使用,它的做用範圍最小,只要將mybatis.xml文件中的數據讀到SqlSessionFactory
 *   對象中,SqlSessionFactoryBuilder對象就沒有做用了
 * 3_SqlSession是每一個線程本身的私有對象,它是輕量級對象,不能被多線程共享,只能作成局部變量
 */

配置mybatis的配置文件:sql

<?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>
    <!--http://zhangbo-peipei-163-com.iteye.com/blog/2052924  mybatis多數據源配置-->

    <!-- 開發須要的多種環境,這裏選擇了什麼就用的哪一個數據源 -->
    <environments default="sybase_developer">
        <!-- 測試環境 -->
        <environment id="sybase_developer_gs_test">
            <!-- MyBatis採用JDBC的事務管理方式 -->
            <transactionManager type="JDBC"/>
            <!-- 數據源 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.sybase.jdbc3.jdbc.SybDriver"/>
                <property name="url" value="jdbc:sybase:Tds:127.0.0.1:7200/tt?charset=cp936"/>
                <property name="username" value="root"/>
                <property name="password" value=""/>
            </dataSource>
        </environment>

        <!-- sybase -->
        <environment id="sybase_developer">
            <!-- MyBatis採用JDBC的事務管理方式 -->
            <transactionManager type="JDBC"/>
            <!-- 數據源 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.sybase.jdbc3.jdbc.SybDriver"/>
                <property name="url" value="jdbc:sybase:Tds:127.0.0.1:7220/test?charset=cp936"/>
                <property name="username" value="test"/>
                <property name="password" value="test"/>
            </dataSource>
        </environment>

        <!-- MySQL環境 -->
        <environment id="mysql_developer">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/shadow?useUnicode=true&amp;characterEncoding=utf8&amp;autoReconnect=true&amp;allowMultiQueries=true"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>

    </environments>

    <!-- 加載映射文件的路徑,resource指明具體映射文件的路徑 -->
    <mappers>
        <mapper resource="cn/mapping/baseInfo_mapper.xml"/> 
    </mappers>

</configuration>

注意:配置文件的 位置必定要和工具類中的配置文件對應起來,不然找不到配置文件會啓動報錯的數據庫

而後就能夠直接寫類來調用mybatis了,下面是主要的方法apache

//獲取一個session,注意檢查下配置文件中的配置,數據源配置和映射文件是否寫好
SqlSession sqlSession = MyBatisUtil.getSqlSession();

//進行各類操做(baseNamespace 就是mapper文件的名稱空間,delectAndAppoint就是id,這裏是經過配置文件的映射指定mapper.xml的位置,不須要去寫接口)
sqlSession.selectList("baseNamespace.delectAndAppoint", parm); 
sqlSession.update("baseNamespace.updateDelect", model);

sqlSession.commit(); //提交

sqlSession.rollback(); //回滾事務

MyBatisUtil.closeSqlSession();//關閉鏈接
相關文章
相關標籤/搜索