纯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();//关闭链接
相关文章
相关标签/搜索