当前位置: 首页 > news >正文

spring dbcp mysql_spring与Dbcp

基于jdbc,操作数据库速度比较快,优于hibernate但是功能没hibernate强大,增删改可以用,查询用起来比较麻烦

使用,首先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 同样的这也是我们以后要使用数据库主要的核心

解释:

连接池中最多10个链接

池子创建好后一开始就有2个链接

最小空闲数

最大空闲数

配置好了之后我们就可以正常使用了,在类中要使用我们首先要见过这个dbcp注入到类中去

完成注入:

然后需要让你的类继承JdbcDaoSupport这个类就可以了(最简单的方式)

public class UserDaoImpl extends JdbcDaoSupport

最后this.getJdbcTemplate()--获得jdbc模板就可以了

不过这里很麻烦,因为要继承类,我们有一种不需要继承的写法

然后在我们的类中

@Resource

private JdbcTemplate template;

这样就能获得了

案例:

演示增删改的操作

注意这个我们用的这个函数函数的有两个常用的参数update(sql,new Object[]{})----注意第一个参数是sql语句,如果有参数用占位符,第二个参数为设置占位符参数的位置

那我们的查询呢?

除了这个方法我们还有

queryForObject(sql,new UserMapper());---查处一个对象放在一个OBJECT中

queryForList(sql)---返回list数组对象

query(sql,rowMappwe)--查询结果集

queryForInt(sql);--查询聚合函数

这里比较麻烦的是查询这个东西,因为它首先需要的是一个映射表

public class UserMapper implements RowMapper

public Object mapRow(ResultSet rs, int index) throws SQLException {

User user=new User();

user.setId(rs.getInt("id"));

user.setEmail(rs.getString("email"));

user.setNickName(rs.getString("nickname"));

if(rs.getString("is_email_verify").equals("Y")){

user.setEmailVerify(true);

}else{

user.setEmailVerify(false);

}

user.setEmailVerifyCode(rs.getString("email_verify_code"));

user.setLastLoginIp(rs.getString("last_login_time"));

return user;

}

注意这里Spring2.5开始新增了一个类BeanPropertyRowMapper

我们可以这么玩

public List findAll() {

String sql="select * from d_user";

return (List) this.getJdbcTemplate().query(sql,new BeanPropertyRowMapper(User.class));---这里

}

我们就不用那么麻烦的去做一对mapper了

想一想它的好处坏处都有啥

配置applicationContext.xml:

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-4.2.xsd">

在dao层:

@Repositorypublic class UserDaoImpl implementsUserDao{

@ResourceprivateJdbcTemplate jdbcTemplate;public voidsetJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate =jdbcTemplate;

}/*** 增加用户*/@Overridepublic intaddUser(User user) {

String sql="INSERT INTO users VALUES(null,?,?)";int result=jdbcTemplate.update(sql, newObject[]{user.getUserName(),user.getUserPwd()});returnresult;

}/*** 删除用户*/@Overridepublic int delUserById(intid) {

String sql="DELETE FROM users WHERE USER_id=?";int result=jdbcTemplate.update(sql, newObject[]{id});returnresult;

}/*** 修改用户*/@Overridepublic int updateUserById(intid,User user) {

String sql="UPDATE users SET user_name=?,user_pwd=? WHERE user_id=?";int result=jdbcTemplate.update(sql, newObject[]{user.getUserName(),user.getUserPwd(),id});returnresult;

}/*** 查看用户*/@Overridepublic User selectUserById(intid) {

String sql="select * from users where user_id=?";

User user=jdbcTemplate.queryForObject(sql, new Object[]{id}, new BeanPropertyRowMapper<>(User.class));returnuser;

}

}

然后:

AbstractApplicationContext atx=new ClassPathXmlApplicationContext("applicationContext.xml");

UserService userService=(UserService) atx.getBean("userServiceImpl");

通过类似userService.updateUserById(user)的方法实现增删改查

相关文章:

  • mysql 存储引擎 对比_MySQL存储引擎(附带各种存储引擎的对比)
  • GCC精彩之旅 [zz]
  • mysql 57授权失败_完美解决mysql客户端授权后连接失败的问题
  • python显示括号错误_【求救】python中处理错误值时总是提示missing),但实际括号都是英文,也没有缺失括号,求救!!!...
  • QQ 1234days
  • new操作符的使用问题[ask in smth]
  • python王者战斗_用 Python 自动玩王者荣耀,简直不要太秀!
  • 大家在申请内存时都是如何做的?[ask in smth]
  • 单例模式获取mysql连接_获取JDBC Connection单例模式
  • centos7安装源mysql5.6_centos7.4 mysql5.6 源码安装
  • 系统安装时文件系统的选择
  • python super 多重继承_Python的super()如何处理多重继承?
  • debian系统安装
  • qt修改程序图标名称_Qt for Android修改应用程序的图标和名称
  • 一些有用的打电话,写email,写信一些有用的知识
  • JavaScript 如何正确处理 Unicode 编码问题!
  • ES6 学习笔记(一)let,const和解构赋值
  • Hibernate最全面试题
  • Intervention/image 图片处理扩展包的安装和使用
  • javascript从右向左截取指定位数字符的3种方法
  • Js基础——数据类型之Null和Undefined
  • Making An Indicator With Pure CSS
  • nodejs:开发并发布一个nodejs包
  • Python 反序列化安全问题(二)
  • Python_OOP
  • SpiderData 2019年2月16日 DApp数据排行榜
  • SpingCloudBus整合RabbitMQ
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • Vue 2.3、2.4 知识点小结
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 给新手的新浪微博 SDK 集成教程【一】
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 爬虫模拟登陆 SegmentFault
  • 前端之Sass/Scss实战笔记
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 自动记录MySQL慢查询快照脚本
  • 最近的计划
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • ​2020 年大前端技术趋势解读
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (LeetCode 49)Anagrams
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • ****Linux下Mysql的安装和配置
  • .NET 设计模式初探
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .netcore如何运行环境安装到Linux服务器
  • @RequestParam,@RequestBody和@PathVariable 区别
  • @Transaction注解失效的几种场景(附有示例代码)
  • @vue/cli脚手架
  • []C/C++读取串口接收到的数据程序