发表于: 2017-10-28 21:55:31
1 719
今天完成的事
【一,准备做springmvc的更改操作】
//以下是一个修改修改学生院学生信息的语句。
@RequestMapping("/updateStudent")
public String updateStudent(HttpServletRequest request, HttpServletResponse response , HttpSession session , Model model){
//下面的语句用来拿到一个ID。
String idStu=request.getParameter("id");
//下面涉及了一个查询并且传入语句是string的话那我们进行转型
Student student= studentService.selectStudentById(Integer.parseInt(idStu));
//Model 模型中放入了返回给页面的数据
//model 底层就是用了requst域传递数据,但对request进行了扩展
model.addAttribute("student", student);
// request.setAttribute();
//如果springMVC方法返回一个简单的string字符串,那么springMVC就会认为这个字符串就是页面的名称
return "updateStudent";
}
但是失败了。因为jsp写不好。。明天再说。。。
【二,准备了一哈小课堂】
讲了一个比较浅显的知识点。。
连接池优化我们的数据库
为什么使用连接池
Connection对象在JDBC使用的时候.使用的时候就会去创建一个对象,使用结束以后就会将这个对象给销毁了.每次创建和销毁对象都是耗时操作.需要使用连接池对其进行优化.程序初始化的时候,初始化多个连接,将多个连接放入到池中(内存中).每次获取的时候,都可以直接从连接池中进行获取.使用结束以后,将连接归还到池中.
百度是这样说的。
简单理解就是
使用jdbc的时候,每操作一次都需要获取连接(创建)用完之后把连接释放掉了(销毁),通过连接池来优化curd操作。
连接池就像一个大池子一旦初始化就放入很多很多的链接,用的时候你来这个大池子里取,用完之后你再归还给我。这个就是我们的连接池。
作用:
提高项目的性能.
比如双十一的时候我每次只创建一个链接,好几亿人剁手,那服务器可能一定会崩掉。
所以这就体现了连接池的必要性,就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可.
连接池的规范。
所有的连接池必须实现一个接 口 javax.sql.DataSource接口
获取连接方法:
Connection getConnection()
归还连接的方法就是以前的释放资源的方法.调用connection.close();
自定义一个连接池(理解思想)
import java.sql.Connection;
import java.sql.SQLException;
import java.util.LinkedList;
import com.itheima.utils.JdbcUtils;
/**
* 自制低配连接池
* Mind
*
*/
public class MyDataSource {
static LinkedList<Connection> pool=new LinkedList<>();
static{
//初始化的时候 需要放入3个连接
for (int i = 0; i < 3; i++) {
try {
Connection conn = JdbcUtils.getConnection();
pool.addLast(conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//从连接池中获取连接
public static Connection getConnection(){
//获取连接的时候需要判断list是否为空
if(pool.isEmpty()){
//在添加2个连接进去
for (int i = 0; i < 3; i++) {
try {
Connection conn = JdbcUtils.getConnection();
pool.addLast(conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
System.out.println("从池中获取一个连接");
Connection conn = pool.removeFirst();
//将conn进行包装
// ConnectionWarp myConn = new ConnectionWarp(conn);
ConnectionWarp myConn = new ConnectionWarp(conn,pool);
return myConn;
}
//归还连接的方法
public static void addBack(Connection conn){
//将conn放入到list的最后面即可
pool.addLast(conn);
System.out.println("连接已归还");
}
}
注意,连接池只是一个大池子。。。。。他们里面的链接还是从JDBC里面获取的。。。
常用连接池:
DBCP(理解)(tomcat使用)
apache组织的不是son公司的,所以我们要导入jar包。
public class DbcpDemo {
@Test
//硬编码
public void f1() throws Exception{
//创建连接池
BasicDataSource ds = new BasicDataSource();
//配置信息
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql:///day07");
ds.setUsername("root");
ds.setPassword("1234");
Connection conn=ds.getConnection();
String sql="insert into category values(?,?);";
PreparedStatement st=conn.prepareStatement(sql);
//设置参数
st.setString(1, "c011");
st.setString(2, "饮料");
int i = st.executeUpdate();
System.out.println(i);
JdbcUtils.closeResource(conn, st, null);
}
@Test
public void f2() throws Exception{
//存放配置文件
Properties prop = new Properties();
prop.load(new FileInputStream("src/dbcp.properties"));
//设置
//prop.setProperty("driverClassName", "com.mysql.jdbc.Driver");
//创建连接池
DataSource ds = new BasicDataSourceFactory().createDataSource(prop);
Connection conn=ds.getConnection();
String sql="insert into category values(?,?);";
PreparedStatement st=conn.prepareStatement(sql);
//设置参数
st.setString(1, "c012");
st.setString(2, "饮料1");
int i = st.executeUpdate();
System.out.println(i);
JdbcUtils.closeResource(conn, st, null);
}
}
使用步骤
C3P0(一定要懂!)(spring和hibernate)
一般的数据库链接会用一个取一个用一个取一个,这样容易很臃肿。
有自动回收空闲连接的功能。
2.使用api
public class C3p0Demo {
@Test
//硬编码
public void f1() throws Exception{
ComboPooledDataSource ds = new ComboPooledDataSource();
//设置基本参数
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql:///day07");
ds.setUser("root");
ds.setPassword("1234");
Connection conn=ds.getConnection();
String sql="insert into category values(?,?);";
PreparedStatement st=conn.prepareStatement(sql);
//设置参数
st.setString(1, "c013");
st.setString(2, "毒药");
int i = st.executeUpdate();
System.out.println(i);
JdbcUtils.closeResource(conn, st, null);
}
@Test
public void f2() throws Exception{
//ComboPooledDataSource ds = new ComboPooledDataSource();
ComboPooledDataSource ds =new ComboPooledDataSource("itcast12321");//若查找不到命名的配置 使用默认的配置
Connection conn=ds.getConnection();
String sql="insert into category values(?,?);";
PreparedStatement st=conn.prepareStatement(sql);
//设置参数
st.setString(1, "c124");
st.setString(2, "解药");
int i = st.executeUpdate();
System.out.println(i);
JdbcUtils.closeResource(conn, st, null);
}
}
配置文件的名称:c3p0.properties 或者 c3p0-config.xml
配置文件的路径:src下
编码只需要一句话
new ComboPooledDataSource()//使用默认的配置
new ComboPooledDataSource(String configName)//使用命名的配置 若配置的名字找不到,使用默认的配置
遇到的问题
500报错。。可以说头一次见了。
解决方法,maven-clean。
在运行,没问题了。。。。我还等着找日志呢。。。玄学。
收获
对连接池进行了一下整理,顺便任务二前进了一丢地
明天要做的事
学习jsp.
评论