DBCP-template

xiaoxiao2021-02-28  115

jdbc template spring提供 DBCP   基于jdbc,操作数据库速度比较快,优于hibernate但是功能没hibernate强大,增删改可以用,查询用起来比较麻烦 DBCP(DataBase Connection Pool)数据库连接池,是java数据库连接池的一种,由Apache开发,通过数据库连接池,可以让程序自动管理数据库连接的释放和断开。 DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要2个包:commons-dbcp.jar,commons-pool.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。 使用,首先jar包支持 commons-pool.jar commons-dbcp.jar mysql-connector-java-5.1.12-bin.jar 在之前的基础上加上spring-tx-4.2.0.RELEASE 这个包 基础jar包 这里要使用dbcp的话我们首先需要做的是配置spring的dataSource 同样的这也是我们以后要使用数据库主要的核心 <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/emp" /> <property name="username" value="root" /> <property name="password"  value="admin"/> <property name="maxActive" value="10"></property> <property name="initialSize" value="2"></property> <property name="minIdle" value="2"></property> <property name="maxIdle" value="3"></property> </bean> 解释: <property name="maxActive" value="10"></property> 连接池中最多10个链接 <property name="initialSize" value="2"></property> 池子创建好后一开始就有2个链接 <property name="minIdle" value="2"></property>  最小空娴熟  <property name="maxIdle" value="3"></property>最大空闲数 --------------------------------------------------------------------------------------------------------- 配置好了之后我们就可以正常使用了,在类中要使用我们首先要见过这个dbcp注入到类中去 完成注入: <bean name="userDaoImpl" class="com.spring.dbcp.UserDaoImpl"> <property name="dataSource" ref="dataSource"></property> </bean> 然后需要让你的类继承JdbcDaoSupport这个类就可以了(最简单的方式) public class UserDaoImpl extends JdbcDaoSupport 最后this.getJdbcTemplate()--获得jdbc模板就可以了 <bean id="userDao" class="com.wode.dao.impl.UserDaoImpl"> <property name="dataSource" ref="dataSource"></property> </bean> public class UserDaoImpl extends JdbcDaoSupport implements UserDao  { @Override public int addUser(String name, String pwd) { String sql="insert into users values(null,'xiaohuang','admin',1)"; //通过异常判断是否执行成功 int reulst=this.getJdbcTemplate().update(sql); return reulst; } ------------------------------------------------------------------------------------------ 不过这里很麻烦,因为要继承类,我们有一种不需要继承的写法 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean> 然后在我们的类中 @Resource private JdbcTemplate template; 这样就能获得了 案例: 演示增删改的操作 注意这个我们用的这个函数函数的有两个常用的参数update(sql,new Object[]{})----注意第一个参数是sql语句,如果有参数用占位符,第二个参数为设置占位符参数的位置 那我们的查询呢? 除了这个方法我们还有 queryForObject(sql,new UserMapper());---查处一个对象放在一个OBJECT中 queryForList(sql)---返回list数组对象 query(sql,rowMappwe)--查询结果集 queryForInt(sql);--查询聚合函数  count avg max min ---注意我们也可以是用匿名类简化一下 -------------------------------------------------------------------------------------------- public List<User> getAllUser(){ String sql="select * from users"; List<User> list=jdbcTemplate.query(sql,new RowMapper(){ @Override public Object mapRow(ResultSet arg0, int arg1) throws SQLException { User u=new User(); if(arg0!=null){ u.setUserId(arg0.getInt("user_id")); u.setUserName(arg0.getString("user_name")); u.setUserPwd(arg0.getString("user_pwd")); u.setUserId(arg0.getInt("user_type")); } return u; } }); return list; } ---------------------------------------------------------------------------------------- 多表 public List<User> getAllUserAndInfo(){ String sql="select u.user_name,u.user_type,i.info_nickName,i.info_email from users u left join userInfo i on u.user_id=i.user_id "; List<User> list=jdbcTemplate.query(sql,new RowMapper(){ @Override public Object mapRow(ResultSet arg0, int arg1) throws SQLException { User u=new User(); if(arg0!=null){ u.setUserName(arg0.getString("user_name")); u.setUserType(arg0.getInt("user_type")); UserInfo info=new UserInfo(); info.setInfoEmail(arg0.getString("info_email")); info.setInfoNickName(arg0.getString("info_nickName")); u.setInfo(info); } return u; } }); return list; } ---------------------------------------------------------------------------------------- 注意这里Spring2.5开始新增了一个类BeanPropertyRowMapper 我们可以这么玩 public List<User> findAll() { String sql="select * from d_user"; return (List<User>) this.getJdbcTemplate().query(sql,new BeanPropertyRowMapper(User.class));---这里 } 我们就不用那么麻烦的去做一对mapper了 注意命名规则user_id---userId 想一想它的好处坏处都有啥
转载请注明原文地址: https://www.6miu.com/read-39589.html

最新回复(0)