目录:

  • 四、JdbcTemplate
  • 1. 准备工作
  • 2. 添加、修改、删除
  • 3. 查询
  • 4. 批量操作
  • 五、事务管理
  • 1. 注解声明式事务管理
  • 2. xml声明式事务管理
  • 3. 完全注解声明式事务管理
  • 六、Spring5新特性
  • 1. 日志


四、JdbcTemplate

1. 准备工作

① 导入jar包;

spring 重写jpa 表逻辑删除 spring jpa update_sql

spring 重写jpa 表逻辑删除 spring jpa update_Source_02

② 在spring配置文件中配置数据连接池;

<!-- 数据库连接池 -->   <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
       <property name="url" value="jdbc:mysql:///user_db"/>
       <property name="username" value="root" />
       <property name="password" value="123456" />
       <property name="driverClassName" value="com.mysql.jdbc.Driver" />
   </bean>
③ 配置JdbcTemplate对象,注入DataSource;
<context:component-scan base-package="com.nzs.spring5"></context:component-scan>   
   <!-- JdbcTemplate对象-->
   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
       <!-- 注入dataSource-->
       <property name="dataSource" ref="dataSource"></property>
   </bean>
④ 创建service和dao类,在dao注入jdbcTemplate对象;
@Repository(value = "userService")public class UserDaoImpl implements UserDao{
   // 注入JdbcTemplate对象
   @Autowired
   private JdbcTemplate jdbcTemplate;
}

@Service
public class UserService {
   // 注入UserDao
   @Autowired
   private UserDao userDao;
}

2. 添加、修改、删除

//实现添加用户
@Override
public void add(User user) {

    String sql1 = "insert into user values(?,?)"; //添加sql语句
    String sql2 = "update user set name=? where id=?"; //修改sql语句
    String sql3 = "delete from user where id=?"; //删除sql语句
    
    Object []args = {user.getId(), user.getName()}; //参数
    
    int count = jdbcTemplate.update(sql1, args);
    System.out.println("影响行数: "+count);
}

3. 查询

查询返回某个值:

//查询记录条数
@Override
public void selectCount() {
    String sql = "select count(*) from user"; //sql语句
    int count = jdbcTemplate.queryForObject(sql,Integer.class);
    System.out.println("行数: "+count);
}

查询返回对象:

@Override
public UserfindUserById(int id) {
   String sql = "select * from user where id=?"; //sql语句
   User user = jdbcTemplate.queryForObject(sql, 
   				new BeanPropertyRowMapper<User>(User.class), id);
   System.out.println(user);
   return user;
}

查询返回集合:

@Override
public List<User> findUserAll() {
    String sql = "select * from user"; //sql语句
    List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class));
    return users;
}

4. 批量操作

批量添加、修改、删除:

// 批量添加 修改 用户
@Override
public void batchAddUser(List<Object[]> batchArgs) {
    String sql1 = "insert into user values(?,?)"; //批量添加sql语句
    String sql2 = "update user set name=? where id=?"; //批量修改sql语句
    
    int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
    System.out.println(Arrays.toString(ints));
}

// 批量删除
Object[] o1={"1"};
batchArgs.add(o1);
String sql = "delete from uesr where id=?";
jdbcTemplate.batchUpdate(sql,batchArgs);

五、事务管理

事务:数据库操作最基本单元,逻辑上一组操作,如果有一个过程失败则所有操作失败。

事务四大特性:
① 原子性:过程不可分割;
② 一致性:操作之前和操作以后总量是不变的;
③ 隔离性:各个操作相互不影响;
④ 持久性:操作完成,持久修改;

Spring事务管理介绍: ① 事务一般添加到JavaEE三层结构里面的Service层(业务逻辑层); ② 两种方式管理事务操作:编程式事务管理 和 声明式事务管理(基于注解或基于xml); ③ 在Spring进行声明式事务管理,底层使用的就是Aop;

spring 重写jpa 表逻辑删除 spring jpa update_Source_03

1. 注解声明式事务管理

步骤:
① 在spring配置文件中配置事务管理器;

<!-- 创建事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
   <!-- 注入数据源 -->
   <property name="dataSource" ref="dataSource"/>
</bean>
② 在spring配置文件中开启事务注解;
xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

<!-- 开启事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager"/>


③ 在service类上面添加事务注解@Transactional
添加在类上面:类里面所有方法有效;
添加在方法上面:此方法有效;

@Transactional参数介绍:
① propagation:事务传播行为;
② ioslation:事务隔离级别;可决解脏读、不可重复读、虚读等问题。
③ timeout:超时时间;
④ readOnly:是否只读;
⑤ rollbackFor:设置出现哪些异常回滚;
⑥ noRollbackFor:设置出现哪些异常不回滚;

2. xml声明式事务管理

① 配置事务管理器;

<!-- 创建事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
   <!-- 注入数据源 -->
   <property name="dataSource" ref="dataSource"/>
</bean>
② 配置通知;
<!--配置通知-->
<tx:advice id="txadvice">
    <!--配置事务参数-->
    <tx:attributes>
      	<!--指定哪种规则的方法上添加事务-->
        <tx:method name="addUser" propagation="REQUIRED"/>
    </tx:attributes>
</tx:advice>
③ 配置切入点和切面;
<!--配置切入点和切面-->
   <aop:config>
       <!--配置切入点-->
       <aop:pointcut id="pt" expression="execution(* com.nzs.spring5.service.UserService.*(..))"/>
       <!--配置切面-->
       <aop:advisor advice-ref="txadvice" pointcut-ref="pt"/>
   </aop:config>

3. 完全注解声明式事务管理

@Configuration //配置类
@ComponentScan(basePackages = "com.nzs.spring5") //开启扫描
@EnableTransactionManagement //开启事务
public class TxConfig {
    //创建数据库连接池
    @Bean
    public DruidDataSource getDruidDataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql:///user_db");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        return dataSource;
    }
    //创建JdbcTemplate对象
    public JdbcTemplate getJdbcTemplate(DataSource dataSource){//参数会在ioc容器中找到
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        //注入jdbcTemplate
        jdbcTemplate.setDataSource(dataSource);
        return jdbcTemplate;
    }
    //创建事务管理器对象
    public DataSourceTransactionManager getDataSourceTransactionManager(DataSource dataSource){
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource);
        return transactionManager;
    }
}

六、Spring5新特性

1. 日志

① Spring5已经移除Log4jConfigListtener,官方建议使用Log4j2,Spring5整合了Log4j2;

spring 重写jpa 表逻辑删除 spring jpa update_sql_04