首页 > 其他分享 >spring boot(学习笔记第七课)

spring boot(学习笔记第七课)

时间:2024-06-15 16:33:50浏览次数:37  
标签:return name 第七课 spring boot id book public

spring boot(学习笔记第七课)

  • 配置AOP,数据库操作(jdbcTemplate)

学习内容:

  1. 配置AOP
  2. 数据库操作(jdbcTemplate)

1. 配置AOP

如果想要在一些既存系统上对系统进行分析,监视,但是又不想改修原有的代码,可以通过AOP (Aspect Of Program)来实现。

  • pom.xml中引入spring-boot-starter-aop
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-aop</artifactId>
    		</dependency>
    
  • 定义serviceUserService,假设这就是想要监视的legency class
    @Service
    public class UserService {
        public String getUserById(Integer id){
            System.out.println("getUserById");
            return "user";
        }
        public void deleteUserById(Integer id){
            System.out.println("deleteUserById");
        }
    }
    
  • 定义AOP类,对UserService类进行监视。
    • @Before(value = "userServicePC()")
      在函数执行前执行
    • @after(value = "userServicePC()")
      在函数执行后执行
    • @AfterReturning(value = "userServicePC()", returning = "result")
      在函数返回直前执行
    • @AfterThrowing(value = "userServicePC()", throwing = "e")
      在函数抛出异常直前执行。
    • @Around("userServicePC()")
      在函数执行前后执行,能够包围函数执行,函数执行就是Object ret = pjp.proceed();
    @Aspect
    @Component
    public class LogAspect {
        @Pointcut("execution(* com.example.demo.services.*.*(..))")
        public void userServicePC() {
        }
    
        @Before(value = "userServicePC()")
        public void before(JoinPoint jp) {
            String name = jp.getSignature().getName();
            System.out.println(name + " is beginning");
        }
    
        @After(value = "userServicePC()")
        public void after(JoinPoint jp) {
            String name = jp.getSignature().getName();
            System.out.println(name + " is finishing");
        }
    
        @AfterReturning(value = "userServicePC()", returning = "result")
        public void afterReturning(JoinPoint jp, Object result) {
            String name = jp.getSignature().getName();
            System.out.println(name + " is returning " + result);
        }
    
        @AfterThrowing(value = "userServicePC()", throwing = "e")
        public void afterReturning(JoinPoint jp, Exception e) {
            String name = jp.getSignature().getName();
            System.out.println(name + " is throwing" + e);
        }
    
        @Around("userServicePC()")
        public Object around(ProceedingJoinPoint pjp) throws Throwable {
            String name = pjp.getSignature().getName();
            AroundClosure ac = new AroundClosure() {
                @Override
                public Object run(Object[] args) throws Throwable {
                    return "hello,around";
                }
            };
            System.out.println(name + " is arounding before...");
            Object ret = pjp.proceed();
            System.out.println(name + " is arounding after...");
            return ret;
        }
    }	
    

注意,@AfterReturning注解中的returning="result"和注解对应的方法的参数名必须一致。

  • 接下来模仿UserServicecontroller中被执行。
        @Autowired
        private UserService us;
    
        @GetMapping("/hello")
        @ResponseBody
        public String hello() {
            String name = us.getUserById(1);
    
  • 测试执行的效果。
    在这里插入图片描述

2. 数据库操作(jdbcTemplate)

可以使用jdbcTemplate进行简单的数据库操作。在这里,使用postgresql作为DB服务器。
数据库名称: springboot
数据库用户: finlay
数据库密码: 123456

  1. 导入依赖进入pom.xml
  • spring bootjdbc依赖
    	<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-jdbc</artifactId>
    	</dependency>
    
  • 使用alibabadruid连接池进行jdbc进行连接,导入druid依赖。
    	<dependency>
    			<groupId>com.alibaba</groupId>
    			<artifactId>druid</artifactId>
    			<version>1.1.9</version>
    	</dependency>
    
  • 导入postgreSQL的驱动依赖。
    	<dependency>
    			<groupId>org.postgresql</groupId>
    			<artifactId>postgresql</artifactId>
    			<scope>runtime</scope>
    	</dependency>
    
  1. 建立book表。
    create table book (
      id serial not null
      , name character varying(128) default NULL
      , author character varying(128) default NULL
      , primary key (id)
    );
    
  2. 调用层次。
    在这里插入图片描述
  3. 配置数据库连接。
    注意,首先学习单一数据库连接,之后练习多数据库
    #database
    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    spring.datasource.url=jdbc:postgresql://127.0.0.1:5432/springboot
    spring.datasource.username=finlay
    spring.datasource.password=123456
    
  4. java的代码实现。
  • 实现repository代码。
    @Repository
    public class BookDao {
        @Autowired
        JdbcTemplate jdbcTemplate;
    
        public int addBook(Book book){
            jdbcTemplate.update("insert into " +
                    "book(name,author) values(?,?)",
                    book.getName(),
                    book.getAuthor());
    
            // get max id
            int maxId = jdbcTemplate.queryForObject(
                    "select max(id) from book",Integer.class);
            return maxId;
        }
        public int updateBook(Book book){
            return jdbcTemplate.update("update book set" +
                    " name=?," +
                    " author=?" +
                    " where id=?",
                    book.getName(),
                    book.getAuthor(),
                    book.getId());
        }
        public int deleteBookById(Integer id){
            return jdbcTemplate.update("delete from " +
                    "book where id=?",
                    id);
        }
        public Book getBookById(Integer id){
            return jdbcTemplate.queryForObject("select * from" +
                    " book where id=?",
                    new BeanPropertyRowMapper<>(Book.class),id);
        }
        public List<Book> getAllBooks(){
            return jdbcTemplate.query("select * from book",
                    new BeanPropertyRowMapper<>(Book.class));
        }
    }
    
    查看JdbcTemplateAutoConfiguration–>JdbcTemplateConfiguration。可见,如果没有spring boot应用程序没有自定义的JdbcTemplate,那么会通过@Configuration注入一个JdbcTemplatebean。这里BookDao使用spring boot注入的bean进行数据库的访问。
    在这里插入图片描述
  • 实现service代码。通过Autowired出来repositoryBookDao,进行数据库的访问,实现起来非常简单。
    @Service
    public class BookService {
        @Autowired
        BookDao bookDao;
    
        public int addBook(Book book){
            return bookDao.addBook(book);
        }
        public int updateBook(Book book){
            return bookDao.updateBook(book);
        }
        public int deleteBookById(Integer id){
            return bookDao.deleteBookById(id);
        }
        public Book getBookById(Integer id){
            return bookDao.getBookById(id);
        }
        public List<Book> getAllBooks(){
            return bookDao.getAllBooks();
        }
    }
    
  • 实现controller代码。通过AutowiredserviceBookService,实现画面的逻辑,完全不意识DB操作。
     @GetMapping("/bookOps")
        @ResponseBody
        public List<Book> bookOps() {
            Book book = new Book();
            book.setAuthor("finlay");
            book.setName("spring boot");
            int maxId = bookService.addBook(book);
    
            System.out.println("addBook()>>>" + maxId);
    
            book = new Book();
            book.setId(maxId);
            book.setName("springboot2");
            book.setAuthor("finlay2");
            int ret = bookService.updateBook(book);
            System.out.println("updateBook()>>>" + " ret");
    
            book = bookService.getBookById(maxId);
            System.out.println("getBookById>>>" + book);
    
            return bookService.getAllBooks();
        }
    

标签:return,name,第七课,spring,boot,id,book,public
From: https://blog.csdn.net/sealaugh1980/article/details/139638634

相关文章

  • springboot+vue+mybatis家电系统+PPT+论文+讲解+售后
    随着信息互联网购物的飞速发展,一般企业都去创建属于自己的电商平台以及购物管理系统。本文介绍了家电销售系统的开发全过程。通过分析企业对于家电销售系统的需求,创建了一个计算机管理家电销售系统的方案。文章介绍了家电销售系统的系统分析部分,包括可行性分析等,系统设计部分主......
  • 【计算机毕业设计】基于springboot的大创管理系统【源码+lw+部署文档】
    包含论文源码的压缩包较大,请私信或者加我的绿色小软件获取免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所......
  • 使用 Spring Boot 的yml配置文件读取方式
    在Java项目中读取YML(YAML)配置文件有多种方式,尤其在使用SpringFramework(包括SpringBoot)时,更是提供了丰富的支持。以下是几种常见的方式来读取YML配置文件:1.使用SpringBoot的自动配置SpringBoot提供了对YML文件的自动化支持,这也是最常用的方式。1.1使用@Value......
  • 面试题——Spring
    ★1.Spring和SpringBuffer和SpringBuilder的区别?    ①值可变性      Spring中的值是final修饰的,不可变,当试图修改这个不可变值时等于创建一个新的对象。   SpringBuffer和SpringBuilder则是可变的    ②线程安全性    Spring: ......
  • 基于Java+SpringBoot+Vue前后端分离宠物管理系统(源码+万字LW+PPT+部署教程)
    博主介绍:✌全网粉丝10W+csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌一、作品包含源码+数据库+设计文档LW+PPT+全套环境和工具资源+部署教程二、项目......
  • 史上最简单的bootloader【STM32F767】[【二】
    继上一篇史上最简单的bootloader【STM32F767】后,最近进一步研究了下bootloader。任务:bootloader不变,app自我复制,将app搬运到sram中运行。目的:1)学习bootloader;     2)没什么大用处,主要是学习---->看资料说是代码在sram中运行会快一点,本人没有测试过学习过程有点......
  • 深入探索Spring Boot的条件装配与条件注解
    SpringBoot的条件装配(Conditional装配)是一个强大的功能,它允许你根据特定的条件来决定哪些配置类、beans或组件应该被加载到Spring应用上下文中。这有助于创建更灵活、更模块化的SpringBoot应用程序。在SpringBoot中,条件装配主要通过@Conditional注解及其派生注解(如@Co......
  • springMVC中的注解
    目录3、@RequestMapping注解3.1、功能3.2、注解的位置3.3、value属性3.4、method属性3.5、params属性(了解)3.6、headers3.7、支持ant风格的路径3.8、SpringMVC支持路径中的占位符**3、@RequestMapping注解3.1、功能就是将用户的请求和处理请求的控制器的方法关联起来,建立映射......
  • 基于springboot+vue可盈保险合同管理系统含文档附万字文档(源码+lw+部署文档+讲解等)
    前言......
  • 基于springboot+vue科研工作量管理系统含文档附万字文档(源码+lw+部署文档+讲解等)
    前言......