基于aspectj的注解aop操作
第一步创建对象
-
第二步在spring核心配置文件中开启aop操作
-
第三步在增强类上使用注解完成aop操作
spring的jdbcTemplate操作(jdbc模板)
1.spring框架一站式框架
1.针对javaee三层,每一层都有解决技术
2.在dao层,使用jdbcTemplate
2.spring对不同的持久化层技术都进行了封装
- jdbcTemplate对jdbc进行封装
3.jdbc模板的使用
与dbutils使用很相似,都是对数据库进行crud的操作
- 增加
导入jar包
创建对象,设置数据库信息
创建jdbcTemplate对象,设置数据源
调用jdbcTemplate对象里面的方法实现操作
//创建对象
DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
driverManagerDataSource.setUrl("jdbc:mysql:///spring");
driverManagerDataSource.setUsername("root");
driverManagerDataSource.setPassword("root");
//创建jdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate();
//调用jdbcTemplate对象里面的方法实现操作
//创建sql语句
String sql = "insert into user values(?,?)";
int rows = jdbcTemplate.update(sql, "admin", "admin");
System.out.println(rows);
- 修改
同上(改变sql而已)
- 删除
同上(改变sql而已)
- 查询
使用jdbc模板也可以实现查询操作
- 查询返回某一个值
第一个参数是sql
第二个参数是 返回类型的class
//创建对象
DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
driverManagerDataSource.setUrl("jdbc:mysql:///spring");
driverManagerDataSource.setUsername("root");
driverManagerDataSource.setPassword("root");
//创建jdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate();
//调用jdbcTemplate对象里面的方法实现操作
//sql语句
String sql = "select count(*) from user";
//调用jdbcTemplate的方法
int count = jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(count);
-
查询返回对象
//创建对象
DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
driverManagerDataSource.setUrl("jdbc:mysql:///spring");
driverManagerDataSource.setUsername("root");
driverManagerDataSource.setPassword("root");
//创建jdbcTemplate对象
JdbcTemplate jdbcTemplate = new JdbcTemplate();
//写sql语句
String sql = "selcect * from user";
//调用jdbcTemplate的方法
User user = (User) jdbcTemplate.queryForObject(sql, new MyRoWMapper(), "admin");
System.out.println(user);
class MyRoWMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int i) throws SQLException {
//获取数据
String username = rs.getString("username");
String password = rs.getString("password");
//将数据分装到对象中
User user = new User();
user.setUsername(username);
user.setPassword(password);
return user;
}
}
-
查询返回list集合
//创建对象
DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
driverManagerDataSource.setUrl("jdbc:mysql:///spring");
driverManagerDataSource.setUsername("root");
driverManagerDataSource.setPassword("root");
//创建jdbcTemplate对象
JdbcTemplate jdbcTemplate = new JdbcTemplate();
//写sql语句
String sql = "selcect * from user";
//调用jdbcTemplate的方法
List<User> list = jdbcTemplate.query(sql, new MyRoWMapper());
System.out.println(list);
class MyRoWMapper implements RowMapper<User> {
@Override
public User mapRow(ResultSet rs, int i) throws SQLException {
//获取数据
String username = rs.getString("username");
String password = rs.getString("password");
//将数据分装到对象中
User user = new User();
user.setUsername(username);
user.setPassword(password);
return user;
}
}
spring配置连接池
- 配置c3p0连接池
1.导入jar包
2.创建spring配置文件,配置连接池
- service和dao注入操作
配置文件的书写方式
<bean id="userService" class="cn.persist.service.UserService">
<!-- 注入userDao对象 -->
<property name="userDao" ref="userDao">
</property>
</bean>
<bean id="userDao" class="cn.persist.dao.UserDao">
<!-- 注入jdbcTemplate对象-->
<property name="jdbcTemplate" ref="jdbcTemplate">
</property>
</bean>
<!-- 创建jdbcTemplate对象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 把dataSource传递给模板对象里面-->
<property name="dataSource" ref="dataSource">
</property>
</bean>
Java代码
UserService.java
private UserDao userDao;
public void add(){
System.out.println("service..................");
userDao.add();
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
UserDao.java
private JdbcTemplate jdbcTemplate;
public void add(){
System.out.println("add..............");
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
spring事务管理
- 事务概念
- 什么是事务(事务是对数据库操作的最基本的操作,指的是一组操作中若有一个不成功则都不成功)
2.事务特性(4个)
3.不考虑隔离性产生读问题
4.解决读问题
(1)。设置隔离级别
- spring进行事务管理api
spring对象事务管理,主要有两种方式:
1.编程式事务管理(不用),因为通过编写代码来实现
2.声明式事务管理
(1).基于xml配置文件实现
(2).基于注解实现
- spring事务管理的api的介绍
接口
PlatformTransactionManager
事务管理器
(1)。spring针对不同的dao层框架,提供接口不同的实现类
事务 | 说明 |
---|---|
org.springframework.jdbc.datasource.Date SourceTransactionManager | 使用 Spring JDBC或mbatis进行持久化数据时使用 |
(2)。首先配置事务的管理器
搭建转账环境
1.设计数据库
2.书写service与dao层代码
3.产生问题
如果a少了钱b却没有多,钱就丢失了
4.解决
添加事务解决,出现异常进行回滚操作
- 声明式事务管理(xml配置)
<!-- 配置出c3p0连接池-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!--注入属性值-->
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///oj"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean>
1.配置文件方式使用aop思想配置
<!-- 配置事务管理器 -->
<bean id="DataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入dataSource-->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置事务的增强-->
<tx:advice id="interceptor" transaction-manager="DataSourceTransactionManager">
<!--指定规则 做事务的事情-->
<tx:attributes>
<!--设置进行事务操作的方法匹配规则-->
<tx:method name="account*"/><!--account*方法名以account开头的所有方法都进行事务增强-->
</tx:attributes>
</tx:advice>
<!--配置切面-->
<aop:config>
<!--切入点-->
<aop:pointcut id="pointcut1" expression="execution(* *.*(..))"></aop:pointcut>
<!--切面-->
<aop:advisor advice-ref="interceptor" pointcut-ref="pointcut1"></aop:advisor>
</aop:config>
- 声明式事务管理(注解)
第一步:
配置事务管理器
<!--配置事务管理器-->
<bean id="DataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!– 注入dataSource–>
<property name="dataSource" ref="dataSource"></property>
</bean>
第二步:
配置事务注解的操作
<!--开启事务注解-->
<tx:annotation-driven transaction-manager="DataSourceTransactionManager"></tx:annotation-driven>
第三步:
在使用的方法所在的类上面添加注解