price
float(20,2) DEFAULT NULL,
cbs
varchar(20) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
– Records of book
INSERT INTO book
VALUES (‘1’, ‘Java从入门到精通’, ‘张三’, ‘15.00’, ‘清华大学’);
INSERT INTO book
VALUES (‘5’, ‘11’, ‘11’, ‘11.00’, ‘11’);
INSERT INTO book
VALUES (‘6’, ‘11’, ‘11’, ‘11.00’, ‘11’);
INSERT INTO book
VALUES (‘8’, ‘JavaScript入门’, ‘刘伟’, ‘55.60’, ‘哈哈’);
INSERT INTO book
VALUES (‘10’, ‘MySQL从入门到精通’, ‘刘玉徐’, ‘85.00’, ‘???’);
– Table structure for user
DROP TABLE IF EXISTS user
;
CREATE TABLE user
(
id
int(11) NOT NULL AUTO_INCREMENT,
uname
varchar(255) NOT NULL,
upass
varchar(255) DEFAULT NULL,
tel
varchar(255) NOT NULL,
address
varchar(255) NOT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=124 DEFAULT CHARSET=utf8;
– Records of user
INSERT INTO user
VALUES (‘123’, ‘123’, ‘123’, ‘123’, ‘123’);
[](()(4)创建C3P0连接池
package com.itbluebox.db;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.Test;
import java.sql.Connection;
public class TestC3P0 {
@Test
public void testC3P0() throws Exception{
//数据源
ComboPooledDataSource dataSource = new ComboPooledDataSource();
//设置数据库连接参数
dataSource.setDriverClass(“com.mysql.jdbc.Driver”);
dataSource.setJdbcUrl(“jdbc:mysql://localhost:3306/test”);
dataSource.setUser(“root”);
dataSource.setPassword(“root”);
//获得连接对象
Connection connection = dataSource.getConnection();
System.out.println(connection);
}
}
运行测试
运行成功
[](()(5)创建Druid连接池
package com.itbluebox.db;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;
import org.junit.Test;
public class TestDruid {
@Test
public void testDruid() throws Exception{
//创建数据库源
DruidDataSource dataSource = new DruidDataSource();
//设置数据库连接参数
dataSource.setDriverClassName(“com.mysql.jdbc.Driver”);
dataSource.setUrl(“jdbc:mysql://localhost:3306/test”);
dataSource.setUsername(“root”);
dataSource.setPassword(“root”);
//获取连接对象
DruidPooledConnection connection = dataSource.getConnection();
System.out.println(connection);
}
}
运行成功
[](()3、数据源的手动创建(读取jdbc.properties)
[](()(1)提取jdbc.properties配置文件
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/test
jdbc.username = root
jdbc.password = root
[](()(2)读取jdbc.properties配置文件创建连接池
package com.itbluebox.db;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.Test;
import java.sql.Connection;
import java.util.ResourceBundle;
public class TestC3P0ByProperties {
@Test
public void C3P0ByProperties() throws Exception{
//加载类路径下的jdbc.properties
ResourceBundle rb = ResourceBundle.getBundle(“jdbc”);
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(rb.getString(“jdbc.driver”));
dataSource.setJdbcUrl(rb.getString(“jdbc.url”));
dataSource.setUser(rb.getString(“jdbc.username”));
dataSource.setPassword(rb.getString(“jdbc.password”));
Connection connection = dataSource.getConnection();
System.out.println(connection);
}
}
[](()4、测试从容器当中获取数据源(applicationContext.xml)
[](()(1)创建applicationContext.xml
<beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xmlns:p=“http://www.springframework.org/schema/p”
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"
<context:property-placeholder location=“classpath:jdbc.properties”></context:property-placeholder>
运行测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7PkEMbMi-1651635195406)(https://img- 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 blog.csdnimg.cn/6e9a5167653c4db5ba58cfa2e50b1b1f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6JOd55uS5a2QaXRibHVlYm94,size_20,color_FFFFFF,t_70,g_se,x_16)]
[](()二、Spring注解开发
[](()1、Spring原始注解
Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率。
- Spring原始注解主要是替代
<Bean>
的配置
注意:
使用注解进行开发时,需要在applicationContext.xml中配置组件扫描,
作用是指定哪个包及其子包下的Bean
[](()(1)需要进行扫描以便识别使用注解配置的类、字段和方法。
<context:component-scan base-package=“com.itbluebox”>
</context:component-scan>
在这里我们切换回第一篇文章创建的工程Spring-test-demo
<beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xmlns:p=“http://www.springframework.org/schema/p”
xmlns:context=“http://www.springframework.org/schema/context”
xsi:schemaLocation="
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"
<context:property-placeholder location=“classpath:jdbc.properties”></context:property-placeholder>
<context:component-scan base-package=“com.itbluebox”></context:component-scan>
- 完善UserDaoImpl
package com.itbluebox.dao.impl;
import com.itbluebox.dao.UserDao;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component(“userDao”)
public class UserDaoImpl implements UserDao {
@Value(“注入普通数据”)
private String str;
@Value(“${jdbc.driver}”)
private String driver;
public void save() {
System.out.println(str);
System.out.println(driver);
System.out.println(“UserDao save method running…”);
}
}
- 运行测试
[](()(6)使用@Scope标注Bean的范围
@Scope(“singleton”)
[](()(7)使用@PostConstruct标注初始化方法,使用@PreDestroy标注销毁方法
完善UserServiceImpl
package com.itbluebox.service.impl;
import com.itbluebox.dao.UserDao;
import com.itbluebox.service.UserService;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
@Service(“userService”)
@Scope(“singleton”)
public class UserServiceImpl implements UserService {
/*
@Autowired
@Qualifier(“userDao”)
*/
@Resource(name=“userDao”)
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void save() {
System.out.println(“UserServiceImpl save method running…”);
userDao.save();
}
@PostConstruct
public void init(){
or_FFFFFF,t_70,g_se,x_16)
[](()(7)使用@PostConstruct标注初始化方法,使用@PreDestroy标注销毁方法
完善UserServiceImpl
package com.itbluebox.service.impl;
import com.itbluebox.dao.UserDao;
import com.itbluebox.service.UserService;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
@Service(“userService”)
@Scope(“singleton”)
public class UserServiceImpl implements UserService {
/*
@Autowired
@Qualifier(“userDao”)
*/
@Resource(name=“userDao”)
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void save() {
System.out.println(“UserServiceImpl save method running…”);
userDao.save();
}
@PostConstruct
public void init(){