您的位置:首页 > 编程语言 > Java开发

Spring入门3:Jdbc连接池的支持

2018-03-29 22:22 351 查看

1. 数据库连接参数资源配置db.properties

driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql:///day33
user=root
password=root
initialPoolSize=3
maxPoolSize=6

2.bean.xml配置

    <!-- 开启注解 -->
<context:component-scan
4000
base-package="cn.aop.h_jdbc"></context:component-scan>

<!-- 加载properties配置文件 -->
<context:property-placeholder location="classpath:cn/aop/h_jdbc/db.properties"/>

<!-- 1. 创建连接池实例 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driverClass}"></property>
<property name="jdbcUrl" value="${jdbcUrl}"></property>
<property name="user" value="${user}"></property>
<property name="password" value="${password}"></property>
<property name="initialPoolSize" value="${initialPoolSize}"></property>
<property name="maxPoolSize" value="${maxPoolSize}"></property>
</bean>

<!-- 2. JdbcTemplate实例加入容器 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>

<!-- dao实例 -->
<bean id="userDao" class="cn.aop.h_jdbc.UserDao">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>

3.实体与dao

        //1. 实体类(属性略),数据库略(数据表的字段与实体类的成员名一致)
public class User {
private int id;
private String name;
private int age;
private char sex;
}

//2. 对象dao接口
public interface IUserDao {
void save(User user);
void delete(Serializable id);

// 测试方法
User findById(Serializable id);
List<User> findAll();
}

//3. dao实现类
public class UserDao implements IUserDao {
/*
// 优化1: 连接管理交给连接池!
private DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}

// Spring对jdbc操作支持的工具类
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
*/

//由IOC容器注入!
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}

/*
* 1. 传统的jdbc操作
* 2. 优化重复代码
*/
public void save(User user) {
String sql = "insert into t_user(name,age,sex)values(?,?,?)";
// 支持更新操作
jdbcTemplate.update(sql,user.getName(),user.getAge(),user.getSex()+"");
}

// 删除
public void delete(Serializable id) {
String sql = "delete from t_user where id=?";
jdbcTemplate.update(sql,id);
}

public User findById(Serializable id) {
// 测试1: list的元素是一个map,map就是每一行数据!
//List<Map<String, Object>> list1 = jdbcTemplate.queryForList("select * from t_user");

// 测试2: 只能查询返回一列,需要指定该列的类型
//List<String> list2 = jdbcTemplate.queryForList("select name from t_user", String.class);

// 测试3:  注意:传入的类型是查询列的类型!
//Integer i = jdbcTemplate.queryForObject("select id from t_user where id=? ", Integer.class,id);

// 查询返回一个List集合
//List<User> list = jdbcTemplate.query(sql, rowMapper);

// 查询封装对象,必须要手动处理!Spring不会帮你自动封装!
User user = jdbcTemplate.queryForObject("select * from t_user where id=?", new RowMapper<User>(){

// 告诉Spring,如何转换一行
// 参数1: 结果集
// 参数2: 当前是结果集的第几行
@Override
public User mapRow(ResultSet rs, int index) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
user.setSex(rs.getString("sex").charAt(0));
return user;
}
}, id);
return user;
}

@Override
public List<User> findAll() {
List<User> list = jdbcTemplate.query("select * from t_user", new RowMapper<User>(){

// 告诉Spring,如何转换一行
// 参数1: 结果集
// 参数2: 当前是结果集的第几行
@Override
public User mapRow(ResultSet rs, int index) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
user.setSex(rs.getString("sex").charAt(0));
return user;
}
});
return list;
}
}

5.测试

        //测试
public class App {
private ApplicationContext ac =
new ClassPathXmlApplicationContext("bean.xml",App.class);

@Test
public void testApp() throws Exception {
User user = new User();
user.setName("JK");
user.setSex('男');
user.setAge(18);

// 保存
IUserDao userDao = (IUserDao) ac.getBean("userDao");
//userDao.save(user);
//userDao.delete(2);

// 主键查询
//userDao.findById(1);

// 查询全部
System.out.println(userDao.findAll());
}
}

*若有不足或错误,请多多指教,谢谢!*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: