一、回顾AOP使用注解
1.基于注解
- 依赖的jar包。
- 定义类并把该类标注为切面类。 @Aspect
- 再切面类中可以定义若干个方法 @Before @After @AfterReturning @AfterThrowing
- 配置文件开启切面注解。
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"); } }