使用MyBatis集成阿里巴巴druid连接池(不使用spring)

    •  

      在工作中发现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;@Overridepublic 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连接池

转载于:https://www.cnblogs.com/helloIT/p/7676505.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

捣鼓了一个月的SharePoint

从7月底到现在&#xff0c;对SharePoint有了比较大概的理解。除了文档管理、搜索功能&#xff0c;它的整合能力很强。由于我们缺少人手、理解有限&#xff0c;有没有这方面的专家愿意兼职有关SharePoint开发&#xff1f;请联系 towangjinshenghotmail.com私事&#xff1a;由于我…

docker search从Docker Hub查找(搜索)镜像

镜像搜索 docker search 名称 列表说明&#xff1a;NAME&#xff1a;镜像名(镜像仓库源的名称)DESCRIPTION&#xff1a;对该镜像的描述STARS&#xff1a;类似 Github 里面的 star&#xff0c;表示点赞、喜欢的意思OFFICIAL&#xff1a;是否 docker 官方发布AUTOMATED&#xff1…

微信js-sdk使用

var getAppidfunction(){$.ajax({url: "http://bos.foreverlynn.com/weixin/getWXUrl",dataType: "jsonp",data: {url: window.location.href},success: function (res) {if (res.code ! 200) {}wx.config({debug: false, // 开启调试模式,调用的所有api的…

***清除工具的进化

想就***清除工具的革新换代说说&#xff0c;算抛砖引玉吧&#xff0c;对付***这些东西&#xff0c;不会有穷尽的那一天&#xff0c;清除工具革新是围绕病毒***更新展开的&#xff0c;未来肯定还会有更好地清 除思路。一切为了用户的电脑更安全&#xff0c;让清除***的过程变得更…

Codeforces Round #441 D. Sorting the Coins(模拟)

http://codeforces.com/contest/876/problem/D 题意&#xff1a;题意真是难懂&#xff0c;就是给一串序列&#xff0c;第i次操作会在p[x]&#xff08;1<x<i&#xff09;这些位置放上硬币&#xff0c;然后从左到右观察&#xff0c;如果第i个位置有硬币但第i1个位置没有硬币…

Oracle 数据库实例启动关闭过程

-- -->Oracle 数据库实例启动关闭过程 -- /* Oracle数据库实例的启动&#xff0c;严格来说应该是实例的启动&#xff0c;数据库仅仅是在实例启动后进行装载。Oracle数据启动的过程被划分为 几个不同的步骤&#xff0c;在不同的启动过程中&#xff0c;我们可以对其实现不同的…

mysql求差集

mysql怎么求差集? mysql如何查询两个字段数不同的表中数据不一致的记录 一般可用NOT EXISTS&#xff08;非存在子句&#xff09;或 LEFT JOIN左&#xff08;右&#xff09;连接后所产生空字段值来筛选两表的差集 classinfo表 student表 1、NOT EXISTS not exists在比对字段…

C#判断字符串是否为数字字符串

在进行C#编程时候&#xff0c;有的时候我们需要判断一个字符串是否是数字字符串&#xff0c;我们可以通过以下两种方法来实现。 【方法一】&#xff1a;使用 try{} catch{} 语句。 我们可以在try语句块中试图将string类型的字符串变量转换为int类型&#xff0c;如果该字符…

SQLPLUS命令使用大全

SQL*PLUS命令的使用大全Oracle的sql*plus是与oracle进行交互的客户端工具。在sql*plus中&#xff0c;可以运行sql*plus命令与sql*plus语句。 我们通常所说的DML、DDL、DCL语句都是sql*plus语句&#xff0c;它们执行完后&#xff0c;都可以保存在一个被称为sql buffer的内存区域…

html5表单实现简单计算器

html5表单实现简单计算器 <!DOCTYPE html><html><head> <title>this is a html page</title></head><body> <form οninput"res.value n1.valueAsNumber * n2.valueAsNumber"> <input type"number" …

[举一反三]使用javascript转换字符串为dom对象(字符串动态创建dom)

前言&#xff1a; 在javascript里面动态创建标准dom对象一般使用&#xff1a; var obj document.createElement(div); 然后再给obj设置一些属性。 但是&#xff0c;在实际使用过程中&#xff0c;有些人可能会想&#xff0c;要是能这样创建标准的dom对象就好了 伪代码&#xff…

propattr区别和用法,以多选框为例

1.比较 相同点 : prop和attr作为jquery的方法都可以获取属性值; 不同点 : (1) 对于HTML元素本身就带有的固有属性&#xff0c;使用prop方法, attr获取checkbox的checked属性时选中的时候可以取到值,值为"checked"但没选中获取值就是undefined。 jq提供新的方法“prop…

20100506网络互联技术实验

请下载附件转载于:https://blog.51cto.com/network0546/310493

python学习笔记(15)循环设计

python学习笔记&#xff08;15&#xff09;循环设计 原链&#xff1a;http://www.cnblogs.com/vamei/archive/2012/07/09/2582435.html 注意&#xff1a;zip()在python2 3里面不一致 #第15讲 循环设计#循环在前面是有学习的&#xff0c;简单的循环for i in range(10):print (i*…

docker search 镜像关键词

查找镜像 docker search 镜像关键词 比如我要搜索nginx docker search nginx 参数说明&#xff1a; NAME: 镜像仓库源的名称 DESCRIPTION: 镜像的描述 OFFICIAL: 是否 docker 官方发布 stars: 类似 Github 里面的 star&#xff0c;表示点赞、喜欢的意思。 AUTOMATED: …

集群NAS+SSD如虎添翼

今天&#xff0c;集群NAS和基于文件的存储为什么会这么火&#xff1f;IDC提供的一些数据也许可以说明问题。从2005年到2011年&#xff0c;全球基于文件的存储年均增长率达到79.3%&#xff0c;而基于块级的存储年均增长率为31%。2008年是一道分水岭。在这一年&#xff0c;全球基…

C#3种常见的定时器(多线程)

总结以下三种方法&#xff0c;实现c#每隔一段时间执行代码&#xff1a; 方法一&#xff1a;调用线程执行方法&#xff0c;在方法中实现死循环&#xff0c;每个循环Sleep设定时间&#xff1b; 方法二&#xff1a;使用System.Timers.Timer类&#xff1b; 方法三&#xff1a;使用S…

在WORD中插入带圈的数字的序号

在WORD中可以通过插入符号的方式插入带圈的数字1至10&#xff0c;但超过10就没有办法了。常规也够 用了&#xff0c;但情况总有特殊的&#xff0c;如果不够再要插入11以上的怎么办&#xff1f;一般介绍使用“格式→中文版式→带圈字符”功能。但圈和圈内的数字总有不匹配的感觉…