• 在工作中发现mybatis默认的连接池POOLED,运行时间长了会报莫名其妙的连接失败错误。因此采用阿里巴巴的Druid数据源(码云链接 ,中文文档链接)。 mybatis更多数据源参考博客链接 。

      1 环境

      eclipse mars2 + maven3.3.9 + mysql5.7

      2 开发过程

      项目码云地址链接

      文件目录结构如下: 

      2.0 建立数据表

      在本地mysql数据库中建立名为test的database,并建立user表:


      CREATE DATABASE test default charset=utf8; CREATE TABLE `user` (
      `name` varchar(64) DEFAULT NULL,
      `age` int(11) DEFAULT NULL
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into `user`(`name`,`age`) values ('叶莜落',27),('张三丰',128);

      2.1 建立一个maven工程,POM文件如下:

      <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>com.yeyouluo.mybatis.druid</groupId>
      <artifactId>mybatis-druid</artifactId>
      <version>0.0.1-SNAPSHOT</version> <properties>
      <myabtis.version>3.4.1</myabtis.version>
      </properties> <dependencies>
      <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${myabtis.version}</version>
      </dependency>
      <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.30</version>
      </dependency>
      <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.0.14</version>
      </dependency>
      </dependencies>
      </project>

      2.2 配置文件

      ①db.properties

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

      ②mybatis-config.xml

      <?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>
      <!-- 引用db.properties配置文件 -->
      <properties resource="db.properties" /> <typeAliases>
      <typeAlias type="com.yeyouluo.mybatis.druid.utils.DruidDataSourceFactory"
      alias="DRUID" />
      </typeAliases> <!-- development : 开发模式 work : 工作模式 -->
      <environments default="work">
      <environment id="work">
      <transactionManager type="JDBC" />
      <!-- 配置数据库连接信息 -->
      <dataSource type="DRUID">
      <!-- value属性值引用db.properties配置文件中配置的值 -->
      <property name="driver" value="${driver}" />
      <property name="url" value="${url}" />
      <property name="username" value="${username}" />
      <property name="password" value="${password}" />
      </dataSource>
      </environment>
      </environments> <!-- mybatis的mapper文件,每个xml配置文件对应一个接口 -->
      <mappers>
      <mapper resource="mapper/userMapper.xml" />
      </mappers>
      </configuration>

      ③在resources目录下建立userMapper.xml

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
      "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
      <mapper namespace="com.yeyouluo.mybatis.druid.dao.userDao">
      <select id="findAllUsers" resultType="com.yeyouluo.mybatis.druid.pojo.User">
      select * from user
      </select>
      </mapper>

      2.3 实体类 User

      package com.yeyouluo.mybatis.druid.pojo;
      
      public class User {
      
          private String name;
      private int age; public String getName() {
      return name;
      } public void setName(String name) {
      this.name = name;
      } public int getAge() {
      return age;
      } public void setAge(int age) {
      this.age = age;
      } @Override
      public String toString() {
      return "User [name=" + name + ", age=" + age + "]";
      } }

      2.4 工具类

      ①DruidDataSourceFactory.java

      package com.yeyouluo.mybatis.druid.utils;
      
      import java.sql.SQLException;
      import java.util.Properties;
      import javax.sql.DataSource;
      import org.apache.ibatis.datasource.DataSourceFactory;
      import com.alibaba.druid.pool.DruidDataSource; public class DruidDataSourceFactory implements DataSourceFactory {
      private Properties props; @Override
      public DataSource getDataSource() {
      DruidDataSource dds = new DruidDataSource();
      dds.setDriverClassName(this.props.getProperty("driver"));
      dds.setUrl(this.props.getProperty("url"));
      dds.setUsername(this.props.getProperty("username"));
      dds.setPassword(this.props.getProperty("password"));
      // 其他配置可以根据MyBatis主配置文件进行配置
      try {
      dds.init();
      } catch (SQLException e) {
      e.printStackTrace();
      }
      return dds;
      } @Override
      public void setProperties(Properties props) {
      this.props = props;
      }
      }

      ②MyBatisUtil.java

      package com.yeyouluo.mybatis.druid.utils;
      
      import java.io.InputStream;
      
      import org.apache.ibatis.io.Resources;
      import org.apache.ibatis.session.SqlSession;
      import org.apache.ibatis.session.SqlSessionFactory;
      import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBatisUtil {
      private static final String configFile = "mybatis-config.xml"; /**
      * 创建连接
      */
      public static SqlSession getSession() {
      SqlSession session = null;
      try {
      InputStream is = Resources.getResourceAsStream(configFile);
      SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
      session = factory.openSession();
      } catch (Exception e) {
      e.printStackTrace();
      }
      return session;
      } public static void closeSession(SqlSession session) {
      session.close();
      } public static void main(String[] args) {
      SqlSession session = MyBatisUtil.getSession();
      System.out.println(session);
      session.close();
      }
      }

      2.5 DAO

      ①接口IUserDao.java

      package com.yeyouluo.mybatis.druid.dao;
      
      import java.util.List;
      
      import com.yeyouluo.mybatis.druid.pojo.User;
      
      public interface IUserDao {
      public List<User> findAllUsers();
      }

      ②实现类UserDao.java

      package com.yeyouluo.mybatis.druid.dao.impl;
      
      import java.util.List;
      
      import org.apache.ibatis.session.SqlSession;
      
      import com.yeyouluo.mybatis.druid.dao.IUserDao;
      import com.yeyouluo.mybatis.druid.pojo.User;
      import com.yeyouluo.mybatis.druid.utils.MyBatisUtil; public class UserDao implements IUserDao { private static final String namespace = "com.yeyouluo.mybatis.druid.dao.userDao."; @Override
      public List<User> findAllUsers() {
      List<User> users = null;
      SqlSession session = MyBatisUtil.getSession();
      try {
      users = session.selectList(namespace + "findAllUsers", User.class);
      //注意:此处有陷阱,如果做了更新、插入或删除操作,必须使用:
      //session.commit();
      } catch (Exception e) {
      e.printStackTrace();
      }finally{
      MyBatisUtil.closeSession(session);
      }
      return users;
      } }

      2.6 测试类UserDaoTest.java

      package com.yeyouluo.mybatis.druid.dao.test;
      
      import java.util.List;
      
      import com.yeyouluo.mybatis.druid.dao.IUserDao;
      import com.yeyouluo.mybatis.druid.dao.impl.UserDao;
      import com.yeyouluo.mybatis.druid.pojo.User; public class UserDaoTest { public static void main(String[] args) {
      // TODO Auto-generated method stub
      IUserDao userDao = new UserDao();
      List<User> users= userDao.findAllUsers(); for(User user : users){
      System.out.println(user.toString());
      }
      } }

      3 结果

      4 参考

      Jar程序使用MyBatis集成阿里巴巴druid连接池

使用MyBatis集成阿里巴巴druid连接池(不使用spring)的更多相关文章

  1. Jar程序使用MyBatis集成阿里巴巴druid连接池

    在写jar程序,而不是web程序的时候,使用mybatis作为持久层,可以集成POOLED连接池,而阿里的druid不能用,确实很郁闷.不过有办法. 首先准备好数据库配置文件 然后对Druid进行一个 ...

  2. Mybatis 搭配 阿里druid连接池 连接 oracle 或 mysql

    DRUID介绍 DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针 ...

  3. MyBatis学习-使用Druid连接池将Maybatis整合到spring

    目录 前言 什么是Druid连接池 Druid可以做什么? 导入库包 连接oracle 连接mysql 导入mybatis 导入druid 导入spring-jdbc包 导入spring包 导入spr ...

  4. SpringBoot 配置阿里巴巴Druid连接池

    在Spring Boot下默认提供了若干种可用的连接池(dbcp,dbcp2, tomcat, hikari),当然并不支持Druid,Druid来自于阿里系的一个开源连接池,它提供了非常优秀的监控功 ...

  5. SpringBoot学习:整合MyBatis,使用Druid连接池

    项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 (一)添加pom依赖: <!-- https://mvnrepository.co ...

  6. SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

    原文链接 我们这一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池 ...

  7. spring+mybatis+c3p0数据库连接池或druid连接池使用配置整理

    在系统性能优化的时候,或者说在进行代码开发的时候,多数人应该都知道一个很基本的原则,那就是保证功能正常良好的情况下,要尽量减少对数据库的操作. 据我所知,原因大概有这样两个: 一个是,一般情况下系统服 ...

  8. springboot整合druid连接池、mybatis实现多数据源动态切换

    demo环境: JDK 1.8 ,Spring boot 1.5.14 一 整合durid 1.添加druid连接池maven依赖 <dependency> <groupId> ...

  9. springboot集成druid连接池

    使用druid连接池主要有几步: 1.添加jar和依赖 <groupId>org.mybatis.spring.boot</groupId> <artifactId> ...

随机推荐

  1. Java 中的变量

    变量 Java 程序的变量大体可分为成员变量和局部变量. 局部变量 形参:在方法签名中定义的局部变量,由方法调用者负责为其赋值,随方法的结束而消亡. 方法内的局部变量:在方法内定义的局部变量,必须在方 ...

  2. 使用telnet发送HTTP请求

    使用telnet发送HTTP请求 写这篇博客,其实没有太大的实际意义,但是还是很有必要的,如果用好Telnet指令,就可以很好的理解HTTP的一些概念,特别是http1.1的持续链接. 要想使用Tel ...

  3. Maven初步

    Maven初入 maven 是一个项目管理工具, 它包含了一个 项目对象模型(Project Object Model POM), 一组标准集合, 一个项目生命周期(Project Lifecycle ...

  4. mysql关于char和varchar的查询效率问题

    看了好多资料都说 varchar(size) 可变长度的字符值,节省空间,查询效率低 char(size) 固定长度的字符值,浪费空间,查询效率高 但是实际测试  char(100)   varcha ...

  5. ios MVVM实践 刷新网络请求+tableView展示数据

    [实现效果] [目录结构相关] 此示例展示用的是MVVM结构形式,表述如下 M:数据Model的存储,可以用来对属性进行处理.(即胖model概念,上图中xx万人订阅这个处理方法写在Model内) V ...

  6. query返回值

    总结:PDO::query($sql)返回值是一个对象,其中包括了你输入的sql语句    而fetch()方法执行成功则返回包含一条记录的数组,失败返回false. $rs = $pdo -> ...

  7. php之插入排序

    <?phpfunction insertSort($arr) {  //插入排序    $len = count($arr);    for($i=1;$i<$len;$i++){     ...

  8. MTU,MSS基本概念

    传输层: 对于UDP协议来说,整个包的最大长度为65535,其中包头长度是65535-20=65515: 对于TCP协议来说,整个包的最大长度是由最大传输大小(MSS,Maxitum Segment ...

  9. 什么是<!DOCTYPE html>

    什么是<!DOCTYPE html>? 在HTML文档初,往往会有这么一句话<!DOCTYPE html>,那么它的意义是什么呢?它是html5标准网页声明,全称为Docume ...

  10. Core Animation 文档翻译 (第七篇)——改变Layer的默认动画

    前言 核心动画使用action对象实现它的可视化动画.一个action对象是指遵循CAAction协议并定义了Layer相关的动画行为的对象.所有的CAAnimation对象实现了这个协议,无论何时L ...