SpringBoot JDBC/AOP
JDBC
工程结构:

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId>
<artifactId>boot-jdbc</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>boot-jdbc</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
实体类:
package com.example.bootjdbc.domain; import java.math.BigDecimal;
import java.util.Date; public class Book {
private Integer bookId;
private String bookName;
private String bookAuthor;
private BigDecimal bookPrice;
private Date bookDate; public Integer getBookId() {
return bookId;
} public void setBookId(Integer bookId) {
this.bookId = bookId;
} public String getBookName() {
return bookName;
} public void setBookName(String bookName) {
this.bookName = bookName;
} public String getBookAuthor() {
return bookAuthor;
} public void setBookAuthor(String bookAuthor) {
this.bookAuthor = bookAuthor;
} public BigDecimal getBookPrice() {
return bookPrice;
} public void setBookPrice(BigDecimal bookPrice) {
this.bookPrice = bookPrice;
} public Date getBookDate() {
return bookDate;
} public void setBookDate(Date bookDate) {
this.bookDate = bookDate;
} @Override
public String toString() {
return "Book{" +
"bookId=" + bookId +
", bookName='" + bookName + '\'' +
", bookAuthor='" + bookAuthor + '\'' +
", bookPrice=" + bookPrice +
", bookDate=" + bookDate +
'}';
}
}
userDaoiml
package com.example.bootjdbc; import com.example.bootjdbc.domain.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository; import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.List; @Repository
public class UserDaoImpl {
@Autowired
private JdbcTemplate jdbcTemplate; class BookRowMapper implements RowMapper<Book> {
@Override
public Book mapRow(ResultSet rs, int rowNum) throws SQLException {
Book book = new Book();
book.setBookAuthor(rs.getString("book_author"));
book.setBookDate(new Date(rs.getDate("book_date").getTime()));
book.setBookId(rs.getInt("book_id"));
book.setBookName(rs.getString("book_name"));
book.setBookPrice(rs.getBigDecimal("book_price"));
return book;
}
} public void add() {
String sql = "INSERT INTO `testdb`.`t_book`(`book_name`, `book_author`, `book_price`, `book_date`) VALUES ('222', '333', 444, '2018-07-11');\n";
jdbcTemplate.execute(sql);
} public Book selectOne() {
String sql = "select * from t_book where book_id=?";
Book book = jdbcTemplate.queryForObject(sql, new BookRowMapper(), 2); return book;
} public List<Book> selectList() {
String sql = "select * from t_book";
return jdbcTemplate.query(sql,new BookRowMapper());
} public void update() {
String sql = "UPDATE `testdb`.`t_book` SET `book_name` = '333', `book_author` = '555', `book_price` = 444, `book_date` = '2018-07-11' WHERE `book_id` = 2;\n";
jdbcTemplate.update(sql);
} public void delete() {
String sql = "delete from t_book where book_id=?";
jdbcTemplate.update(sql,3);
}
}
测试类:
package com.example.bootjdbc; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate; import javax.sql.DataSource; @SpringBootApplication
public class BootJdbcApplication { public static void main(String[] args) throws Exception {
ConfigurableApplicationContext
context = SpringApplication.run(BootJdbcApplication.class, args);
System.out.println(context.getBean(DataSource.class).getClass());
DataSource dataSource = context.getBean(DataSource.class);
System.out.println(dataSource.getConnection().getCatalog());
System.out.println(context.getBean(JdbcTemplate.class));
System.out.println("--------------------------");
UserDaoImpl userDao = context.getBean(UserDaoImpl.class);
System.out.println(userDao.selectOne());
context.close();
}
}
application.properties(默认配置HikariCP连接池)
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql:///testdb?useSSL=true
spring.datasource.username=root
spring.datasource.password=123
# 通过type指定连接池类型
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
AOP
工程结构:

pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId>
<artifactId>boot-aop</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>boot-aop</name>
<description>Demo project for Spring Boot</description> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>
application.properties
#spring.aop.auto = true
##默认为false,根据有无接口来选择使用的代理方式,如果设置为true代表强制使用cglib代理方式
##spring.aop.proxy-target-class=true
接口
package com.example.bootaop.dao;
public interface BookDao {
void addBook(String name, String author);
}
package com.example.bootaop.dao; import org.springframework.stereotype.Repository; @Repository
public class BookDaoImpl implements BookDao { @Override
public void addBook(String name, String author) {
System.out.println("bookName:"+name+", bookAuthor:"+author);
}
}
package com.example.bootaop.dao; import org.springframework.stereotype.Repository; @Repository
public class BookDaoImpl1 implements BookDao {
@Override
public void addBook(String name, String author) { }
}
切入类
package com.example.bootaop.aop; import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component; import java.util.Arrays; @Component
@Aspect
public class BookAop {
// 定义切入点
public static final String POINT_CUT = "execution(* com.example.bootaop.dao..*.*(..))"; @Before(POINT_CUT)
public void before() {
System.out.println("添加图书方法校验前.....");
} @After(POINT_CUT)
public void after(JoinPoint jp) {
/// System.out.println(AopContext.currentProxy());
System.out.println(jp.getTarget().getClass());
System.out.println(Arrays.asList(jp.getArgs()));
System.out.println("添加图书成功后.....");
}
}
测试类:
package com.example.bootaop; import com.example.bootaop.dao.BookDao;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.EnableAspectJAutoProxy; @SpringBootApplication
@EnableAspectJAutoProxy(proxyTargetClass = false, exposeProxy = false)
public class BootAopApplication { public static void main(String[] args) {
ConfigurableApplicationContext
context = SpringApplication.run(BootAopApplication.class, args);
/*BookDaoImpl bookDao = context.getBean(BookDaoImpl.class);
System.out.println(bookDao.getClass());
bookDao.addBook("三国演义", "罗贯中");*/
BookDao bookDao = context.getBean("bookDaoImpl1",BookDao.class);
System.out.println(bookDao.getClass());
bookDao.addBook("三国演义", "罗贯中");
context.close();
}
}
SpringBoot JDBC/AOP的更多相关文章
- Springboot的日志管理&Springboot整合Junit测试&Springboot中AOP的使用
==============Springboot的日志管理============= springboot无需引入日志的包,springboot默认已经依赖了slf4j.logback.log4j等日 ...
- SpringBoot学习笔记(七):SpringBoot使用AOP统一处理请求日志、SpringBoot定时任务@Scheduled、SpringBoot异步调用Async、自定义参数
SpringBoot使用AOP统一处理请求日志 这里就提到了我们Spring当中的AOP,也就是面向切面编程,今天我们使用AOP去对我们的所有请求进行一个统一处理.首先在pom.xml中引入我们需要的 ...
- SpringBoot切面Aop的demo简单讲解
前言 本篇文章主要介绍的是SpringBoot切面Aop的demo简单讲解. SpringBoot Aop 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码. 切面(Aop) 一.概 ...
- Spring全家桶——SpringBoot之AOP详解
Spring全家桶--SpringBoot之AOP详解 面向方面编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象编程(OOP). OOP中模块化的关键单元是类,而在AOP中,模块化单元是方 ...
- 读写分离很难吗?springboot结合aop简单就实现了
目录 前言 环境部署 开始项目 注意 參考: 前言 入职新公司到现在也有一个月了,完成了手头的工作,前几天终于有时间研究下公司旧项目的代码.在研究代码的过程中,发现项目里用到了Spring Aop来实 ...
- SpringBoot CGLIB AOP解决Spring事务,对象调用自己方法事务失效.
对于像我这种喜欢滥用AOP的程序员,遇到坑也是习惯了,不仅仅是事务,其实只要脱离了Spring容器管理的所有对象,对于SpringAOP的注解都会失效,因为他们不是Spring容器的代理类,Sprin ...
- (办公)springboot配置aop处理请求.
最近项目用到springboot,就是需要配置一些东西.比如用aop处理请求.方法前通知获取url,method,ip,类方法,参数,方法后通知,返回参数,而且还可以记录一下日志.下面是操作的代码. ...
- SpringBoot系列——aop 面向切面
前言 项目中我们经常会用到aop切面,比如日志记录:这里简单记录一下springboot是如何使用aop spring对aop的配置,来自springboot参考手册,Common applicati ...
- SpringBoot使用AOP
本文介绍SpringBoot中使用Spring AOP. 简介 AOP简介 AOP可能对于广大开发者耳熟能详,它是Aspect Oriented Programming的缩写,翻译成中文就是:面向切面 ...
随机推荐
- AMD,CMD,CommonJs,UMD讲解
一.CommonJS CommonJS规范加载模块是同步的,只有加载完成,才能执行后面的操作 CommonJS规范中的module.exports和require 每个文件就是一个模块,有自己的作用域 ...
- java中stream部分笔记
Stream流表面上看起来与集合类似,允许你转换和检索数据.然而,两者却有显著的不同1.流不存储元素.它们存储在底层的集合或者按需生成2.流操作不改变他们的源数据.例如filter方法不会从一个新流中 ...
- nmap教程(下)
九.脚本引擎 脚本文件存放在/usr/share/nmap/scripts目录下 SCRIPT SCAN: -sC: equivalent to --script=default #启用默认类脚本 - ...
- C# 调用webserver 出现:未能从程序集“jgd3jufm, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型
一般都是 用的动态调用webserver,然后这次用的是固定的 首先 最后 实例化改接口,然后直接传值调用
- 「暑期训练」「基础DP」免费馅饼(HDU-1176)
题意与分析 中文题就不讲题意了.我是真的菜,菜出声. 不妨思考一下,限制了我们决策的有哪些因素?一,所在的位置:二,所在的时间.还有吗?没有了,所以设dp[i][j]" role=" ...
- katalon系列五:使用Katalon Studio手动编写WEB自动化脚本
上一篇主要讲了怎么录制脚本,这次我们看看怎么手动编写脚本,接下来就编写一个简单的用百度搜索的脚本. 1.我们先抓取页面上的元素,点击工具栏上的Spy Web按钮(地球上有个绿点),URL输入百度地址, ...
- Linux命令应用大词典-第22章 GRUB
22.1 grub-md5-crypt:使用MD5格式加密口令 22.2 grub-install:在设备上安装GRUB 22.3 grub:进入GRUB命令shell 22.4 grub-crypt ...
- TPO-11 C1 Use the gym pass
TPO-11 C1 Use the gym pass 第 1 段 1.Listen to a conversation between a student and a university emplo ...
- TW实习日记:第18天
今天的bug没有那么多了,都是些小bug,一下就改好了.或者是接口那边数据返回的有问题,通知一下同事就ok了.主要今天是在赶功能进度,然而有一个功能模块需求里并没有写,实在是不知道要做成什么样子,真的 ...
- Python版本切换和Pip安装
Python版本切换 现在常用的linux系统中都会默认携带python运行环境,在ubuntu 16.04 和centos 7.3中携带有Python 2.7 和Python3.5两个版本, 默认使 ...