spring4天计划(3day)
来源:互联网 发布:线切割3b编程实例宝剑 编辑:程序博客网 时间:2024/05/22 05:20
基于aspectj的注解aop
1.使用注解方式实现aop操作
第一步:创建对象
第二步:在spring核心配置文件中
第三步:在增强的
spring的jdbcTemplate
1.spring框架一站式框架
(1)针对javaee三层,每一层都有解决技术
(2)在dao层,使用jdbcTemplate
2.spring对不同的持久化层技术都进行封装
(1)jdbcTemplate对jdbc进行封装
3.jdbcTemplate使用和dbutis使用很相似,都对数据库进行crud操作
增加
1.导入jdbcTemplate的jar包
2.创建对象,设置数据库信息
3.创建jdbcTemplate对象,设置数据源
调用jdbcTemplate对象里面的方法实现
<?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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 配置c3p0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!--注入里面的属性值 --> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="user" value="root"></property> <property name="jdbcUrl" value="jdbc:mysql:///yun"></property> <property name="password" value="123456"></property> </bean> <!--开启aop操作 --> <!-- <aop:aspectj-autoproxy></aop:aspectj-autoproxy> <bean id="book" class="cn.itcast.aop.Book"></bean> <bean id="mybook" class="cn.itcast.aop.MyBook"></bean> --></beans>
package cn.itcast.jdbc;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.util.List;import org.junit.Test;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import org.springframework.jdbc.datasource.DriverManagerDataSource;import com.mchange.v2.c3p0.ComboPooledDataSource;import com.mysql.jdbc.Connection;import com.mysql.jdbc.PreparedStatement;import com.opensymphony.xwork2.Result;import com.sun.org.apache.regexp.internal.recompile;public class JdbcTemplateDemo2 {// @Test// public void JDBCTest() throws SQLException{// Connection conn=null;// PreparedStatement psmt=null;// ResultSet rs=null;// try {// Class.forName("com.mysql.jdbc.Driver");// conn= (Connection) DriverManager.getConnection("jdbc:mysql:///yun","root","123456");// String sql="select * from user where usrname=?";// conn.prepareStatement(sql);// psmt.setString(1, "lucy");// rs=psmt.executeQuery();// while(rs.next()){// String usrname=rs.getString("usrname");// String password=rs.getString("password");// User user=new User();// user.setUsrname(usrname);// user.setPassword(password);// System.out.println(user);// }// } catch (Exception e) {// e.printStackTrace();// }finally {// rs.close();// conn.close();// psmt.close();// }// }// @Test// public void testObject() {// // 1.设置数据库信息// DriverManagerDataSource dataSource = new DriverManagerDataSource();// dataSource.setDriverClassName("com.mysql.jdbc.Driver");// dataSource.setUrl("jdbc:mysql:///yun");// dataSource.setUsername("root");// dataSource.setPassword("123456");// // 2.创建jdbcTemplate对象,设置数据源// JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);// // 3.调用方法// //调用方法得到记录数// String sql="select * from user where username=?";// User user=jdbcTemplate.queryForObject(sql, new MyRowMapper(), "marry");// System.out.println(user); //// }//4.查询返回对象 @Test public void testList() {// ComboPooledDataSource dataSource=new ComboPooledDataSource();// dataSource.setDriverClass(com.mysql.jdbc.Driver); // 1.设置数据库信息 DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql:///yun"); dataSource.setUsername("root"); dataSource.setPassword("123456"); // 2.创建jdbcTemplate对象,设置数据源 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); // 3.调用方法 //调用方法得到记录数 String sql="select * from user "; List<User> list=jdbcTemplate.query(sql, new MyRowMapper()); System.out.println(list); }}class MyRowMapper implements RowMapper<User>{ @Override public User mapRow(ResultSet rs, int num) throws SQLException { String username=rs.getString("username"); String password=rs.getString("password"); User user=new User(); user.setUsrname(username); user.setPassword(password); return user; }}
Spring的事务管理功能
事务概念:
1.什么是事务
2.事务的特性:
原子性,一致性,隔离性,持久性
3.不可隔离产生读问题
4.解决读问题
(1)设置隔离性
spring事务管理api
第一种:编程式事务管理(不怎么用)
第二种:声明式事务管理
(1)基于xml配置文件实现
(2)基于注解实现
spring针对不同的dao层,提供接口不同的实现类
首先配置事务的管理器
搭建转账环境
1.创建数据库表
2.创建一个service和dao类,完成注入关系
(1)service层又叫做业务逻辑层
(2)dao层,单纯对数据库操作层,在dao层不添加业务
(3)需求:小王转账给小马
小王少1000
小马多1000
3.没加事务产生的问题
(1)如果小王少了1000之后,出现异常,小马不会多1000,钱丢了
4.解决
(1)添加事务解决,出现异常回滚操作
声明式的事务管理(xml配置)
1.配置文件使用aop思想配置
第一步:配置事务管理器
第二步:配置事务的增强
第三步:配置切面
<?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" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 配置c3p0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!--注入里面的属性值 --> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="user" value="root"></property> <property name="jdbcUrl" value="jdbc:mysql:///yun"></property> <property name="password" value="123456"></property> </bean> <!-- 1.配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 注入dataSource --> <property name="dataSource" ref="dataSource"></property> </bean> <!--配置事务的增强 --> <tx:advice id="txadvice" transaction-manager="transactionManager"> <tx:attributes> <!--设置进行事务操作的方法匹配规则 --> <tx:method name="account*" /> </tx:attributes> </tx:advice> <!-- 配置切面 --> <aop:config> <aop:pointcut expression="execution(* cn.itcast.dao.OrdersDao.*(..))" id="pointcut1"/> <aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/> </aop:config> <bean id="ordersService" class="cn.itcast.service.OrdersService"> <property name="ordersDao" ref="ordersDao"></property> </bean> <bean id="ordersDao" class="cn.itcast.dao.OrdersDao"> <property name="jdbcTemplate" ref="jdbcTemplate"></property> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean></beans>
声明式事务管理(注解)
第一步:配置事务管理器
第二步:配置事务注释
第三步:在使用事务的方法所在类上面添加注释
package cn.itcast.service;import org.springframework.transaction.annotation.Transactional;import cn.itcast.dao.OrdersDao;@Transactionalpublic class OrdersService { private OrdersDao ordersDao; public void setOrdersDao(OrdersDao ordersDao) { this.ordersDao = ordersDao; } //调用dao的方法 public void accountMoney(){ //小王少钱 ordersDao.lessMoney(); //出现异常 int i=10/0; //小马多钱 ordersDao.moreMoney(); }}
<?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" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 配置c3p0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!--注入里面的属性值 --> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="user" value="root"></property> <property name="jdbcUrl" value="jdbc:mysql:///yun"></property> <property name="password" value="123456"></property> </bean> <!-- 1.配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 注入dataSource --> <property name="dataSource" ref="dataSource"></property> </bean> <tx:annotation-driven transaction-manager="transactionManager"/> <bean id="ordersService" class="cn.itcast.service.OrdersService"> <property name="ordersDao" ref="ordersDao"></property> </bean> <bean id="ordersDao" class="cn.itcast.dao.OrdersDao"> <property name="jdbcTemplate" ref="jdbcTemplate"></property> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean></beans>
- spring4天计划(3day)
- spring4天计划(2day)
- spring4天计划
- spring四天计划(4day)
- 100天计划~day 36
- pgmer day 3:翻译计划
- Spring4+Quartz2计划任务集群
- Spring4.x 学习笔记day 02
- Spring4整合MyBatis3(3)
- 3-day(JavaScript)
- spring4.x.x quartz计划任务
- NOIP 2015 Day 2 transport 运输计划 (树链剖分 序列差分 二分答案)
- 8.19(军训DAY 3)
- Day-3
- day 3
- Day 3
- [Day 3]
- Day 3
- 手动控制云信的多段登录
- SpringMVC相关笔记
- Learn X in Y minutes
- VLC的视频编音频等码格式的缩写
- 二叉树
- spring4天计划(3day)
- 计算字符个数
- Gulp 常用插件
- PHP parse_str 解析字符串
- 台湾机器学习课程 超简版总结一
- jQueryEasyUi验证
- MapReduce工作原理
- 对MySQL开放远程连接权限的方法
- CentOS 7 在SELinux保护下安全打开端口