SpringAOP面向切面编程2(JDBC)

本文介绍了如何在SpringAOP中使用JdbcTemplate进行数据库操作,包括配置、插入、查询、更新和删除数据的方法。特别地,讨论了在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);
		
	}

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值