spring开发案例配合mysql
实体类:
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的更多相关文章
- Spring开发案例1半注解开发
dao层: package cn.mepu.dao.imp; import cn.mepu.dao.AccountDao; import cn.mepu.domain.Account; import ...
- SpringBoot开发案例之整合Activiti工作流引擎
前言 JBPM是目前市场上主流开源工作引擎之一,在创建者Tom Baeyens离开JBoss后,JBPM的下一个版本jBPM5完全放弃了jBPM4的基础代码,基于Drools Flow重头来过,目前官 ...
- Spring进阶案例之注解和IoC案例
Spring进阶案例之注解和IoC案例 一.常见的注解分类及其作用 从此前的基于xml的IoC开发案例和依赖注入案例中,我们可以将xml配置归纳为: <bean id="" ...
- 【译】Spring 4 + Hibernate 4 + Mysql + Maven集成例子(注解 + XML)
前言 译文链接:http://websystique.com/spring/spring4-hibernate4-mysql-maven-integration-example-using-annot ...
- Spring Boot使用Spring Data Jpa对MySQL数据库进行CRUD操作
只需两步!Eclipse+Maven快速构建第一个Spring Boot项目 构建了第一个Spring Boot项目. Spring Boot连接MySQL数据库 连接了MySQL数据库. 本文在之前 ...
- spring原理案例-基本项目搭建 02 spring jar包详解 spring jar包的用途
Spring4 Jar包详解 SpringJava Spring AOP: Spring的面向切面编程,提供AOP(面向切面编程)的实现 Spring Aspects: Spring提供的对Aspec ...
- Spring Boot (五)Spring Data JPA 操作 MySQL 8
一.Spring Data JPA 介绍 JPA(Java Persistence API)Java持久化API,是 Java 持久化的标准规范,Hibernate是持久化规范的技术实现,而Sprin ...
- 大数据技术之_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 ...
- 《实战突击:PHP项目开发案例整合(第2版)(含DVD光盘1张)》
<实战突击:PHP项目开发案例整合(第2版)(含DVD光盘1张)> 基本信息 作者: 徐康明 辛洪郁 出版社:电子工业出版社 ISBN:9787121221378 上架时间:2014 ...
随机推荐
- vue项目工具文件utils.js javascript常用工具类,javascript常用工具类,util.js
vue项目工具文件utils.js :https://blog.csdn.net/Ajaxguan/article/details/79924249 javascript常用工具类,util.js : ...
- go 区分指针
先看一段代码 先放一段代码,人工运行一下,看看自己能做对几题? package main import "fmt" func main() { var a int = 1 var ...
- ssh-keyscan - 收集 ssh 公钥
总览 (SYNOPSIS) ssh-keyscan -words [-v46 ] [-p port ] [-T timeout ] [-t type ] [-f file ] [host | addr ...
- Raid,分区表与LVM逻辑卷
1.组Raid 磁盘前512K组合 前446K:MBR引导程序 中64K:分区表 后2K:校检码 Raid0:极致的读写速度,一个数据分散到多个盘去读写.但是极不安全,一旦坏了一块盘那么所有盘都将无法 ...
- react 的生命周期函数
生命周期函数: 是指在某一时刻组件自动执行 的函数 初始化: 设置props和state mounting: componentWillMount 在组件即将被挂载到页面的时候自动执行 render ...
- shell编写启动脚本
[root@confluence bin]# vim /etc/init.d/confluence #!/bin/bash # Confluence Linux service controller ...
- Delphi获取指定文件的版本号
获取指定文件的版本号 方式一: function GetFileVersion(FileName: string): string; type PVerInfo = ^TVS_FIXEDFILEINF ...
- C#中ArrayList 、Array与、string、string[]数组的相关转换
一.ArrayList 与 string.string[]数组的转换 1.ArrayList 转换为 string[] : ArrayList list = new ArrayList(); list ...
- pandas for python
http://pandas.pydata.org/pandas-docs/stable/user_guide/index.html 不算太难,需要拿一本线性代数看看矩阵原理即可.重点在于考虑如何运用, ...
- NX二次开发-OLE/COM向EXCEL表格中插入图片
今晚有一个兄弟问我怎么往EXCEL里插入图片(加工程序单中需要插入图片),这个我之前也没弄过,回复了他一句不知道,后来刚刚干完游戏吃完鸡,就去VC++的书上翻了翻,还真的被我翻到了.VC++的方法往E ...