JdbcTemplate 简介
为了使 JDBC 更加易于使用, Spring 在 JDBC API 上定义了一个抽象层, 以此建立一个 JDBC 存取框架.
作为 Spring JDBC 框架的核心, JDBC 模板的设计目的是为不同类型的 JDBC 操作提供模板方法. 每个模板方法都能控制整个过程, 并允许覆盖过程中的特定任务. 通过这种方式, 可以在尽可能保留灵活性的情况下, 将数据库存取的工作量降到最低.
JdbcTemplate的配置
使用 JdbcTemplate 操作数据库
引入配置文件DB.properties,并将类注册到IOC容器中
<context:property-placeholder location="DB.properties"/>
<context:component-scan base-package="com.zzxtit.springboot.jdbc"></context:component-scan>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${mysql_driver}"></property>
<property name="url" value="${mysql_url}"></property>
<property name="username" value="${mysql_username}"></property>
<property name="password" value="${mysql_passwd}"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<bean id="namedJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg index="0" ref="dataSource"></constructor-arg>
</bean>
在Dao层类加上注解标识类为持久层受Spring组件管理
@Repository
public class UserDao
属性前加注解@Autowired
@Autowired
private JdbcTemplate jdbcTemplate;
插入数据方法
public void insertUserInfo(SysUser su) {
String sql = "insert into t_sys_user (user_name, passwd, salt, real_name, avatar, phone, "
+ "email, gender, create_time) values (?, ?, ?, ?, ?, ?, ?, ?, now())";
jdbcTemplate.update(sql, su.getUserName(), su.getPasswd(), su.getSalt(), su.getRealName(),
su.getAvatar(), su.getPhone(), su.getEmail(), su.getGender());
}
查询数据方法
BeanPropertyRowMapper的使用
使用BeanPropertyRowMapper将数据库查询结果转换为Java类对象。
将Java类的属性名转化成下划线分割的形式,如userName会被转化成user_name,这是因为:
数据库设计字段名称,一般会使用下划线分割形式,如:user_name
而Java类设置属性,一般使用驼峰命名形式,如:userName。
使用BeanPropertyRowMapper自动绑定,需要确保数据库表列名称与Java实体类属性名称相同
public SysUser getUserById(int userId) {
String sql = "select * from t_sys_user where user_id = ?";
return jdbcTemplate.query(sql, new Object[] {userId}, new BeanPropertyRowMapper<SysUser>(SysUser.class)).get(0);
}
修改数据方法
String sql="update user set name=?,deptid=? where id=?";
jdbcTemplate.update(sql,new Object[]{"zhh",5,51});
删除数据方法
String sql="delete from user where id=?";
jdbcTemplate.update(sql,51);
在 JDBC 模板中使用具名参数[命名空间方式]
在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定.
在 Spring JDBC 框架中, 绑定 SQL 参数的另一种选择是使用具名参数(named parameter).
具名参数: SQL 按名称(以冒号开头)而不是按位置进行指定. 具名参数更易于维护, 也提升了可读性. 具名参数由框架类在运行时用占位符取代
具名参数只在 NamedParameterJdbcTemplate 中能够使用
@Autowired
private NamedParameterJdbcTemplate npjTemplate;
public void insertUserInfoByNJP(SysUser su) {
String sql = "insert into t_sys_user (user_name, passwd, salt, real_name, avatar, phone, "
+ "email, gender, create_time) values (:userName, :passwd, :salt, :realName, :avatar, :phone, :email, :gender, now())";
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("userName", su.getUserName());
paramMap.put("passwd", su.getPasswd());
paramMap.put("salt", su.getSalt());
paramMap.put("realName", su.getRealName());
paramMap.put("avatar", su.getAvatar());
paramMap.put("phone", su.getPhone());
paramMap.put("email", su.getEmail());
paramMap.put("gender", su.getGender());
npjTemplate.update(sql, paramMap);
}
本文介绍了如何在SpringAOP中使用JdbcTemplate进行数据库操作,包括配置、插入、查询、更新和删除数据的方法。特别地,讨论了在JDBC模板中使用具名参数的命名空间方式,以及自动绑定时数据库列名与实体类属性名的对应规则。
4243

被折叠的 条评论
为什么被折叠?



