zoukankan      html  css  js  c++  java
  • Spring,JDBC, JdbcTemplate的常用方法

    本篇文章,类似于:Spring深入浅出(十四),JDBC,Oracle数据库基本CRUD操作,以及获得插入记录的主键值,差别在于:这次是MySQL数据库。

    首先,需要在项目中引用相关包,包括Spring JDBC包、Spring事务驱动包、MySQL数据库驱动包:

    • spring-jdbc-5.2.3.RELEASE.jar
    • spring-tx-5.2.3.RELEASE.jar
    • mysql-connector-java-5.1.49-bin.jar

    一、创建实体类

    package com.itheima.jdbc;
    public class Account {
        private Integer id;       // 账户id
        private String username; // 用户名
        private Double balance;  // 账户余额
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public Double getBalance() {
            return balance;
        }
        public void setBalance(Double balance) {
            this.balance = balance;
        }
        public String toString() {
            return "Account [id=" + id + ", "
                    + "username=" + username + 
                    ", balance=" + balance + "]";
        }
    }

    二、创建接口类

    package com.itheima.jdbc;
    
    import java.util.List;
    
    public interface AccountDao {
        // 添加
        public int addAccount(Account account);
    
        // 更新
        public int updateAccount(Account account);
    
        // 删除
        public int deleteAccount(int id);
    
        // 通过id查询
        public Account findAccountById(int id);
    
        // 查询所有账户
        public List<Account> findAllAccount();
    }

    三、创建实现类

    package com.itheima.jdbc;
    
    import java.util.List;
    
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.core.RowMapper;
    
    public class AccountDaoImpl implements AccountDao {
        // 声明JdbcTemplate属性及其setter方法
        private JdbcTemplate jdbcTemplate;
    
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }
    
        // 添加账户
        public int addAccount(Account account) {
            // 定义SQL
            String sql = "insert into account(username,balance) value(?,?)";
            // 定义数组来存放SQL语句中的参数
            Object[] obj = new Object[] { account.getUsername(), account.getBalance() };
            // 执行添加操作,返回的是受SQL语句影响的记录条数
            int num = this.jdbcTemplate.update(sql, obj);
            return num;
        }
    
        // 更新账户
        public int updateAccount(Account account) {
            // 定义SQL
            String sql = "update account set username=?,balance=? where id = ?";
            // 定义数组来存放SQL语句中的参数
            Object[] params = new Object[] { account.getUsername(), account.getBalance(), account.getId() };
            // 执行添加操作,返回的是受SQL语句影响的记录条数
            int num = this.jdbcTemplate.update(sql, params);
            return num;
        }
    
        // 删除账户
        public int deleteAccount(int id) {
            // 定义SQL
            String sql = "delete  from account where id = ? ";
            // 执行添加操作,返回的是受SQL语句影响的记录条数
            int num = this.jdbcTemplate.update(sql, id);
            return num;
        }
    
        // 通过id查询账户数据信息
        public Account findAccountById(int id) {
            // 定义SQL语句
            String sql = "select * from account where id = ?";
            // 创建一个新的BeanPropertyRowMapper对象
            RowMapper<Account> rowMapper = new BeanPropertyRowMapper<Account>(Account.class);
            // 将id绑定到SQL语句中,并通过RowMapper返回一个Object类型的单行记录
            return this.jdbcTemplate.queryForObject(sql, rowMapper, id);
        }
    
        // 查询所有账户信息
        public List<Account> findAllAccount() {
            // 定义SQL语句
            String sql = "select * from account";
            // 创建一个新的BeanPropertyRowMapper对象
            RowMapper<Account> rowMapper = new BeanPropertyRowMapper<Account>(Account.class);
            // 执行静态的SQL查询,并通过RowMapper返回结果
            return this.jdbcTemplate.query(sql, rowMapper);
        }
    
    }

    四、创建配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
        <!-- 1配置数据源 -->
        <bean id="dataSource" class=
         "org.springframework.jdbc.datasource.DriverManagerDataSource">
            <!--数据库驱动 -->
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />
            <!--连接数据库的url -->
            <property name="url" value="jdbc:mysql://localhost:3306/xuejia" />
            <!--连接数据库的用户名 -->
            <property name="username" value="root" />
            <!--连接数据库的密码 -->
            <property name="password" value="admin" />
        </bean>
        <!-- 2配置JDBC模板 -->
        <bean id="jdbcTemplate" 
               class="org.springframework.jdbc.core.JdbcTemplate">
            <!-- 默认必须使用数据源 -->
            <property name="dataSource" ref="dataSource" />
        </bean>
        
        <!--定义id为accountDao的Bean-->
        <bean id="accountDao" class="com.itheima.jdbc.AccountDaoImpl">
            <!-- 将jdbcTemplate注入到accountDao实例中 -->
            <property name="jdbcTemplate" ref="jdbcTemplate" />
        </bean>
        
    </beans>

    五、创建测试程序

    package com.itheima.jdbc;
    import java.util.List;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import 
         org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.jdbc.core.JdbcTemplate;
    public class JdbcTemplateTest {
        @Test
        public void mainTest() {
            // 加载配置文件
            ApplicationContext applicationContext = 
                    new ClassPathXmlApplicationContext("applicationContext.xml");
            // 获取JdbcTemplate实例
            JdbcTemplate jdTemplate = 
                    (JdbcTemplate) applicationContext.getBean("jdbcTemplate");
            // 使用execute()方法执行SQL语句,创建用户账户管理表account
            jdTemplate.execute("create table account(" + 
                                   "id int primary key auto_increment," +
                                   "username varchar(50)," + 
                                   "balance double)");
            System.out.println("账户表account创建成功!");
        }
    
    //    @Test
        public void addAccountTest() {
            // 加载配置文件
            ApplicationContext applicationContext = 
                    new ClassPathXmlApplicationContext("applicationContext.xml");
            // 获取AccountDao实例
            AccountDao accountDao = 
                    (AccountDao) applicationContext.getBean("accountDao");
            // 创建Account对象,并向Account对象中添加数据
            Account account = new Account();
            account.setUsername("张三");
            account.setBalance(1000.00);
            // 执行addAccount()方法,并获取返回结果
            int num = accountDao.addAccount(account);
            if (num > 0) {
                System.out.println("成功插入了" + num + "条数据!");
            } else {
                System.out.println("插入操作执行失败!");
            }
        }
        
    //    @Test
        public void updateAccountTest() {
            // 加载配置文件
            ApplicationContext applicationContext = 
                    new ClassPathXmlApplicationContext("applicationContext.xml");
            // 获取AccountDao实例
            AccountDao accountDao = 
                    (AccountDao) applicationContext.getBean("accountDao");
            // 创建Account对象,并向Account对象中添加数据
            Account account = new Account();
            account.setId(2);
            account.setUsername("李四");
            account.setBalance(2000.00);
            // 执行updateAccount()方法,并获取返回结果
            int num = accountDao.updateAccount(account);
            if (num > 0) {
                System.out.println("成功修改了" + num + "条数据!");
            } else {
                System.out.println("修改操作执行失败!");
            }
        }
        
    //    @Test
        public void deleteAccountTest() {
            // 加载配置文件
            ApplicationContext applicationContext = 
                    new ClassPathXmlApplicationContext("applicationContext.xml");
            // 获取AccountDao实例
            AccountDao accountDao = 
                    (AccountDao) applicationContext.getBean("accountDao");
            // 执行deleteAccount()方法,并获取返回结果
            int num = accountDao.deleteAccount(2);
            if (num > 0) {
                System.out.println("成功删除了" + num + "条数据!");
            } else {
                System.out.println("删除操作执行失败!");
            }
        }
    
    //    @Test
        public void findAccountByIdTest() {
            // 加载配置文件
            ApplicationContext applicationContext = 
                    new ClassPathXmlApplicationContext("applicationContext.xml");
            // 获取AccountDao实例
            AccountDao accountDao = 
                    (AccountDao) applicationContext.getBean("accountDao");
            // 执行findAccountById()方法
            Account account = accountDao.findAccountById(4);
            System.out.println(account);
        }
    
    //    @Test
        public void findAllAccountTest() {
            // 加载配置文件
            ApplicationContext applicationContext = 
                    new ClassPathXmlApplicationContext("applicationContext.xml");
            // 获取AccountDao实例
            AccountDao accountDao = 
                    (AccountDao) applicationContext.getBean("accountDao");
            // 执行findAllAccount()方法,获取Account对象的集合
            List<Account> account = accountDao.findAllAccount();
            // 循环输出集合中的对象
            for (Account act : account) {
                System.out.println(act);
            }
        }
    }

    六、挨个运行

    1. 运行mainTest

    账户表account创建成功!

    2. 运行addAccountTest,本处执行3次

    成功插入了1条数据!

    成功插入了1条数据!

    成功插入了1条数据!

    3. 运行updateAccountTest

    成功修改了1条数据!

    4. 运行deleteAccountTest

    成功删除了1条数据!

    5. 运行findAccountByIdTest

    Account [id=2, username=张三, balance=1000.0]

    6. 运行findAllAccountTest

    Account [id=2, username=张三, balance=1000.0]
    Account [id=3, username=张三, balance=1000.0]

    本文参考:《Java EE企业级应用开发教程》

  • 相关阅读:
    金融系列7《动态数据认证》
    PHP异常处理详解
    C语言中的宏定义
    PHP SOCKET编程
    yii实现级联下拉菜单
    AR的一些常见的操作
    IP地址的三种表示格式及在Socket编程中的应用
    时间管理
    socket阻塞与非阻塞,同步与异步、I/O模型
    程序人生 PHP工程师
  • 原文地址:https://www.cnblogs.com/nayitian/p/15055238.html
Copyright © 2011-2022 走看看