使用注解方式实现账户的CRUD
Posted xuweiweiwoaini
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用注解方式实现账户的CRUD相关的知识,希望对你有一定的参考价值。
1 需求和技术要求
1.1 需求
- 实现账户的CRUD。
1.2 技术要求
- 使用Spring的IOC实现对象的管理。
- 使用QueryRunner作为持久层的解决方案。
- 使用C3p0作为数据源。
2 环境搭建并配置
2.1 导入所需要的依赖jar包的maven坐标
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.0.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.17</version> </dependency> <dependency> <groupId>commons-dbutils</groupId> <artifactId>commons-dbutils</artifactId> <version>1.7</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.4</version> </dependency>
2.2 数据库脚本
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for account -- ---------------------------- DROP TABLE IF EXISTS `account`; CREATE TABLE `account` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主键‘, `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT ‘名称‘, `money` double(11, 0) NULL DEFAULT NULL COMMENT ‘余额‘, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of account -- ---------------------------- INSERT INTO `account` VALUES (1, ‘aaa‘, 1000); INSERT INTO `account` VALUES (2, ‘bbb‘, 1000); SET FOREIGN_KEY_CHECKS = 1;
2.3 编写实体类
- Account.java
package com.sunxiaping.spring5.domain; import java.io.Serializable; /** * 账户 */ public class Account implements Serializable { private Integer id; private String name; private Double money; 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 Double getMoney() { return money; } public void setMoney(Double money) { this.money = money; } }
2.4 编写持久层代码
- IAccountDao.java
package com.sunxiaping.spring5.dao; import com.sunxiaping.spring5.domain.Account; import java.util.List; /** * 账户的持久层接口 */ public interface IAccountDao { /** * 保存账户 * * @param account */ void save(Account account); /** * 更新账户 * * @param account */ void update(Account account); /** * 删除账户 * * @param id */ void delete(Integer id); /** * 根据主键查询账户信息 * * @param id * @return */ Account findById(Integer id); /** * 查询所有 * * @return */ List<Account> findAll(); }
- AccountDaoImpl.java
package com.sunxiaping.spring5.dao.impl; import com.sunxiaping.spring5.dao.IAccountDao; import com.sunxiaping.spring5.domain.Account; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import java.sql.SQLException; import java.util.List; @Repository public class AccountDaoImpl implements IAccountDao { @Autowired private QueryRunner queryRunner; @Override public void save(Account account) { try { queryRunner.update("insert into account(name,money) values (?,?)", account.getName(), account.getMoney()); } catch (SQLException e) { e.printStackTrace(); } } @Override public void update(Account account) { try { queryRunner.update("update account set name=?,money=? where id = ?", account.getName(), account.getMoney(), account.getId()); } catch (SQLException e) { e.printStackTrace(); } } @Override public void delete(Integer id) { try { queryRunner.update("delete from account where id = ?", id); } catch (SQLException e) { e.printStackTrace(); } } @Override public Account findById(Integer id) { try { return queryRunner.query("select * from account where id = ?", new BeanHandler<>(Account.class), id); } catch (SQLException e) { e.printStackTrace(); } return null; } @Override public List<Account> findAll() { try { return queryRunner.query("select * from account", new BeanListHandler<>(Account.class)); } catch (SQLException e) { e.printStackTrace(); } return null; } }
2.5 编写业务层代码
- IAccountService.java
package com.sunxiaping.spring5.service; import com.sunxiaping.spring5.domain.Account; import java.util.List; public interface IAccountService { /** * 保存账户 * * @param account */ void save(Account account); /** * 更新账户 * * @param account */ void update(Account account); /** * 删除账户 * * @param id */ void delete(Integer id); /** * 根据主键查询账户信息 * * @param id * @return */ Account findById(Integer id); /** * 查询所有 * * @return */ List<Account> findAll(); }
- AccountServiceImpl.java
package com.sunxiaping.spring5.service.impl; import com.sunxiaping.spring5.dao.IAccountDao; import com.sunxiaping.spring5.domain.Account; import com.sunxiaping.spring5.service.IAccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class AccountServiceImpl implements IAccountService { @Autowired private IAccountDao accountDao; @Override public void save(Account account) { accountDao.save(account); } @Override public void update(Account account) { accountDao.update(account); } @Override public void delete(Integer id) { accountDao.delete(id); } @Override public Account findById(Integer id) { return accountDao.findById(id); } @Override public List<Account> findAll() { return accountDao.findAll(); } }
2.6 创建并配置applicationContext.xml
- applicationContext.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创建容器的时候要扫描的包--> <context:component-scan base-package="com.sunxiaping.spring5"></context:component-scan> <!--配置QueryRunner--> <bean id="queryRunner" 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="jdbcUrl" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true"></property> <property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property> <property name="user" value="root"></property> <property name="password" value="123456"></property> </bean> </beans>
2.7 测试
- 示例:
package com.sunxiaping; import com.sunxiaping.spring5.domain.Account; import com.sunxiaping.spring5.service.IAccountService; import org.junit.Before; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class spring5Test { ApplicationContext context = null; @Before public void before() { context = new ClassPathXmlApplicationContext("applicationContext.xml"); } @Test public void test() { IAccountService accountService = context.getBean(IAccountService.class); Account account = new Account(); account.setName("xxx"); account.setMoney(1.2); accountService.save(account); } }
以上是关于使用注解方式实现账户的CRUD的主要内容,如果未能解决你的问题,请参考以下文章
Spring 从入门到精通系列 07——基于XML与注解方式的IOC案例编写
学习笔记——@PathVariable注解基本使用;@PathVariable注解属性;REST风格CRUD概述;实现PUT&DELETE提交方法步骤;SpringMVC处理请求数据请求头处理