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