基于aspectj的注解aop操作
- 第一步建立對象
- 第二步在spring核心配置檔案中開啟aop操作 image.png
- 第三步在增強類上使用注解完成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而已)
- 删除
- 查詢
使用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>
第三步:
在使用的方法所在的類上面添加注解