目录:
- 四、JdbcTemplate
- 1. 准备工作
- 2. 添加、修改、删除
- 3. 查询
- 4. 批量操作
- 五、事务管理
- 1. 注解声明式事务管理
- 2. xml声明式事务管理
- 3. 完全注解声明式事务管理
- 六、Spring5新特性
- 1. 日志
四、JdbcTemplate
1. 准备工作
① 导入jar包;② 在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;
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;