Spring学习笔记(五)----Web项目整合、JdbcTemplate
Spring 整合 Web 项目
ApplicationContext 类处于 Action 层,每产生一个 Action 会存在效率问题
实现原理
- ServletContext 对象(只有唯一的一个对象)
- 监听器
在服务器启动时,为每个项目创建一个 ServletContext 对象
监听到 ServeletContext 创建时,加载 Spring 配置文件并创建配置好的对象
将对象放到 ServeletContext 对象中 (setArrtibute方法)
获取对象(getAttribute方法)
配置监听器
需要导入 spring-web jar 包
// web.xml
<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener </listener-class>
</listener>
指定 spring 配置文件位置
// web.xml
// 默认会找\WEB-INF\applicationContext.xml
<context-parm>
<param-name> contextConfigLocation </param-name>
<param-value> classpath:applicationContext.xml </param-value>
</context-parm>
Spring 的 JdbcTemplate 操作
Spring 对不同的持久化技术都进行了封装 (Dao 层技术)
准备
- 导入 Jar 包
- spring-jdbc
- spring-tx
- jdbc(数据库驱动的 jar 包,如:mysql-connector)
数据库操作
// 1。 创建对象,设置数据库信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSourrce.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///test");
dataSource.setUsername("root");
dataSource.setPardword("root");
// 2. 创建 jdbcTemplate 对象,设置数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
// 3. 使用 jdbcTemplate 的方法进行操作
// 增加数据
String sql = "insert into table values(?,?)";
int rows = jdbcTemplate.updae(sql, "Jeson", "100");
System.out.println(rows);
// 删除数据
String sql = "delete from table where xx=?";
int rows = jdbcTemplate.update(sql, "xxx");
System.out.println(rows);
// 修改数据
String sql = "update table set xx=? where xx=?";
int rows = jdbcTemplate.update(sql, "xxx", "xxx");
System.out.println(rows);
// 查询数据
// 查询返回一个值
String sql = "seletc count(*) from table";
int count = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(count);
// 查询返回对象
class MyRowMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int num) throws SQLException {
// 从结果集得到数据并封装到自己定义的类中
String username = rs.getString("username");
String password = rs.getString("password");
User user = new User();
user.setUseranme(username);
user.setPassword(password);
return user;
}
}
String sql = "select * from table where xx=?";
User user = jdbcTemplate.queryForObject(sql, new MyRowMapper(), "xx");
System.out.println(user);
// 查询返回 List
String sql = "select * from talbe";
List list = jdbcTemplate.query(sql, new MyRowMapper());
Syste.out.println(list);
Spring 配置连接池和 Dao 使用 JdbcTemplate
Spring 配置 c3p0 连接池
jar包:c3p0 和 machange-commons-java
<!-- 配置连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 注入属性 -->
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql///test"/>
<property naem="user" value="root"/>
<property name="password" value="root"/>
</bean>
Dao 使用 JdacTemplate
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"/>
</bean>
@Component(value="userDao")
public class UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void show() {
String sql = "select * from talble";
List list = jdbcTemplate.queryForByObject(sql, new MyRowMapper());
// TODO
}
}