前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用Spring的IOC的实现数据库的CRUD

利用Spring的IOC的实现数据库的CRUD

作者头像
框架师
发布2020-02-12 15:10:10
3610
发布2020-02-12 15:10:10
举报
文章被收录于专栏:墨白的Java基地

正文

引言:

纵然是基础,也还是有很多人不会;

  • 先看一下完整的目录结构
  • 打开你的图形化界面工具(sqlyog,navicat...),创建数据库spring-test,导入以下SQL
代码语言:javascript
复制
DROP TABLE IF EXISTS USER;

CREATE TABLE USER (
  id INT(11) NOT NULL AUTO_INCREMENT,
  username VARCHAR(32) NOT NULL COMMENT '用户名称',
  birthday DATETIME DEFAULT NULL COMMENT '生日',
  sex CHAR(1) DEFAULT NULL COMMENT '性别',
  address VARCHAR(256) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY  (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT  INTO USER(id,username,birthday,sex,address) VALUES (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','鼓岭'),(43,'小二王','2018-03-04 11:34:34','女','东京'),(45,'南京','2018-03-04 12:04:06','男','北京金燕龙'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');


DROP TABLE IF EXISTS account;
CREATE TABLE account (
  accountId INT(11) NOT NULL AUTO_INCREMENT,
  UID INT(11) DEFAULT NULL COMMENT '用户编号',
  MONEY DOUBLE DEFAULT NULL COMMENT '金额',
  PRIMARY KEY  (accountId),
  KEY FK_Reference_8 (UID),
  CONSTRAINT FK_Reference_8 FOREIGN KEY (UID) REFERENCES USER (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT  INTO account(accountId,UID,MONEY) VALUES (1,46,1000),(2,45,1000),(3,46,2000);
  • 效果图如下:
  • 打开你的IDEA,创建maven项目,导入相关坐标
代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mobaijun</groupId>
    <artifactId>spring_test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
        <!-- 数据源 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.6</version>
        </dependency>
        <!-- Spring的JdbcTemplate -->
        <dependency> 
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>
        <!-- spring的IOC -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
        </dependency>
    </dependencies>
</project>
  • 编写Account实体
代码语言:javascript
复制
/**
 * DevelopmentTool: IntelliJ IDEA 2018.2.4 x64
 * Author: Auser·杰
 * CreateDate:  2020/1/6 0:09
 * 释义: 账户实体类
 */
@Data
public class Account implements Serializable{

    private int accountId;
    
    private int uid;
    
    private double money;
  • 编写Dao/(Mapper)接口和实现
代码语言:javascript
复制
/**
 * DevelopmentTool: IntelliJ IDEA 2018.2.4 x64
 * Author: Auser·杰
 * CreateDate: 2020/1/26 0:56
 * ClassName: AccountDao
 * 释义:accountDao接口
 */
public interface AccountDao {
    
    public void save(Account account);
    
    public void update(Account account);
    
    public void delete(int accountId);
    
    public List<Account> findAll();
    
}
  • 编写Dao实现
代码语言:javascript
复制
/**
 * DevelopmentTool: IntelliJ IDEA 2018.2.4 x64
 * Author: Auser·杰
 * CreateDate: 2020/1/26 0:56
 * ClassName: AccountDaoImpl
 * 释义:AccountDaoImpl实现
 */
public class AccountDaoImpl implements AccountDao {

    //需要JdbcTemplate对象(使用IOC容器创建)
    private JdbcTemplate jdbcTemplate;

    //提供setter,以便IOC进行依赖注入
    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public void save(Account account) {
        jdbcTemplate.update("insert into account(uid,money) values(?,?)"
                ,account.getUid(),account.getMoney());
    }

    @Override
    public void update(Account account) {
        jdbcTemplate.update("update account set uid=?,money=? where accountId=?",
                account.getUid(),account.getMoney(),account.getAccountId());
    }

    @Override
    public void delete(int accountId) {
        jdbcTemplate.update("delete from account where accountId = ?",accountId);
    }

    @Override
    public List<Account> findAll() {
        return jdbcTemplate.query("select * from account",new BeanPropertyRowMapper<>(Account.class));
    }
}
  • 编写Service接口
代码语言:javascript
复制
/**
 * DevelopmentTool: IntelliJ IDEA 2018.2.4 x64
 * Author: Auser·杰
 * CreateDate: 2020/1/26 0:56
 * ClassName: AccountService
 * 释义:AccountService实现
 */
public interface AccountService {

    public void save(Account account);

    public void update(Account account);

    public void delete(int accountId);

    public List<Account> findAll();
}
  • 编写Service实现
代码语言:javascript
复制
/**
 * DevelopmentTool: IntelliJ IDEA 2018.2.4 x64
 * Author: Auser·杰
 * CreateDate: 2020/1/26 0:56
 * ClassName: BaseController
 * 释义:账户Service实现
 */
public class AccountServiceImpl implements AccountService{
    
    //需要AccountDao对象(使用IOC进行注入)
    private AccountDao accountDao;

    //给IOC进行依赖注入的方法
    public void setAccountDao(AccountDao accountDao) {
        this.accountDao = accountDao;
    }

    @Override
    public void save(Account account) {
        accountDao.save(account);
    }

    @Override
    public void update(Account account) {
        accountDao.update(account);
    }

    @Override
    public void delete(int accountId) {
        accountDao.delete(accountId);
    }

    @Override
    public List<Account> findAll() {
        return accountDao.findAll();
    }
}
  • 配置数据库资源文件
代码语言:javascript
复制
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_test?characterEncoding=utf-8
jdbc.username=xxxxxx
jdbc.password=xxxxxxx
  • 编写IOC配置文件
代码语言:javascript
复制
<?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">

    <!-- 读取jdbc.properties文件 -->
    <!--
       classpath:  从类路径下面开始加载
    -->
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!-- 1. 创建数据源对象 -->
    <!--
     DruidDataSource ds = new DruidDataSource()
     ds.setUrl(xxx);
     ....
       -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="url" value="${jdbc.url}"/>
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!-- 2. 创建JdbcTemplate对象,同时注入数据源 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
       <!-- <constructor-arg ref="dataSource"/>-->
        
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- 3. 创建Dao对象,同时注入JdbcTemplate对象 -->
    <bean id="accountDao" class="com.mobaijun.dao.impl.AccountDaoImpl">
        <property name="jdbcTemplate" ref="jdbcTemplate"/>
    </bean>
    
    <!-- 4. 创建Service对象,同时注入Dao对象 -->
    <bean id="accountService" class="com.mobaijun.service.impl.AccountServiceImpl">
        <property name="accountDao" ref="accountDao"/>
    </bean>
</beans>
  • main同级目录test新建测试类
代码语言:javascript
复制
/**
 * DevelopmentTool: IntelliJ IDEA 2018.2.4 x64
 * Author: Auser·杰
 * CreateDate: 2020/1/26 0:56
 * ClassName: AccountServiceTest
 * 释义:测试类
 */
public class AccountServiceTest {

    @Test
    public void testFindAll(){
        //1.创建IOC容器
        ApplicationContext ac = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
        //2.获取service对象
        AccountService accountService = (AccountService)ac.getBean("accountService");
             List<Account> list = accountService.findAll();
        for(Account account:list){
            System.out.println(account);
        }
    }

}
  • 输出效果

好了各位读者朋友们,以上就是本文的全部内容了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 框架师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档