Spring — JdbcTemplate
Posted 朱呀朱-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring — JdbcTemplate相关的知识,希望对你有一定的参考价值。
Spring — JdbcTemplate
JdbcTemplate做持久层的操作
-
导入包
- aop、ccbe ( 四核心 )、spring-jdbc、 c3p0、mysql-connector-java
-
配置数据源
-
编写数据库配置文件 db.properties ( driver、url、user、pwd )
mysql5:Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost/mysqldb?&useUnicode=true&characterEncoding=utf-8";mysql8:Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost/mysqldb?&useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong"; -
配置文件
<!-- 配置包自动扫描 --> <context:component-scan base-package="com.qut.jdbcTemplate"></context:component-scan> <!-- 导入数据库配置文件 --> <context:property-placeholder location="classpath:db.properties" /> <!-- 配置数据源 --> <bean id="ds" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="$driver"></property> <property name="jdbcUrl" value="$url"></property> <property name="user" value="$user"></property> <property name="password" value="$pwd"></property> </bean>
-
-
dao 层实现类
@Component // 实现类: @Autowired private JdbcTemplate jt; // 通过xml得到jt方式 // 增: String sql = "insert into user(name,pwd,money) value (?,?,?)"; Object[] args = u.getName(),u.getPwd(),u.getMoney(); return jt.update(sql,args) > 0; // 删:delete from user where id = ? // 改:update user set name = ?, pwd = ?, money = ? where id = ? // 查: public User queryById(int id) String sql = "select * from user where id = ?"; Object[] args = id; // 查询所有的话就不用写args了 return jt.queryForObject(sql, args, new RowMapper<User>() public User mapRow(ResultSet resultSet, int i) throws SQLException User u = new User(); u.setId(resultSet.getInt("id")); u.setName(resultSet.getString("name")); u.setPwd(resultSet.getString("pwd")); u.setMoney(resultSet.getInt("money")); return u; );
事务
-
事务是数据库操作的最基本单元,逻辑上的一组操作,要么都成功,如果有一个失败所有都失败
-
特性:ACID
- 即:原子性 —— 要么都成功,要么都失败
- 一致性 —— 操作前与操作后的数据总量不变
- 隔离性 —— 多事务操作时,彼此间不相互影响
- 持久性 —— 事务提交后,表中的数据真正改变
-
ACID、常见的数据失效
-
脏读 —— 事务回滚导致数据失效,即一个事务看到了另一个事务未提交的更新数据
-
幻读 —— 从数据量看问题
-
一个事务在执行过程中读取到了另一个事务已提交的插入数据,即:
第一步:第一个事务刚开始时读取到一批数据, 第二步:第二个事务插入了新数据并提交, 第三步:第一个事务又读取这批数据,发现多了一条,好像发生幻觉一样。
-
-
不可重复读 —— 从数据值看问题
- 在同一事务中,多次读取同一数据却返回不同的结果;即有其他事务更改了这些数据
-
过程
-
如上,在配置文件基础上再添加:
<!-- xml在原有基础上配上tx的xmlns、xsi等 --> <!-- 配置JdbcTemplate --> <bean id="jt" class="org.springframework.jdbc.core.JdbcTemplate"> <!-- ref使用ds数据源 --> <property name="dataSource" ref="ds"></property> </bean> <!-- 数据源的事务管理器 --> <bean id="txman" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="ds"> </property> // 基于数据源ds </bean> <!-- 通过注解方式加入的事务标签起作用 --> <tx:annotation-driven transaction-manager="txman"></tx:annotation-driven>
-
对需要加以事务的方法以注解:@Transactional
-
写到类上就是对类中所有方法织入事务
以上是关于Spring — JdbcTemplate的主要内容,如果未能解决你的问题,请参考以下文章
spring boot 与 JdbcTemplate 一起工作
Spring之004: jdbcTemplate基本使用Spring实物控制