使用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,一经查实,立即删除!

相关文章

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

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

mysql求差集

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

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" …

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: …

005-JQuery之CSS

CSS位置尺寸CSS css(name|pro|[,val|fn]) &#xff1a;访问匹配元素的样式属性示例&#xff1a; 1 // 获取color样式属性的值 2 $(p).css("color"); 3 // 将所有段落的字体颜色设为红色并且背景为蓝色 4 $("p").css({ color: "#ff0011", backgro…

扩展巴科斯范式

2019独角兽企业重金招聘Python工程师标准>>> 扩展巴科斯范式 维基百科&#xff0c;自由的百科全书 扩展巴科斯-瑙尔范式(EBNF)是表达作为描述计算机编程语言和形式语言的正规方式的上下文无关文法的元语法符号表示法。它是基本巴科斯范式(BNF)元语法符号表示法的一种…

20100519 学习记录:asp CreateFolder/上传附件

新增一个上传附件的功能。在网上找了一下&#xff0c;基本都是在化境HTTP上传程序基础上改的&#xff0c;灰常感谢这个源代码的开发者&#xff0c;深深鞠躬。不过这个代码要求在上传图片时&#xff0c;输入的文件夹必须是已存在的文件夹&#xff0c;不然就会出错&#xff0c;于…

删除容器docker rm和强制删除容器docker rm -f

显示所有容器 docker ps -a删除容器&#xff0c;运行中的容器不行 docker rm 容器id强制删除容器&#xff0c;运行中的容器也是可以删除的 docker rm -f 容器iddocker rm 删除运行中的容器会报错 Error response from daemon: You cannot remove a running container 8c03b6c4d…

Exchange2007 从零到入门(2)---收件人管理

Exchange2007 从零到入门---收件人管理在上一次的文章中讲到了如何为企业部署安装exchange2007服务器。但是部署完成的服务器还并不能使用。因为现在的服务器中还没有用户。在exchange中&#xff0c;用户被称作为“收件人”&#xff0c;exchange中用户管理的主要任务就是对“收…

Error response from daemon: You cannot remove a running container 8c03b6c4da31d435bcaf8c4a6c59938c3b

Error response from daemon: You cannot remove a running container 8c03b6c4da31d435bcaf8c4a6c59938c3b668eaff36903b13583329034508135. Stop the container before attempting removal or force remove原因&#xff1a;该容器正在运行中&#xff0c;不能直接删除 方法一…

Android零基础入门第81节:Activity数据传递

在Android开发中&#xff0c;经常要在Activity之间传递数据。前面也学习了Activity和Intent相关基础&#xff0c;接下来一起来学习Activity的数据传递。 一、简介 通过前面的学习知道&#xff0c;Intent可以用来开启Activity&#xff0c;同样它也可以用来在Activity之间传递数据…

(转)java内部类详解

本文转自http://www.cnblogs.com/dolphin0520/p/3811445.html&#xff0c;谢谢作者 说起内部类这个词&#xff0c;想必很多人都不陌生&#xff0c;但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多&#xff0c;用得最多的是在有事件监听的情况下&#xff0c;并且即…

阶段项目(一)

第四章 网页计算器&#xff08;1&#xff09;前台页面设计&#xff1a;<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />&#xff08;2&#xff09;预览效果&#xff1a;&#xff08;3&#xff09;后台代码编写&#xff1…

9款超绚丽的HTML5/CSS3应用和动画特效

HTML5 现在已经不是很前卫的东西了&#xff0c;越来越多的网站和移动应用都在不断地尝试使用HTML5来更好地优化用户体验。今天我们要分享9款超绚丽的HTML5/CSS3应用和动画特效&#xff0c;这里面有菜单、按钮、图片、Loading加载动画等&#xff0c;一定会有你需要的。 1、CSS3飘…