工做中碰到个须要操做数据库的功能,直接写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();//关闭链接