实体类:

 package cn.mepu.domain;

 import java.io.Serializable;

 /**
  * 账户实体类
  * @author shkstart
  * @create 2019-11-08 10:04
  */
 public class Account implements Serializable {
     private Integer id;
     private String name;
     private float money;

     public Account(Integer id, String name, float money) {
         this.id = id;
         this.name = name;
         this.money = money;
     }

     public Account() {
     }

     public Integer getId() {
         return id;
     }

     public void setId(Integer id) {
         this.id = id;
     }

     public String getName() {
         return name;
     }

     public void setName(String name) {
         this.name = name;
     }

     public float getMoney() {
         return money;
     }

     public void setMoney(float money) {
         this.money = money;
     }

     @Override
     public String toString() {
         return "Account{" +
                 "id=" + id +
                 ", name='" + name + '\'' +
                 ", money=" + money +
                 '}';
     }
 }

dao层:

 package cn.mepu.dao.imp;

 import cn.mepu.dao.AccountDao;
 import cn.mepu.domain.Account;
 import org.apache.commons.dbutils.QueryRunner;
 import org.apache.commons.dbutils.handlers.BeanHandler;
 import org.apache.commons.dbutils.handlers.BeanListHandler;

 import java.util.List;

 /**
  * @author shkstart
  * @create 2019-11-08 10:28
  */
 public class AccountDaoImp implements AccountDao {

     private QueryRunner runner;

     public void setRunner(QueryRunner runner) {
         this.runner = runner;
     }

     @Override
     public List<Account> findAllAccount() {
         try {
             return runner.query("select * from account",new BeanListHandler<Account>(Account.class));
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
     }

     @Override
     public Account findAccountById(Integer accountId) {
         try {
             return runner.query("select * from account where id = ? ",new BeanHandler<Account>(Account.class),accountId);
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
     }

     @Override
     public void saveAccount(Account acc) {
         try {
             runner.update("insert into account(name,money) values(?,?)" , acc.getName(),acc.getMoney());
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
     }

     @Override
     public void updateAccount(Account acc) {
         try {
             runner.update("update account set name=? , money=? where id = ? " , acc.getName(),acc.getMoney(),acc.getId());
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
     }

     @Override
     public void deleteAccount(Integer accountId) {
         try {
             runner.update("delete from account where id = ? " , accountId );
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
     }
 }

service层:

 package cn.mepu.service.imp;

 import cn.mepu.dao.AccountDao;
 import cn.mepu.domain.Account;
 import cn.mepu.service.AccountService;

 import java.util.List;

 /**
  * @author shkstart
  * @create 2019-11-08 10:12
  */

 public class AccountServiceImp implements AccountService {

     private AccountDao dao;

     public void setDao(AccountDao dao) {
         this.dao = dao;
     }

     @Override
     public List<Account> findAllAccount() {
         return dao.findAllAccount();
     }

     @Override
     public Account findAccountById(Integer accountId) {
         return dao.findAccountById(accountId);
     }

     @Override
     public void saveAccount(Account acc) {
         dao.saveAccount(acc);
     }

     @Override
     public void updateAccount(Account acc) {
         dao.updateAccount(acc);
     }

     @Override
     public void deleteAccount(Integer accountId) {
     dao.deleteAccount(accountId);
     }
 }

servlet层:

 package cn.mepu.service;

 import cn.mepu.domain.Account;
 import org.junit.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;

 import java.util.List;

 /**
  * @author shkstart
  * @create 2019-11-08 10:45
  */
 public class AccountServiceTest {
     @Test
     public void testFindAll(){
     //1.获取容器
         ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
     //2.得到业务层对象
         AccountService service = (AccountService) ac.getBean("accountService");
     //3.执行方法
         List<Account> accounts = service.findAllAccount();
         for (Account account : accounts) {
             System.out.println("account = " + account);
         }

     }

     @Test
     public void testFindOne(){
         //1.获取容器
         ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
         //2.得到业务层对象
         AccountService service = (AccountService) ac.getBean("accountService");
         //3.执行方法
         Account account = service.findAccountById(1);
         System.out.println(account);
     }

     @Test
     public void testSave(){
         //1.获取容器
         ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
         //2.得到业务层对象
         AccountService service = (AccountService) ac.getBean("accountService");
         //3.执行方法
         service.saveAccount(new Account(1,"DDD",1234));
     }

     @Test
     public void testUpdate(){
         //1.获取容器
         ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
         //2.得到业务层对象
         AccountService service = (AccountService) ac.getBean("accountService");
         //3.执行方法
         service.updateAccount(new Account(1,"DDD",2345));
     }

     @Test
     public void testDelete(){
         //1.获取容器
         ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
         //2.得到业务层对象
         AccountService service = (AccountService) ac.getBean("accountService");
         //3.执行方法
         service.deleteAccount(4);
     }
 }

bean.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
    <!--告知spring加载容器时扫描要扫描的包配置所需要的约束不在beans中,而是称为context名称空间的约束中-->
<!--    配置service-->
    <bean id="accountService" class="cn.mepu.service.imp.AccountServiceImp">
<!--        注入dao-->
        <property name="dao" ref="accountDao"></property>
    </bean>

<!--    配置dao-->
    <bean id="accountDao" class="cn.mepu.dao.imp.AccountDaoImp">
<!--        注入QueryRunner runner-->
        <property name="runner" ref="runner"></property>
    </bean>

<!--    配置注入QueryRunner scope保证线程安全-->
    <bean id="runner" class="org.apache.commons.dbutils.QueryRunner" scope="prototype">
<!--        注入数据源-->
        <constructor-arg name="ds" ref="dataSource"></constructor-arg>
    </bean>

<!--    配置数据源-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!--        连接数据的必备信息-->
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/javaee"></property>
        <property name="user" value="root"></property>
        <property name="password" value="root"></property>
    </bean>

</beans>

spring开发案例配合mysql的更多相关文章

  1. Spring开发案例1半注解开发

    dao层: package cn.mepu.dao.imp; import cn.mepu.dao.AccountDao; import cn.mepu.domain.Account; import ...

  2. SpringBoot开发案例之整合Activiti工作流引擎

    前言 JBPM是目前市场上主流开源工作引擎之一,在创建者Tom Baeyens离开JBoss后,JBPM的下一个版本jBPM5完全放弃了jBPM4的基础代码,基于Drools Flow重头来过,目前官 ...

  3. Spring进阶案例之注解和IoC案例

    Spring进阶案例之注解和IoC案例 一.常见的注解分类及其作用 从此前的基于xml的IoC开发案例和依赖注入案例中,我们可以将xml配置归纳为: <bean id="" ...

  4. 【译】Spring 4 + Hibernate 4 + Mysql + Maven集成例子(注解 + XML)

    前言 译文链接:http://websystique.com/spring/spring4-hibernate4-mysql-maven-integration-example-using-annot ...

  5. Spring Boot使用Spring Data Jpa对MySQL数据库进行CRUD操作

    只需两步!Eclipse+Maven快速构建第一个Spring Boot项目 构建了第一个Spring Boot项目. Spring Boot连接MySQL数据库 连接了MySQL数据库. 本文在之前 ...

  6. spring原理案例-基本项目搭建 02 spring jar包详解 spring jar包的用途

    Spring4 Jar包详解 SpringJava Spring AOP: Spring的面向切面编程,提供AOP(面向切面编程)的实现 Spring Aspects: Spring提供的对Aspec ...

  7. Spring Boot (五)Spring Data JPA 操作 MySQL 8

    一.Spring Data JPA 介绍 JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Sprin ...

  8. 大数据技术之_09_Flume学习_Flume概述+Flume快速入门+Flume企业开发案例+Flume监控之Ganglia+Flume高级之自定义MySQLSource+Flume企业真实面试题(重点)

    第1章 Flume概述1.1 Flume定义1.2 Flume组成架构1.2.1 Agent1.2.2 Source1.2.3 Channel1.2.4 Sink1.2.5 Event1.3 Flum ...

  9. 《实战突击:PHP项目开发案例整合(第2版)(含DVD光盘1张)》

    <实战突击:PHP项目开发案例整合(第2版)(含DVD光盘1张)> 基本信息 作者: 徐康明    辛洪郁 出版社:电子工业出版社 ISBN:9787121221378 上架时间:2014 ...

随机推荐

  1. mysql 密码

    http://www.cnblogs.com/jonsea/p/5510219.html character-set-server=utf8 mysql 修改密码: ALTER USER 'root' ...

  2. 【题解】sweet

    题目描述 为了防止糖果被小猫偷吃,John把他的糖果放在了很多的高台上,一个高台可以认为是一段平行于X轴的线段,并且高台的y坐标都是大于0的,每个高台都有左端点和高台的长度,每个高台都有糖果.所有的高 ...

  3. 第一章 Xshell5评估期已过问题

    您的Xshell评估期已过.请访问我们的在线商店购买Xshe许可证.产品密钥将通过电子邮件发送给您. 解决方法 一.进入下载网站 https://www.netsarang.com/zh/thank- ...

  4. windows server 2016 支持多用户远程登录

    服务器设置多用户同时远程桌面,可以提高访问效率,避免人多抢登服务器. 1. 首先需要先安装远程桌面服务  配置组策略,运行框输入gpedit.msc,打开计算机配置–>管理模板—>wind ...

  5. [网络流24题] 洛谷P2761 软件补丁问题

    题意:某公司发现其研制的一个软件中有 n个错误,随即为该软件发放了一批共 m 个补丁程序.对于每一个补丁 i ,都有 2 个与之相应的错误集合 B1(i)和 B2(i),使得仅当软件包含 B1(i)中 ...

  6. Codeforces 1163D DP + KMP

    题意:给你一个字符串s,以及两个字符串s1,s2.s中有些位置是*,意思是可以随便填字母,s的子串中如果出现一次s1,就加一分,如果出现一次s2,就减一分.问这个字符串s最多可以得多少分? 思路: 设 ...

  7. 【JS学习】慕课网8-17编程练习 网页的返回与跳转

    编程练习 制作一个跳转提示页面: 要求: 1. 如果打开该页面后,如果不做任何操作则5秒后自动跳转到一个新的地址,如慕课网主页. 2. 如果点击“返回”按钮则返回前一个页面. 代码如下: 需要注意的是 ...

  8. PHP-移除元素

    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  9. vue中key的作用

    1.v-if中用key管理可复用的元素  Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染.这么做,除了使 Vue 变得非常快之外,还有一些有用的好处.例如,如果你允许用户在不同的 ...

  10. vue 2.1.3 实时显示当前时间,每秒更新

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...