Spring学习(五)

基于aspectj的注解aop

第一步 创建对象

		<!--bean1.xml   1 创建对象 -->
		<bean id="book" class="cn.itcast.aop.Book"></bean>
		<bean id="myBook" class="cn.itcast.aop.MyBook" ></bean>
		

第二步 在spring核心配置文件中,开启aop操作。

bean1.xml
		<!-- 开启aop操作 -->
		<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

第三步 在增强类上面使用注解完成aop操作

	//在方法上面使用注解完成增强配置
	@Before(value = "execution(* cn.itcast.aop.Book.*(..))")
	public void before1() {
		System.out.println("before.....");
	}

Spring的jdbcTemplate操作

1 spring框架一站式框架

(1)针对javaee三层,每一层都有解决技术

(2)在dao层,使用jdbcTemplate

2 spring对不同的持久化框架都进行了封装


(1)jdbcTemplate对jdbc进行封装

3 jdbcTemplate使用和dbutils使用很相似,都对数据库进行crud操作。

增加

1 导入jdbcTemplate使用的jar包(以及mysql驱动jar包)

2 创建对象,设置数据库信息

3 创建jdbcTemplate对象,设置数据库

4 调用jdbcTemplate对象里面的方法实现操作

	//1 添加操作
	@Test
	public void add() {
		
		//创建对象,设置数据库信息
		DriverManagerDataSource dataSource=new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///spring_day03");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");
		
		//创建jdbcTemplate对象,设置数据源
		JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
		
		
		//调用jdbcTemplate对象里面的方法实现操作
		//创建sql语句
		String sql="insert into user values(?,?)";
		int rows=jdbcTemplate.update(sql, "lucy","250");
		System.out.println("num----"+rows);
	}

修改

	//2修改操作
	@Test
	public void update() {
		
		//创建对象,设置数据库信息
		DriverManagerDataSource dataSource=new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///spring_day03");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");
		
		//创建jdbcTemplate对象,设置数据源
		JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
		//调用jdbcTemplate对象里面的方法实现操作
		//创建sql语句
		String sql="update user set password=? where username=?";
		int rows=jdbcTemplate.update(sql,"666", "lucy");
		System.out.println("num----"+rows);
	}

删除


	@Test
	public void delete() {
		
		//创建对象,设置数据库信息
		DriverManagerDataSource dataSource=new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///spring_day03");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");
		
		//创建jdbcTemplate对象,设置数据源
		JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
		//调用jdbcTemplate对象里面的方法实现操作
		//创建sql语句,利用update方法实现删除
		String sql="delete from user where username=?";
		int rows=jdbcTemplate.update(sql,"lucy");
		System.out.println("num----"+rows);
	}

查询

1 使用jdbcTemplate实现查询操作

	/*dbutils实现查询
	 * QueryRunner runner-=new QueryRunner(datasource);
	 * 返回对象
	 * runner.query(sql,new BeanHandler<User>(User.class));
	 * 返回list集合
	 * runner.query(sql,new BeanListHander<User>(User.class));
	 * 在dbutils时候,有接口ResultSetHandler
	 * dbutils提供了针对不同的结果实现类
	 * 2 jdbcTemplate实现查询,有借口RowMapper,
	 * jdbcTemplate针对这个接口没有提供实现类,得到不同的类型数据自己进行数据封装
	 * 
	 * */

2 查询具体实现

第一个 查询返回某一个值

jdbcTemplate.queryForObject(String sql,Class<T>requiredType)

(1)第一个参数使sql语句

(2)第二个参数 返回类型的class

	@Test
	public void testCount() {
		
		//设置数据库信息
		DriverManagerDataSource dataSource=new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///spring_day03");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");
		
		//创建jdbcTemplate对象,设置数据源
		JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
		//调用方法得到记录数
		String sql="select count(*) from user";
		//调用jdbcTemplate的方法
		int count=jdbcTemplate.queryForObject(sql, Integer.class);
		System.out.println(count);
		
	}

jdbc实现

	//2jdbc实现代码
	@Test
	public void testJDBC() throws SQLException {
		Connection conn=null;
		PreparedStatement psmt=null;
		ResultSet rs=null;
		
		//加载驱动
		try {
			Class.forName("com.mysql.jdbc.Driver");
			//创建连接
			conn=DriverManager.getConnection("jdbc:mysql:///spring_day03","root","123456");
			String sql="select * from user where username=?";
			//预编译sql
			psmt=conn.prepareStatement(sql);
			//设置参数值
			psmt.setString(1, "lucy");
			//执行sql
			rs=psmt.executeQuery();
			while(rs.next()) {
				String username=rs.getString("username");
				String password=rs.getString("password");
				User user=new User();
				user.setUsername(username);
				user.setPassword(password);
				
				
				System.out.println(user);
			}
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}finally {
			rs.close();
			psmt.close();
			conn.close();
		}
	}

第二个 查询返回对象


第一个参数使sql语句,第二个参数是RowMapper,是接口,类似于dbutils里面接口,第三个参数是可变参数

	//3 查询返回对象
	@Test
	public void testObject() {
		
		//设置数据库信息
		DriverManagerDataSource dataSource=new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///spring_day03");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");
		
		//创建jdbcTemplate对象,设置数据源
		JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
		//写sql语句,根据username
		String sql="select * from user where username=?";
		//调用jdbcTemplate的方法实现
		//第二个参数使接口RowMapper,需要自己写类实现接口,自己做数据封装
		User user=jdbcTemplate.queryForObject(sql,new MyRowMapper(),"tom");
		System.out.println(user);
		
	}


class MyRowMapper implements RowMapper<User>{

	public User mapRow(ResultSet rs, int num) throws SQLException {
		//1 从结果集里面把数据得到
		String username=rs.getString("username");
		String password=rs.getString("password");
		
				
		//2 把得到的数据封装到对象里面
		User user=new User();
		user.setUsername(username);
		user.setPassword(password);
				
		return user;
	}
	
	
}

第三个 查询返回list集合


(1)sql语句

(2)RowMapper接口,自己写类实现数据封装

(3)可变参数

	//4 查询返回list集合
	@Test
	public void testList() {
		
		//设置数据库信息
		DriverManagerDataSource dataSource=new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///spring_day03");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");
		
		//创建jdbcTemplate对象,设置数据源
		JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
		//写sql语句
		String sql="select * from user";
		//调用jdbcTemplate的方法实现
		//第二个参数使接口RowMapper,需要自己写类实现接口,自己做数据封装
		List<User> ls=jdbcTemplate.query(sql, new MyRowMapper());
		System.out.println(ls);
		
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值