目录
首先先将我们需要的环境搭建好,我们需要连接数据库,这里我们使用Mysql8.0版本的。
1、phpstudy安装
phpstudy是什么呢?它能干什么呢?
phpStudy是用于PHP调试环境的程序集成软件包。该软件包集成了最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无需进行配置,这是一个非常方便且易于使用的PHP调试环境。该程序不仅包括PHP调试环境,还包括开发工具,开发手册等。
下载完之后,先把电脑上原来的mysql卸载 先备份原来的Mysql数据库。我们统一安装8.0版本的。防止出现不兼容等问题。
然后可以检查我们的数据密码啦!
2、安装Navicat
通俗点说,Navicat就是一种mysql图形化工具,方便用户直接操作数据库。
安装完之后,应该先将phpstudy中的mysql开启,否则使用Navicat连接的时候,会连接不上。
2.1、建立连接
2.2、创建数据库
2.3、 建表
以上准备工作已经做好啦!
3、创建项目
下面先创建工程项目,打开ideal
为什么这里要使用Module创建项目而不用Project呢?
因为使用Module创建项目,ideal不会重新打开一个界面,而且会很方便的看到以前我们创建的项目,这样就方便我们查看以前的项目啦!
3.1、导入依赖包
项目创建完之后,导依赖包,将这些依赖包导到
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.3.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.3.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.3.8</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.3.8</version>
</dependency>
3.2、Spring容器配置bean
这里一定要注意1.2连接数据库的url中,我这里“jdbc:mysql://localhost:3306/spring?characterEncoding=utf8&”中的spring是我的数据库名,需要根据自己的数据库名字进行修改。
<!--开启注解-->
<context:component-scan base-package="com.springjdbc"/>
<!-- DriverManagerDataSource 数据库打开和关闭连接 -->
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
<!-- 1.1.数据库驱动 -->
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<!-- 1.2.连接数据库的url -->
<property name="url" value="jdbc:mysql://localhost:3306/spring?characterEncoding=utf8&serverTimezone=UTC"/>
<!-- 1.3.连接数据库的用户名 -->
<property name="username" value="root"></property>
<!-- 1.4.连接数据库的密码 -->
<property name="password" value="root"></property>
</bean>
<!-- 数据库增删改查的工具类-->
<bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
下面就可以对单表进行增删改查了。
3.3、数据库操作
创建Person.java类
package org.example;
public class Person {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
}
创建PersonDao.java类
实现增删改查功能
package org.example;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class PersonDao {
@Autowired
JdbcTemplate jdbcTemplate;
public void addPerson(){
int age=30;
String name="tttt";
//student为表名
jdbcTemplate.update("INSERT INTO student values(null ,?,?)",age,name);
}
public void deletePerson(){
int id=1;
jdbcTemplate.update("delete from student where id=?",id);
}
public void queryPerson(){
String name="tst";
RowMapper<Person> personDaoRowMapper=new BeanPropertyRowMapper<>(Person.class);
List<Person> personList=jdbcTemplate.query("select * from student where name=?",personDaoRowMapper,name);
for (Person person:personList){
System.out.println(person.getId()+" "+person.getName()+" "+person.getAge());
}
}
public void updatePerson(){
String name="test123";
int id=2;
jdbcTemplate.update("update student set name=? where id=?",name,id);
}
}
3.4、运行结果
4、连接池
为什么要使用连接池呢?
数据库连接是非常占用资源的,尤其是在高并发的情况下,如果每次都去建立数据库连接就会有性能问题,也会影响一个应用程序的延展性,针对这个问题,连接池出现了,连接池就是为了解决这个问题的。
实现对内统一管理连接,使之复用,对外提供获取、释放方法。而且放于内存中。
4.1、druid连接池
4.1.1、导入依赖包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.5</version>
</dependency>
4.1.2、连接池配置
<!-- druid 数据源连接池-->
<bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
<!-- 数据库驱动-->
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test01?characterEncoding=utf8&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<!--==============DRUID连接池相关配置==================-->
<!--初始化时建立物理连接的个数-->
<property name="initialSize" value="5"/>
<!--最小连接池数量-->
<property name="minIdle" value="10"/>
<!--最大连接池数量-->
<property name="maxActive" value="100"/>
<!--连接时最大等待时间,单位毫秒-->
<property name="maxWait" value="60000"/>
<!--配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒-->
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<!--配置一个连接在池中最小生存的时间,单位是毫秒-->
<property name="minEvictableIdleTimeMillis" value="300000"/>
<!--用来检测连接是否有效的SQL,要求是一个查询语句-->
<property name="validationQuery" value="SELECT 1 FROM DUAL"/>
<!--申请连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能-->
<property name="testOnBorrow" value="true"/>
<!--归还连接时执行 validationQuery 检测连接是否有效,做了这个配置会降低性能-->
<property name="testOnReturn" value="true"/>
<!--建议配置为true,不影响性能,并且保证安全性;申请连接的时候检测,如果空闲时间大于
timeBetweenEvictionRunsMillis,执行 validationQuery 检测连接是否有效-->
<property name="testWhileIdle" value="true"/>
<!--是否缓存preparedStatement,也就是 PSCache-->
<property name="poolPreparedStatements" value="true"/>
<!--指定每个连接上 PSCache 的大小-->
<property name="maxOpenPreparedStatements" value="20"/>
<!-- 打开清除废弃连接功能 -->
<property name="removeAbandoned" value="true"/>
<!--清除废弃连接的超时时间-->
<property name="removeAbandonedTimeout" value="1800"/>
<!-- 关闭 清除 连接时输出错误日志 -->
<property name="logAbandoned" value="true"/>
<!--配置监控统计拦截的filters,属性类型是字符串,通过别名的方式配置扩展插件,
常用的插件有:监控统计用的STAT;日志用的log4j;防御SQL注入的wall-->
<!-- <property name="filters" value="stat,wall,log4j"/>-->
<!--通过 connectProperties 属性来打开mergeSql功能;慢SQL记录-->
<property name="connectionProperties" value="druid.stat.merggSql=ture;druid.stat.slowSqlMillis=5000"/>
<!--合并多个DruidDataSource的监控数据-->
<property name="useGlobalDataSourceStat" value="true"/>
</bean>
如果你是建立在上面没有配置连接池的方法上,一定要先将下面这个删除,再按照上面配置连接池哈!