zoukankan      html  css  js  c++  java
  • 玩转Spring——Spring整合JDBC

    传统JDBC代码的弊端
    在传统的jdbc代码中,即使是执行一条简单的SQL语句,其实现的整个流程也是极为繁琐的,先打开数据库连接执行sql,然后组装结果,最后关闭数据库资源,这中间还有大量的try...catch...finally语句,造成了代码的泛滥,导致我们的代码可读性和可维护性急剧下降,从而引发信任问题,为了解决这些“疑难杂症”。Spring提供了自己的解决方案,那就是JdbcTemplate模板。

    实现步骤:

    1.以c3p0连接mysql为例,使用c3p0需要导入两个相关jar包:
    c3p0-0.9.1.2.jar
    以及数据库jar: mysql-connector-java-5.1.7-bin.jar
    以及事物相关jar:spring-tx-4.2.4.RELEASE.jar spring-jdbc-4.2.4.RELEASE.jar

    2、书写资源文件jdbc.properties

    <!-- 注意这里有坑,者四个键值对的键要么固定这么写,要么就以jdbc.***的方式,切记用以下方式写,却把user写成username,这是因为spring加载时username这个键被其他地方使用了 -->
    url=jdbc:mysql://localhost:3306/test?characterEncoding=utf-8
    user=root
    password=123456
    driver=com.mysql.jdbc.Driver

    3.书写配置文件

    <context:property-placeholder
    location="classpath:jdbc.properties" />
    <bean id="dataSource"
    class="com.mchange.v2.c3p0.ComboPooledDataSource"
    destroy-method="close">
    <property name="driverClass" value="${driver}"></property>
    <property name="jdbcUrl" value="${url}"></property>
    <property name="user" value="${user}"></property>
    <property name="password" value="${password}"></property>
    <!-- 这里还可以配置其他参数,比如initialPoolSize等等 -->
    </bean>
    <bean class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"></property>
    </bean>
    <context:component-scan base-package="com.eric.jdbc"></context:component-scan>
    </beans>

    4.创建实体类:

    //创建一个实体类,很简单,这里省略
    public class BankUser {……}

    5.创建一个实体类的映射类(用于指定数据库到实体类的字段映射关系):
    通过RowMapper接口的实现,将每行数据映射到实例对象。但不必担心异常处理。调用JdbcTemplate将捕获并处理SQLExceptions。

    public class BankUserMapper implements RowMapper<BankUser> {
    public BankUser mapRow(ResultSet resultSet, int i) throws SQLException {
    BankUser bankUser=new BankUser();
    bankUser.setId(resultSet.getString("id"));
    bankUser.setUserName(resultSet.getString("user_name"));
    bankUser.setPassword(resultSet.getString("password"));
    return bankUser;
    }
    }


    6.书写DAO:

    @Repository
    public
    class UserDAOImpl { @Autowired private JdbcTemplate template;//必须注入JdbcTemplate模板 // 查询单个数据: public BankUser findUserByname(String userName){ //在JdbcTemplate 都是使用?作为占位符 String sql ="select * from bank where id=?"; Object[] params = {userName}; RowMapper<BankUser> mapper = new BankUserMapper(); BankUser bankUser=template.queryForObject(sql, params,mapper); return bankUser; } } //查询多个数据: public List<BankUser> findAllUser(){ String sql ="select * from bank"; RowMapper<BankUser> mapper = new BankUserMapper(); List<BankUser> list=template.query(sql,mapper); return list; } //插入一条数据: public void save(BankUser bankUser) { String sql = "insert into bank(id,user_name,password,money) values (?,?,?,?)"; Object[] params = { bankUser.getId(),bankUser.getPassword(), bankUser.getUserName(), bankUser.getMoney() }; template.update(sql, params); } //修改数据: public void update(BankUser bankUser){ String sql = "update bank set password=? where id=?"; Object[] params ={bankUser.getPassword(),bankUser.getId()}; template.update(sql, params); } //删除数据: public void deleteUser(String id){ String sql = "delete from emp where id=?"; Object[] params = {id}; template.update(sql, params); }
  • 相关阅读:
    inotify-java linux系统监听文件发生变化,实时通知java程序
    设置模式之单例模式(附上一个Objective-C编写的播放音乐的单例类)
    设计模式之观察者模式(关于OC中的KVOKVCNSNotification)
    设计模式之原型模式(深入理解OC中的NSCopying协议以及浅拷贝、深拷贝)
    设计模式之模板方法模式&&迪米特法则(代码Objective-C展示)
    iOS开发:深入理解GCD 第一篇
    设计模式之工厂方法模式(代码用Objective-C展示)
    iOS开发:一个高仿美团的团购ipad客户端的设计和实现(功能:根据拼音进行检索并展示数据,离线缓存团购数据,浏览记录与收藏记录的批量删除等)
    Xcode一些好用的插件,以及这些插件的管理器
    综合出现NSScanner: nil string argument libc++abi.dylib: terminat错误的解决方案
  • 原文地址:https://www.cnblogs.com/ericz2j/p/10908990.html
Copyright © 2011-2022 走看看