Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。
JdbcTemplate位于 spring-jdbc-4.3.5.RELEASE.jar 中。其全限定命名为org.springframework.jdbc.core.JdbcTemplate。要使用JdbcTemlate还需一个 spring-tx-4.3.5.RELEASE.jar 这个包包含了一下事务和异常控制。
除此以外,在lib文件夹里还应该包括 mysql-connector-java-8.0.16.jar (我就是没有这个jar报错)。
1、普通的JDBC连接数据库每次向数据库建立连接的时候都将connection加载到内存,再验证用户名等信息,这样会消耗一定的时间,每次的数据库连接,使用完后再断开,这样的方式会消耗大量的资源和时间。同时上千人访问的话将占用很多系统资源,导致服务器崩溃。
2、数据库连接池其实就是一个为数据库连接建立的一个“缓存池”,预先在数据库连接池中放入一定数量的连接。当需要数据库连接时,从连接池中拿就是了,用完再放回。数据库连接池负责分配、管理、释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立。
3、数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中(initialPoolSize).无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。
4、连接池的最大数据库连接数量限定了这个连接池占有的最大连接数(maxPoolSize)。当应用程序向连接池请求的连接数超过最大连接数时,这些请求将加入到等待队列中。
5、数据库连接池相对于无连接池的优点
6、常用的数据库连接池
7、c3p0和dbcp有啥区别,参考:
https://blog.csdn.net/weixin_40896352/article/details/80940646
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/cards?characterEncoding=utf8 /*cards为数据库名称*/
jdbc.username=root
jdbc.password=123456
(其实文件里 jdbc. 也有些 db. 的,应该都是可行的。)
initialPoolSize:初始化连接数量
minPoolSize:最小连接数量
maxPoolSize:最大连接数量
acquireIncrement: 当连接池用完之后一次性获取的连接数量
idleConnectionTestPeriod:根据一定的时间间隔检查连接池的连接数量 单位为秒
maxIdleTime:最大空闲时间 单位为秒
maxStatements:最大的maxStatements连接数量
maxStatementsPerConnection:最大语句缓存
在配置文件里加入:
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
@Autowired
private JdbcTemplate jdbcTemplate;
//查询语句,?与第二个参数数组里的元素一一对应
String sql="insert into usertable values(?,?)"
//填入第一个参数里的?变量
Object obj[] = {
u.getUsername(),
u.getPassword()
};
jdbcTemplate.update(sql,obj);
String sql="insert into user (name,deptid) values (?,?)";
//Object数组类型的List
List
String sql="select id,name,deptid from user where id=?";
RowMapper rowMapper=new BeanPropertyRowMapper(User.class);
User user= jdbcTemplate.queryForObject(sql, rowMapper,52);
System.out.println(user);
使用BeanProperytRowMapper要求sql数据查询出来的列和实体属性需要一一对应。如果数据中列明和属性名不一致,在sql语句中需要用as重新取一个别名。
String sql="select count(*) from user";
int count= jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(count);
String sql="select id,name,deptid from user";
RowMapper rowMapper=new BeanPropertyRowMapper(User.class);
List users= jdbcTemplate.query(sql, rowMapper);
for (User user : users) {
System.out.println(user);
}