- Druid是阿里巴巴开源的数据库连接池项目,它为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。Druid连接池集合了c3p0、dbcp、proxool等连接池的优点,还加入了日志监控,有效的监控DB池连接和SQL的执行情况。
Druid相对于其他数据库连接池的优点有:
- 强大的监控特性,通过Druid提供的监控功能,可以清楚知道连接池和SQL的工作情况。
- 列式存储. Druid使用面相列的存储,对于OLAP分析需要读取列分析的场景加快了速度,同时一列数据中有很多共性的数据,数据的压缩效果好,占用空间小,支持快速扫描及聚合查询。
- 可扩展的分布式架构. Druid在生产环境中可以部署到数十台多数百台服务器组成的集群中,可以提供每秒百万条数据的写入,针对万亿条记录做到亚秒到秒级查询。
- 支持并行计算. Druid可以在集群中并行执行一个查询。
- 支持实时或者批量读取数据. Druid支持实时获取数据,实时获取的数据可以实时查询,也支持批量读取数据。
- 集群自动平衡,方便运维. Druid集群扩大或者缩小时,只需要增加或者减少对应的机器数,Druid集群自动会平衡各个节点,不需要停机。
- MyBatis是一个优秀的持久层框架,支持普通SQL查询、存储过程和高级映射。它消除了几乎所有JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain
Ordinary Java Objects,普通的Java对象)映射成数据库中的记录。
MyBatis本是Apache的一个开源项目iBatis,2010年这个项目由Apache Software Foundation迁移到了Google Code,并且改名为MyBatis。2013年11月迁移到Github。
-
灵活:MyBatis不会对SQL进行任何限制,只要求开发者编写的SQL语句遵循MyBatis的XML映射规则,所以它具有很好的灵活性。
-
易于理解:MyBatis的配置文件和映射文件都是基于XML的,结构清晰,易于理解和阅读。
-
解耦:MyBatis将SQL语句与Java代码分离,使得SQL语句更易于维护。
-
映射强大:MyBatis支持多种映射方式,包括一对一、一对多、多对一和多对多等复杂映射关系。
-
缓存支持:MyBatis提供了一级缓存和二级缓存的支持,可以有效地提高查询效率。
-
动态SQL:MyBatis支持使用动态SQL,可以根据不同的条件生成不同的SQL语句。
-
易于集成:MyBatis可以很容易地与其他框架(如Spring、Hibernate)集成,提供统一的API。
maven依赖:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<!-- Spring框架核心依赖 -->
<version>5.2.10.RELEASE</version>
</dependency>
<!--Mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<!-- MyBatis框架核心依赖 -->
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<!-- Log4j日志框架依赖 -->
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- JUnit单元测试框架依赖 -->
<version>4.12</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<!-- Druid数据库连接池依赖 -->
<version>1.2.11</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<!-- MyBatis与Spring整合依赖 -->
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<!-- Spring与JDBC整合依赖 -->
<version>5.3.10</version>
</dependency>
<!--Mysql连接依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!-- MySQL数据库驱动依赖 -->
<version>8.0.11</version>
</dependency>
</dependencies>
JdbcConfig.java具体实现代码
import javax.sql.DataSource;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
public class JdbcConfig {
@Value("${driver}") // 从配置文件中获取数据库驱动名称
String driver;
@Value("${url}") // 从配置文件中获取数据库连接URL
String url;
@Value("${username}") // 从配置文件中获取数据库用户名
String username;
@Value("${password}") // 从配置文件中获取数据库密码
String password;
@Bean // 定义一个方法,返回一个DataSource对象
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource(); // 创建一个Druid数据源对象
dataSource.setDriverClassName(driver); // 设置数据库驱动类名
dataSource.setUrl(url); // 设置数据库连接URL
dataSource.setUsername(username); // 设置数据库用户名
dataSource.setPassword(password); // 设置数据库密码
return dataSource; // 返回创建好的数据源对象
}
}
MyBatisConfig.java实现代码文件
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
public class MyBatisConfig {
// 获取sqlSessionFactory对象
@Bean
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) {
SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
// 设置数据源
ssfb.setDataSource(dataSource);
return ssfb;
}
// 扫描映射文件
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer mps = new MapperScannerConfigurer();
mps.setBasePackage("org.example.mapper");
return mps;
}
}
SpringConfing.java代码实现文件
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
@Configuration // 表示这是一个配置类
@ComponentScan("org.example") // 指定要扫描的包路径
@PropertySource("jdbc.properties") // 指定属性文件的位置
@Import({JdbcConfig.class, MyBatisConfig.class}) // 导入其他配置类
public class SpringConfing {
}
jdbc.properties配置文件
driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT-8
username = root
password = 123456