版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44580977/article/details/95110508
- 对称型数据库控制
数据库操作
##由下层到上层讲解
1.Mysql库驱动包,由数据库厂商统一按照java jdbc接口实现
Mysql驱动包内使用数据库
//1. 注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2. 定义sql
String sql = "insert into account values(null,'王五',3000)";
//3.获取Connection对象
conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
//4.获取执行sql的对象 Statement
stmt = conn.createStatement();
//5.执行sql
int count = stmt.executeUpdate(sql);//影响的行数
2.JDBC API封装了 数据库驱动 加载配置信息(其实他就是接口,各个数据库驱动包是是实现了JDBC
1.JDBC API使用数据库操作
在静态代码块内
代码语言:javascript复制Static{
Properties pro = new Properties();
//获取src路径下的文件的方式--->ClassLoader 类加载器
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
URL res = classLoader.getResource("jdbc.properties");
String path = res.getPath();
// System.out.println(path);///D:/IdeaProjects/itcast/out/production/day04_jdbc/jdbc.properties
//2. 加载文件
代码语言:javascript复制 // pro.load(new FileReader("D:\IdeaProjects\itcast\day04_jdbc\src\jdbc.properties"));
pro.load(new FileReader(path));
//3. 获取数据,赋值
代码语言:javascript复制 url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
//4. 注册驱动
代码语言:javascript复制 Class.forName(driver);
}
2.配置文件应该怎么写?
代码语言:javascript复制url=jdbc:mysql:///db3
user=root
password=root
driver=com.mysql.jdbc.Driver
3.缺点:
* 数据库频繁创建链接,关闭链接,浪费资源
**下面就出现了druid连接池技术,
使用阿里巴巴提供的druid
实际上就相当于一个存放数据库连接的容器,当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。其实就是一个容器(集合),存放数据库连接的容器。
阿里巴巴 连接池工具 druid 包 使用方式
1.使用工厂类 创建连接池 : 这需要配置文件对象 作为 工厂类的创建连接池的参数
代码语言:javascript复制 static private DataSource ds
=DruidDataSourceFactory.createDataSource(配置文件对象);
2.配置文件对象怎么加载?
1.先要创建一个 配置文件对象 来加载配置文件new Properties();
2.加载配置文件成字节流
1.要找到配置文件的路径
1.JDBCUtils.class找到父类路径,即 class<T>的路径
2.JDBCUtils.class.getClassLoader获得类加载器,他也是一个java类,里面存有类加载器的信息,其中就有路径
2.JDBCUtils.class.getClassLoader().getResourceAsStream在类加载器目录下搜索配置文件,性能高
3.配置文件内容怎么填?
代码语言:javascript复制driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///day23
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000
4.实质是什么?
一个更加方便管理数据库连接的工具
3. Spring JDBC 框架对JDBC进行了简单的封装。
1.提供了一个JDBCTemplate对象简化JDBC的开发
需要的包有以下几个
1.如何使用spring JDBCTemplate?
1.需要DataSource连接池对象
New JdbcTemplate(ds)
2.如何完成增删改查的操作呢CRUD?
- 非对称性数据库控制
1.redies为什么要用redies
* 查询速度:比mysql快太多了
* 储存格式:可以存的形式很多如文档,图片形式等,还有集合对象等,而数据库只能存基础类型
2. redies键值可以存哪些数据类型?
1) 字符串类型 string
2) 哈希类型 hash
3) 列表类型 list
4) 集合类型 set
5) 有序集合类型 sortedset
3.redies有哪些应用场景?
• 缓存(数据查询、短连接、新闻内容、商品内容等等)
• 聊天室的在线好友列表
• 任务队列。(秒杀、抢购、12306等等)
• 应用排行榜
• 网站访问统计
• 数据过期处理(可以精确到毫秒
• 分布式集群架构中的session分离
4.java中如何使用?
1. 导入jedis的jar包
2. 使用
这里值举出了String烈性的存储
//1. 获取连接
Jedis jedis = new Jedis("localhost",6379);
//2. 操作
jedis.set("username","zhangsan");
Jedies.get(“username”);
//3. 关闭连接
jedis.close();
因为上面存在申请创建连接和关闭连接,存在资源的浪费
解决资源浪费,这里使用jedis连接池,和druid同理
* jedis连接池: JedisPool
1. 创建JedisPool连接池对象
2. 调用方法 getResource()方法获取Jedis连接
代码语言:javascript复制 //0.创建一个配置对象
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50);
config.setMaxIdle(10);
//1.创建Jedis连接池对象
代码语言:javascript复制 JedisPool jedisPool = new JedisPool(config,"localhost",6379);
//2.获取连接
代码语言:javascript复制 Jedis jedis = jedisPool.getResource();
//3. 使用
代码语言:javascript复制 jedis.set("hehe","heihei");
//4. 关闭 归还到连接池中
代码语言:javascript复制 jedis.close();
* 连接池工具类
代码语言:javascript复制 public class JedisPoolUtils {
private static JedisPool jedisPool;
static{
//读取配置文件
InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
//创建Properties对象
Properties pro = new Properties();
//关联文件
try {
pro.load(is);
} catch (IOException e) {
e.printStackTrace();
}
//获取数据,设置到JedisPoolConfig中
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
//初始化JedisPool
jedisPool = new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));
}
1.为什么要加个配置让带啊变得繁琐?
工具类的原则就是,将配置和代码分离,实现灵活的改变端口