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的使用
使用
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);
}