Spring学习日志四

一、回顾AOP使用注解

1.基于注解

  1. 依赖的jar包。
  2. 定义类并把该类标注为切面类。 @Aspect
  3. 再切面类中可以定义若干个方法 @Before @After @AfterReturning @AfterThrowing
  4. 配置文件开启切面注解。

2.基于xml

 <bean>切面类的bean

 <aop:config>

     <aop:pointcut expression=”execution()” id=””/>

     <aop:aspect  ref=””>

         <aop:after point-ref=”” method=””>

     </aop:aspect>

</aop:config>

 二、SpringJDBC ----->数据库

  1.spring配置文件中配置数据源bean

<!-- 配置数据源:数据库交互的。c3p0 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="driverClass" value="${jdbc.driver}" />
        <property name="jdbcUrl" value="${jdbc.url}" />
    </bean>

  2.配置JDBCTemplate的bean

    <!-- 配置springjdbc的模板类 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource" />
    </bean>

  3.使用JDBCTemplate。

    1.增删改的方法

    2.批量增删改

    3.查询一条记录

    4.查询多条记录

    5.查询单列值

package com.zhiyou100.klb.dao;

import java.util.ArrayList;
import java.util.List;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import com.zhiyou100.klb.bean.User;

class SpringTest {
    
    private static JdbcTemplate jdbcTemplate;

    @BeforeAll
    static void setUpBeforeClass() throws Exception {
        ApplicationContext app = new ClassPathXmlApplicationContext("app.xml");
        jdbcTemplate = (JdbcTemplate) app.getBean("jdbcTemplate");
    }

    @AfterAll
    static void tearDownAfterClass() throws Exception {
    }

    /**
     * 查询多条记录
     */
    @Test
    void testFindAll() {
        String sql = "select * from user";
        RowMapper<User> rowMapper = new BeanPropertyRowMapper<>(User.class);
        List<User> list = jdbcTemplate.query(sql, rowMapper);
        System.out.println(list);
    }
    
    /**
     * 查询单列值
     */
    @Test
    void testFindSingleColumn() {
        String sql = "select count(*) from user";
        int c = jdbcTemplate.queryForObject(sql, Integer.class);
        System.out.println(c);
    }
    
    /**
     * 查询单个记录
     */
    @Test
    void testFindById() {
        String sql = "select * from user where id=?";
        RowMapper<User> rowMapper = new BeanPropertyRowMapper<>(User.class);
        List<User> list = jdbcTemplate.query(sql, rowMapper);
        System.out.println(list);
    }
    
    /**
     * 进行增删改查的操作
     */
    @Test
    void testUpdate() {
        String sql = "insert into user values(?,?,?)";
        jdbcTemplate.update(sql, "4","4","4");
    }
    
    /**
     * 批量更新
     */
    @Test
    void testBatchUpdate() {
        String sql = "insert into user values(?,?,?)";
        List<Object[]> batchArgs = new ArrayList<>();
        Object[] e1 = {"5","5","5"};
        batchArgs.add(e1);
        Object[] e2 = {"6","6","6"};
        batchArgs.add(e2);
        Object[] e3 = {"7","7","7"};
        batchArgs.add(e3);
        jdbcTemplate.batchUpdate(sql,batchArgs);
    }

}

三、springjdbc案例

  1.创建数据库

  

  2.建立项目并导入jar包

  3.创建操作类

package com.zhiyou100.klb.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class BookShopDaoImp implements BookShopDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    @Override
    public void updateStock(String isbn) {
        String sql1 = "select stock from book_stock where isbn=?";
        Integer stock = jdbcTemplate.queryForObject(sql1, Integer.class,isbn);
        if(stock<=0) {
            throw new RuntimeException("书的库存不足");
        }
        String sql = "update book_stock set stock=stock-1 where isbn=?";
        jdbcTemplate.update(sql,isbn);
    }

    @Override
    public double findByBookIsbn(String isbn) {
        String sql = "select price from book where isbn=?";
        return jdbcTemplate.queryForObject(sql, Double.class,isbn);
    }
    
    @Override
    public void updateAccount(String username, double money) {
        String sql1 = "select balance from account where username=?";
        double balance = jdbcTemplate.queryForObject(sql1, Double.class,username);
        if(balance<=money) {
            throw new RuntimeException("书的库存不足");
        }
        String sql = "update account set balance=balance-? where username=?";
        jdbcTemplate.update(sql, money,username);
    }
}

  4.创建服务类

package com.zhiyou100.klb.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class BookShopServiceImp implements BookShopService {

    @Autowired
    private BookShopDao bookShopDao;
    
    //订购
    @Override
    public void purchase(String username, String isbn) {
        //1.查询该书的价格
        double price = bookShopDao.findByBookIsbn(isbn);
        //2.修改书的库存
        bookShopDao.updateStock(isbn);
        //3.修改用户余额
        bookShopDao.updateAccount(username, price);
    }
}

  5.配置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-4.2.xsd">
    
    <!-- 包扫描:扫描 -->
    <context:component-scan base-package="com.zhiyou100.klb.dao"/>
    
    <!-- 导入数据源 -->    
    <context:property-placeholder file-encoding="utf-8" location="classpath:*.properties"/>
    
    
    <!-- 配置数据源:数据库交互的。c3p0 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="driverClass" value="${jdbc.driver}" />
        <property name="jdbcUrl" value="${jdbc.url}" />
    </bean>
    
    <!-- 配置springjdbc的模板类 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource" />
    </bean>
    
</beans>

  6.测试

package com.zhiyou100.klb.dao;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

class BookShopServiceImpTest {

    @BeforeAll
    static void setUpBeforeClass() throws Exception {
    }

    @AfterAll
    static void tearDownAfterClass() throws Exception {
    }

    @Test
    void test() {
        ApplicationContext app = new ClassPathXmlApplicationContext("app.xml");
        BookShopService bookShopService = (BookShopService) app.getBean("bookShopServiceImp");
        bookShopService.purchase("Tom", "0001");
    }

}
原文地址:https://www.cnblogs.com/kklb/p/11489133.html