天天看點

SpringAOP面向切面程式設計2(JDBC)

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);
		
	}
           

繼續閱讀