工做中碰到個須要操做數據庫的功能,直接寫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&characterEncoding=utf8&autoReconnect=true&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();//關閉鏈接