Quellcode durchsuchen

0508 spring事务和整合mybatis

Qing vor 1 Jahr
Ursprung
Commit
bfa592f6cf
100 geänderte Dateien mit 757 neuen und 187 gelöschten Zeilen
  1. 24 0
      spring-demo/pom.xml
  2. 1 1
      spring-demo/src/main/java/com/sf/aop/advice/BaseService.java
  3. 1 1
      spring-demo/src/main/java/com/sf/aop/advice/MyAfterAdvice.java
  4. 1 1
      spring-demo/src/main/java/com/sf/aop/advice/MyBeforeAdvice.java
  5. 1 1
      spring-demo/src/main/java/com/sf/aop/advice/Person.java
  6. 1 1
      spring-demo/src/main/java/com/sf/aop/advice/advisor/EatMethodMatcher.java
  7. 2 2
      spring-demo/src/main/java/com/sf/aop/advice/advisor/MyClassFilter.java
  8. 1 1
      spring-demo/src/main/java/com/sf/aop/advice/advisor/MyPointCut.java
  9. 1 1
      spring-demo/src/main/java/com/sf/aop/advice/advisor/MyPointCutAdvisor.java
  10. 1 1
      spring-demo/src/main/java/com/sf/aop/advice/advisor/WcMethodMatcher.java
  11. 1 1
      spring-demo/src/main/java/com/sf/aop/aspect/AopConfig.java
  12. 1 1
      spring-demo/src/main/java/com/sf/aop/aspect/Audience.java
  13. 2 2
      spring-demo/src/main/java/com/sf/aop/aspect/AudienceAnno.java
  14. 1 1
      spring-demo/src/main/java/com/sf/aop/aspect/CrossTalk.java
  15. 1 1
      spring-demo/src/main/java/com/sf/aop/aspect/Performance.java
  16. 44 0
      spring-demo/src/main/java/com/sf/aop/jdbc/DruidConfig.java
  17. 30 0
      spring-demo/src/main/java/com/sf/aop/jdbc/SpringJdbcConfig.java
  18. 12 0
      spring-demo/src/main/java/com/sf/aop/jdbc/dao/AuthorDao.java
  19. 11 0
      spring-demo/src/main/java/com/sf/aop/jdbc/dao/BookDao.java
  20. 37 0
      spring-demo/src/main/java/com/sf/aop/jdbc/dao/impl/AuthorDaoImpl.java
  21. 13 3
      spring-demo/src/main/java/com/sf/aop/jdbc/dao/impl/BookDaoImpl.java
  22. 24 0
      spring-demo/src/main/java/com/sf/aop/jdbc/entity/Author.java
  23. 34 0
      spring-demo/src/main/java/com/sf/aop/jdbc/entity/Book.java
  24. 8 0
      spring-demo/src/main/java/com/sf/aop/jdbc/service/BookService.java
  25. 36 0
      spring-demo/src/main/java/com/sf/aop/jdbc/service/impl/BookServiceImpl.java
  26. 1 1
      spring-demo/src/main/java/com/sf/aop/proxy/Client.java
  27. 1 1
      spring-demo/src/main/java/com/sf/aop/proxy/GamePlayer.java
  28. 1 1
      spring-demo/src/main/java/com/sf/aop/proxy/GamePlayerProxy.java
  29. 1 1
      spring-demo/src/main/java/com/sf/aop/proxy/IGamePlayer.java
  30. 2 2
      spring-demo/src/main/java/com/sf/aop/proxy/cglib/CglibClient.java
  31. 1 1
      spring-demo/src/main/java/com/sf/aop/proxy/cglib/CglibDemo.java
  32. 1 1
      spring-demo/src/main/java/com/sf/aop/proxy/cglib/MyMethodInterceptor.java
  33. 3 3
      spring-demo/src/main/java/com/sf/aop/proxy/jdk/JdkClient.java
  34. 1 1
      spring-demo/src/main/java/com/sf/aop/proxy/jdk/JdkDemo.java
  35. 1 1
      spring-demo/src/main/java/com/sf/aop/proxy/jdk/MyInvocationHandler.java
  36. 1 1
      spring-demo/src/main/java/com/sf/aop/proxy/jdk/self/$Proxy0.java
  37. 1 1
      spring-demo/src/main/java/com/sf/aop/proxy/jdk/self/Life.java
  38. 1 1
      spring-demo/src/main/java/com/sf/aop/proxy/jdk/self/MyLife.java
  39. 2 2
      spring-demo/src/main/java/com/sf/ioc/SpringConfig.java
  40. 1 1
      spring-demo/src/main/java/com/sf/ioc/anno/Box.java
  41. 1 1
      spring-demo/src/main/java/com/sf/ioc/anno/Chair.java
  42. 1 1
      spring-demo/src/main/java/com/sf/ioc/anno/Desk.java
  43. 1 2
      spring-demo/src/main/java/com/sf/ioc/anno/House.java
  44. 1 1
      spring-demo/src/main/java/com/sf/ioc/anno/Plane.java
  45. 1 1
      spring-demo/src/main/java/com/sf/ioc/anno/Teacher.java
  46. 1 1
      spring-demo/src/main/java/com/sf/ioc/auto/Chair.java
  47. 1 1
      spring-demo/src/main/java/com/sf/ioc/auto/House.java
  48. 1 1
      spring-demo/src/main/java/com/sf/ioc/auto/Teacher.java
  49. 1 1
      spring-demo/src/main/java/com/sf/ioc/car/Car.java
  50. 1 1
      spring-demo/src/main/java/com/sf/ioc/car/CarInstanceFactory.java
  51. 1 1
      spring-demo/src/main/java/com/sf/ioc/car/CarStaticFactory.java
  52. 1 3
      spring-demo/src/main/java/com/sf/ioc/factory/Computer.java
  53. 1 1
      spring-demo/src/main/java/com/sf/ioc/factory/Output.java
  54. 2 3
      spring-demo/src/main/java/com/sf/ioc/factory/OutputFactory.java
  55. 2 2
      spring-demo/src/main/java/com/sf/ioc/factory/printer/BetterPrinter.java
  56. 2 2
      spring-demo/src/main/java/com/sf/ioc/factory/printer/Printer.java
  57. 1 1
      spring-demo/src/main/java/com/sf/ioc/factory/shape/Shape.java
  58. 1 1
      spring-demo/src/main/java/com/sf/ioc/factory/shape/Triangle.java
  59. 1 1
      spring-demo/src/main/java/com/sf/ioc/helloworld/Auth.java
  60. 1 1
      spring-demo/src/main/java/com/sf/ioc/helloworld/Role.java
  61. 1 1
      spring-demo/src/main/java/com/sf/ioc/helloworld/User.java
  62. 1 1
      spring-demo/src/main/java/com/sf/ioc/lifecycle/MyBeanPost.java
  63. 0 12
      spring-demo/src/main/java/com/sf/jdbc/SpringJdbcConfig.java
  64. 1 1
      spring-demo/src/main/java/com/sf/mybatis/DruidConfig.java
  65. 44 0
      spring-demo/src/main/java/com/sf/mybatis/MybatisConfig.java
  66. 2 2
      spring-demo/src/main/java/com/sf/mybatis/dao/BookDao.java
  67. 7 1
      spring-demo/src/main/java/com/sf/mybatis/entity/Book.java
  68. 10 0
      spring-demo/src/main/java/com/sf/mybatis/service/BookService.java
  69. 21 0
      spring-demo/src/main/java/com/sf/mybatis/service/impl/BookServiceImpl.java
  70. 2 2
      spring-demo/src/main/java/com/sf/self/Test.java
  71. 10 10
      spring-demo/src/main/resources/aop/spring-advisor.xml
  72. 2 2
      spring-demo/src/main/resources/aop/spring-aop.xml
  73. 4 4
      spring-demo/src/main/resources/aop/spring-aspect.xml
  74. 0 0
      spring-demo/src/main/resources/aop/spring-mysql.xml
  75. 36 0
      spring-demo/src/main/resources/aop/spring-tx-anno.xml
  76. 50 0
      spring-demo/src/main/resources/aop/spring-tx.xml
  77. 1 1
      spring-demo/src/main/resources/db.properties
  78. 0 0
      spring-demo/src/main/resources/ioc/spring-annotation.xml
  79. 4 4
      spring-demo/src/main/resources/ioc/spring-auto.xml
  80. 8 8
      spring-demo/src/main/resources/ioc/spring-beans-new.xml
  81. 7 7
      spring-demo/src/main/resources/ioc/spring-beans.xml
  82. 5 5
      spring-demo/src/main/resources/ioc/spring-factory.xml
  83. 3 3
      spring-demo/src/main/resources/ioc/spring-singleton.xml
  84. 7 0
      spring-demo/src/main/resources/mapper/BookMapper.xml
  85. 12 0
      spring-demo/src/main/resources/mybatis-config.xml
  86. 34 0
      spring-demo/src/main/resources/spring-mybatis.xml
  87. 0 23
      spring-demo/src/test/java/com/sf/TestJdbc.java
  88. 25 0
      spring-demo/src/test/java/com/sf/TestMybatis.java
  89. 7 7
      spring-demo/src/test/java/com/sf/aop/TestAop.java
  90. 3 3
      spring-demo/src/test/java/com/sf/aop/TestAopConfig.java
  91. 2 2
      spring-demo/src/test/java/com/sf/aop/TestDruid.java
  92. 44 0
      spring-demo/src/test/java/com/sf/aop/TestJdbc.java
  93. 24 0
      spring-demo/src/test/java/com/sf/aop/TestTx.java
  94. 26 0
      spring-demo/src/test/java/com/sf/aop/TestTxAnno.java
  95. 3 3
      spring-demo/src/test/java/com/sf/ioc/TestAnno.java
  96. 5 5
      spring-demo/src/test/java/com/sf/ioc/TestAuto.java
  97. 2 2
      spring-demo/src/test/java/com/sf/ioc/TestConfig.java
  98. 3 3
      spring-demo/src/test/java/com/sf/ioc/TestFactory.java
  99. 5 5
      spring-demo/src/test/java/com/sf/ioc/TestSingleton.java
  100. 5 5
      spring-demo/src/test/java/com/sf/ioc/TestUser.java

+ 24 - 0
spring-demo/pom.xml

@@ -35,6 +35,30 @@
             <version>6.1.6</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-tx</artifactId>
+            <version>6.1.6</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.mybatis</groupId>
+            <artifactId>mybatis</artifactId>
+            <version>3.5.16</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-orm</artifactId>
+            <version>6.1.6</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.mybatis</groupId>
+            <artifactId>mybatis-spring</artifactId>
+            <version>3.0.3</version>
+        </dependency>
+
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>

+ 1 - 1
spring-demo/src/main/java/com/sf/aop/BaseService.java → spring-demo/src/main/java/com/sf/aop/advice/BaseService.java

@@ -1,4 +1,4 @@
-package com.sf.aop;
+package com.sf.aop.advice;
 
 
 public interface BaseService {

+ 1 - 1
spring-demo/src/main/java/com/sf/aop/MyAfterAdvice.java → spring-demo/src/main/java/com/sf/aop/advice/MyAfterAdvice.java

@@ -1,4 +1,4 @@
-package com.sf.aop;
+package com.sf.aop.advice;
 
 import org.springframework.aop.AfterReturningAdvice;
 

+ 1 - 1
spring-demo/src/main/java/com/sf/aop/MyBeforeAdvice.java → spring-demo/src/main/java/com/sf/aop/advice/MyBeforeAdvice.java

@@ -1,4 +1,4 @@
-package com.sf.aop;
+package com.sf.aop.advice;
 
 import org.springframework.aop.MethodBeforeAdvice;
 

+ 1 - 1
spring-demo/src/main/java/com/sf/aop/Person.java → spring-demo/src/main/java/com/sf/aop/advice/Person.java

@@ -1,4 +1,4 @@
-package com.sf.aop;
+package com.sf.aop.advice;
 
 // 实现类
 public class Person implements BaseService {

+ 1 - 1
spring-demo/src/main/java/com/sf/aop/advisor/EatMethodMatcher.java → spring-demo/src/main/java/com/sf/aop/advice/advisor/EatMethodMatcher.java

@@ -1,4 +1,4 @@
-package com.sf.aop.advisor;
+package com.sf.aop.advice.advisor;
 
 
 import org.springframework.aop.MethodMatcher;

+ 2 - 2
spring-demo/src/main/java/com/sf/aop/advisor/MyClassFilter.java → spring-demo/src/main/java/com/sf/aop/advice/advisor/MyClassFilter.java

@@ -1,6 +1,6 @@
-package com.sf.aop.advisor;
+package com.sf.aop.advice.advisor;
 
-import com.sf.aop.Person;
+import com.sf.aop.advice.Person;
 import org.springframework.aop.ClassFilter;
 
 

+ 1 - 1
spring-demo/src/main/java/com/sf/aop/advisor/MyPointCut.java → spring-demo/src/main/java/com/sf/aop/advice/advisor/MyPointCut.java

@@ -1,4 +1,4 @@
-package com.sf.aop.advisor;
+package com.sf.aop.advice.advisor;
 
 import org.springframework.aop.ClassFilter;
 import org.springframework.aop.MethodMatcher;

+ 1 - 1
spring-demo/src/main/java/com/sf/aop/advisor/MyPointCutAdvisor.java → spring-demo/src/main/java/com/sf/aop/advice/advisor/MyPointCutAdvisor.java

@@ -1,4 +1,4 @@
-package com.sf.aop.advisor;
+package com.sf.aop.advice.advisor;
 
 import org.aopalliance.aop.Advice;
 import org.springframework.aop.Pointcut;

+ 1 - 1
spring-demo/src/main/java/com/sf/aop/advisor/WcMethodMatcher.java → spring-demo/src/main/java/com/sf/aop/advice/advisor/WcMethodMatcher.java

@@ -1,4 +1,4 @@
-package com.sf.aop.advisor;
+package com.sf.aop.advice.advisor;
 
 import org.springframework.aop.MethodMatcher;
 

+ 1 - 1
spring-demo/src/main/java/com/sf/aspect/AopConfig.java → spring-demo/src/main/java/com/sf/aop/aspect/AopConfig.java

@@ -1,4 +1,4 @@
-package com.sf.aspect;
+package com.sf.aop.aspect;
 
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;

+ 1 - 1
spring-demo/src/main/java/com/sf/aspect/Audience.java → spring-demo/src/main/java/com/sf/aop/aspect/Audience.java

@@ -1,4 +1,4 @@
-package com.sf.aspect;
+package com.sf.aop.aspect;
 
 // 观众的切面类
 public class Audience {

+ 2 - 2
spring-demo/src/main/java/com/sf/aspect/AudienceAnno.java → spring-demo/src/main/java/com/sf/aop/aspect/AudienceAnno.java

@@ -1,4 +1,4 @@
-package com.sf.aspect;
+package com.sf.aop.aspect;
 
 import org.aspectj.lang.annotation.AfterReturning;
 import org.aspectj.lang.annotation.Aspect;
@@ -12,7 +12,7 @@ import org.springframework.stereotype.Component;
 @Aspect
 public class AudienceAnno {
 
-    @Pointcut("execution(* com.sf.aspect.Performance.perform())")
+    @Pointcut("execution(* com.sf.aop.aspect.Performance.perform())")
     public void perform(){
     }
 

+ 1 - 1
spring-demo/src/main/java/com/sf/aspect/CrossTalk.java → spring-demo/src/main/java/com/sf/aop/aspect/CrossTalk.java

@@ -1,4 +1,4 @@
-package com.sf.aspect;
+package com.sf.aop.aspect;
 
 import org.springframework.stereotype.Component;
 

+ 1 - 1
spring-demo/src/main/java/com/sf/aspect/Performance.java → spring-demo/src/main/java/com/sf/aop/aspect/Performance.java

@@ -1,4 +1,4 @@
-package com.sf.aspect;
+package com.sf.aop.aspect;
 
 // 构建一个表演的场景
 public interface Performance {

+ 44 - 0
spring-demo/src/main/java/com/sf/aop/jdbc/DruidConfig.java

@@ -0,0 +1,44 @@
+package com.sf.aop.jdbc;
+
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.jdbc.core.JdbcTemplate;
+
+import javax.sql.DataSource;
+
+//  @PropertySource注解可以加载配置文件
+@PropertySource("db.properties")
+public class DruidConfig {
+
+    @Value("${jdbc.url}")
+    private String url;
+
+    @Value("${jdbc.username}")
+    private String username;
+
+    @Value("${jdbc.password}")
+    private String password;
+
+    @Value("${jdbc.driverName}")
+    private String driverClassName;
+
+    @Bean
+    public DataSource dataSource() {
+        DruidDataSource ds = new DruidDataSource();
+        ds.setUrl(url);
+        ds.setUsername(username);
+        ds.setPassword(password);
+        ds.setDriverClassName(driverClassName);
+        return ds;
+    }
+
+    // spring提供了一个通用的jdbc模版 JdbcTemplate
+    // 只需要把dataSource注入进来
+    @Bean
+    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
+        return new JdbcTemplate(dataSource);
+    }
+}

+ 30 - 0
spring-demo/src/main/java/com/sf/aop/jdbc/SpringJdbcConfig.java

@@ -0,0 +1,30 @@
+package com.sf.aop.jdbc;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+import javax.sql.DataSource;
+
+// @EnableTransactionManagement 开启事务管理器
+// Import导入另一个配置文件的内容
+@ComponentScan
+@Configuration
+@Import(DruidConfig.class)
+@EnableTransactionManagement
+public class SpringJdbcConfig {
+
+    // 使用bean注解注入datasource
+    // <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
+    //        <property name="dataSource" ref="datasource"></property>
+    //  </bean>
+    @Bean
+    public PlatformTransactionManager transactionManager(@Autowired DataSource dataSource) {
+        return new DataSourceTransactionManager(dataSource);
+    }
+}

+ 12 - 0
spring-demo/src/main/java/com/sf/aop/jdbc/dao/AuthorDao.java

@@ -0,0 +1,12 @@
+package com.sf.aop.jdbc.dao;
+
+import com.sf.aop.jdbc.entity.Author;
+
+import java.util.List;
+
+public interface AuthorDao {
+
+    List<Author> findAll();
+
+    int insert(Author author);
+}

+ 11 - 0
spring-demo/src/main/java/com/sf/aop/jdbc/dao/BookDao.java

@@ -0,0 +1,11 @@
+package com.sf.aop.jdbc.dao;
+
+import com.sf.aop.jdbc.entity.Book;
+
+import java.util.List;
+
+public interface BookDao {
+    List<Book> findAll();
+
+    int insert(Book book);
+}

+ 37 - 0
spring-demo/src/main/java/com/sf/aop/jdbc/dao/impl/AuthorDaoImpl.java

@@ -0,0 +1,37 @@
+package com.sf.aop.jdbc.dao.impl;
+
+import com.sf.aop.jdbc.dao.AuthorDao;
+import com.sf.aop.jdbc.entity.Author;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.support.JdbcDaoSupport;
+import org.springframework.stereotype.Repository;
+
+import javax.sql.DataSource;
+import java.util.List;
+
+@Repository
+public class AuthorDaoImpl extends JdbcDaoSupport implements AuthorDao {
+
+    // 使用impl实现类继承JdbcDaoSupport
+    // 可以给父类注入 dataSource
+    @Autowired
+    public void setDataSourceSelf(DataSource dataSource) {
+        setDataSource(dataSource);
+    }
+
+    @Override
+    public List<Author> findAll() {
+        List<Author> authorList = this.getJdbcTemplate().query(
+                "select * from author", new BeanPropertyRowMapper<Author>(Author.class));
+        return authorList;
+    }
+
+    @Override
+    public int insert(Author author) {
+        String sql = "insert into author (author_id,author_name,author_desc) values (?,?,?)";
+        Object[] args = {author.getAuthorId(), author.getAuthorName(), author.getAuthorDesc()};
+        int update = this.getJdbcTemplate().update(sql, args);
+        return update;
+    }
+}

+ 13 - 3
spring-demo/src/main/java/com/sf/jdbc/dao/impl/BookDaoImpl.java → spring-demo/src/main/java/com/sf/aop/jdbc/dao/impl/BookDaoImpl.java

@@ -1,7 +1,7 @@
-package com.sf.jdbc.dao.impl;
+package com.sf.aop.jdbc.dao.impl;
 
-import com.sf.jdbc.dao.BookDao;
-import com.sf.jdbc.entity.Book;
+import com.sf.aop.jdbc.entity.Book;
+import com.sf.aop.jdbc.dao.BookDao;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
@@ -25,4 +25,14 @@ public class BookDaoImpl implements BookDao {
         List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
         return bookList;
     }
+
+    @Override
+    public int insert(Book book) {
+        String sql = "insert into book(book_id,book_name,type_id,author_id,author_name,book_img,book_desc) " +
+                "values(?,?,?,?,?,?,?)";
+        Object[] args = {book.getBookId(),book.getBookName(),book.getTypeId(),book.getAuthorId(),
+                         book.getAuthorName(),book.getBookImg(),book.getBookDesc()};
+        int update = jdbcTemplate.update(sql, args);
+        return update;
+    }
 }

+ 24 - 0
spring-demo/src/main/java/com/sf/aop/jdbc/entity/Author.java

@@ -0,0 +1,24 @@
+package com.sf.aop.jdbc.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+// @NoArgsConstructor  无参构造器
+// @AllArgsConstructor 全参构造器
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class Author implements Serializable {
+
+    private static final long serialVersionUID = -4167661639961478267L;
+
+    private Long id;
+    private String authorId;
+    private String authorName;
+    private String authorDesc;
+}

+ 34 - 0
spring-demo/src/main/java/com/sf/aop/jdbc/entity/Book.java

@@ -0,0 +1,34 @@
+package com.sf.aop.jdbc.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class Book implements Serializable {
+
+    private static final long serialVersionUID = 5047814726963775513L;
+
+    private Long id;
+
+    private String bookId;
+
+    private String bookName;
+
+    private String typeId;
+
+    private String authorId;
+
+    private String authorName;
+
+    private String bookImg;
+
+    private String bookDesc;
+
+}

+ 8 - 0
spring-demo/src/main/java/com/sf/aop/jdbc/service/BookService.java

@@ -0,0 +1,8 @@
+package com.sf.aop.jdbc.service;
+
+import com.sf.aop.jdbc.entity.Author;
+import com.sf.aop.jdbc.entity.Book;
+
+public interface BookService {
+    void insert(Book book, Author author);
+}

+ 36 - 0
spring-demo/src/main/java/com/sf/aop/jdbc/service/impl/BookServiceImpl.java

@@ -0,0 +1,36 @@
+package com.sf.aop.jdbc.service.impl;
+
+import com.sf.aop.jdbc.dao.AuthorDao;
+import com.sf.aop.jdbc.entity.Author;
+import com.sf.aop.jdbc.entity.Book;
+import com.sf.aop.jdbc.service.BookService;
+import com.sf.aop.jdbc.dao.BookDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+// 创建一个类  要先想一下 是否需要注解
+// 如果要放入spring容器中  @Component 组件
+// 如果要放入spring容器中  确定了具体的功能  @Repository
+// 如果要放入spring容器中  确定了具体的功能  @Service
+@Service
+public class BookServiceImpl implements BookService {
+
+    // 放入spring容器后  就可以通过自动注入  拿到其他的bean对象
+    @Autowired
+    private BookDao bookDao;
+
+    @Autowired
+    private AuthorDao authorDao;
+
+    // @Transactional 声明这个方法是需要使用事务的
+    @Override
+    @Transactional
+    public void insert(Book book, Author author) {
+        // 希望按照事务处理  也就是出现异常后回滚
+        bookDao.insert(book);
+        // 构造异常
+//        System.out.println(1 / 0);
+        authorDao.insert(author);
+    }
+}

+ 1 - 1
spring-demo/src/main/java/com/sf/proxy/Client.java → spring-demo/src/main/java/com/sf/aop/proxy/Client.java

@@ -1,4 +1,4 @@
-package com.sf.proxy;
+package com.sf.aop.proxy;
 
 // 发布代练需求的人
 public class Client {

+ 1 - 1
spring-demo/src/main/java/com/sf/proxy/GamePlayer.java → spring-demo/src/main/java/com/sf/aop/proxy/GamePlayer.java

@@ -1,4 +1,4 @@
-package com.sf.proxy;
+package com.sf.aop.proxy;
 
 // 代练高手
 public class GamePlayer implements IGamePlayer {

+ 1 - 1
spring-demo/src/main/java/com/sf/proxy/GamePlayerProxy.java → spring-demo/src/main/java/com/sf/aop/proxy/GamePlayerProxy.java

@@ -1,4 +1,4 @@
-package com.sf.proxy;
+package com.sf.aop.proxy;
 
 // 实现这个需求的 代练公司/工作室/店铺
 // 游戏玩家的代理方

+ 1 - 1
spring-demo/src/main/java/com/sf/proxy/IGamePlayer.java → spring-demo/src/main/java/com/sf/aop/proxy/IGamePlayer.java

@@ -1,4 +1,4 @@
-package com.sf.proxy;
+package com.sf.aop.proxy;
 
 // 有一个代练的需求
 // 要找一个会玩儿游戏的人

+ 2 - 2
spring-demo/src/main/java/com/sf/proxy/cglib/CglibClient.java → spring-demo/src/main/java/com/sf/aop/proxy/cglib/CglibClient.java

@@ -1,6 +1,6 @@
-package com.sf.proxy.cglib;
+package com.sf.aop.proxy.cglib;
 
-import com.sf.proxy.GamePlayer;
+import com.sf.aop.proxy.GamePlayer;
 import net.sf.cglib.proxy.Enhancer;
 
 public class CglibClient {

+ 1 - 1
spring-demo/src/main/java/com/sf/proxy/cglib/CglibDemo.java → spring-demo/src/main/java/com/sf/aop/proxy/cglib/CglibDemo.java

@@ -1,4 +1,4 @@
-package com.sf.proxy.cglib;
+package com.sf.aop.proxy.cglib;
 
 import net.sf.cglib.proxy.Enhancer;
 import net.sf.cglib.proxy.MethodInterceptor;

+ 1 - 1
spring-demo/src/main/java/com/sf/proxy/cglib/MyMethodInterceptor.java → spring-demo/src/main/java/com/sf/aop/proxy/cglib/MyMethodInterceptor.java

@@ -1,4 +1,4 @@
-package com.sf.proxy.cglib;
+package com.sf.aop.proxy.cglib;
 
 import net.sf.cglib.proxy.MethodInterceptor;
 import net.sf.cglib.proxy.MethodProxy;

+ 3 - 3
spring-demo/src/main/java/com/sf/proxy/jdk/JdkClient.java → spring-demo/src/main/java/com/sf/aop/proxy/jdk/JdkClient.java

@@ -1,7 +1,7 @@
-package com.sf.proxy.jdk;
+package com.sf.aop.proxy.jdk;
 
-import com.sf.proxy.GamePlayer;
-import com.sf.proxy.IGamePlayer;
+import com.sf.aop.proxy.GamePlayer;
+import com.sf.aop.proxy.IGamePlayer;
 
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Proxy;

+ 1 - 1
spring-demo/src/main/java/com/sf/proxy/jdk/JdkDemo.java → spring-demo/src/main/java/com/sf/aop/proxy/jdk/JdkDemo.java

@@ -1,4 +1,4 @@
-package com.sf.proxy.jdk;
+package com.sf.aop.proxy.jdk;
 
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;

+ 1 - 1
spring-demo/src/main/java/com/sf/proxy/jdk/MyInvocationHandler.java → spring-demo/src/main/java/com/sf/aop/proxy/jdk/MyInvocationHandler.java

@@ -1,4 +1,4 @@
-package com.sf.proxy.jdk;
+package com.sf.aop.proxy.jdk;
 
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;

+ 1 - 1
spring-demo/src/main/java/com/sf/proxy/jdk/self/$Proxy0.java → spring-demo/src/main/java/com/sf/aop/proxy/jdk/self/$Proxy0.java

@@ -1,4 +1,4 @@
-package com.sf.proxy.jdk.self;
+package com.sf.aop.proxy.jdk.self;
 
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;

+ 1 - 1
spring-demo/src/main/java/com/sf/proxy/jdk/self/Life.java → spring-demo/src/main/java/com/sf/aop/proxy/jdk/self/Life.java

@@ -1,4 +1,4 @@
-package com.sf.proxy.jdk.self;
+package com.sf.aop.proxy.jdk.self;
 
 public interface Life {
     void learn();

+ 1 - 1
spring-demo/src/main/java/com/sf/proxy/jdk/self/MyLife.java → spring-demo/src/main/java/com/sf/aop/proxy/jdk/self/MyLife.java

@@ -1,4 +1,4 @@
-package com.sf.proxy.jdk.self;
+package com.sf.aop.proxy.jdk.self;
 
 public class MyLife implements Life {
     @Override

+ 2 - 2
spring-demo/src/main/java/com/sf/SpringConfig.java → spring-demo/src/main/java/com/sf/ioc/SpringConfig.java

@@ -1,4 +1,4 @@
-package com.sf;
+package com.sf.ioc;
 
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
@@ -10,6 +10,6 @@ import org.springframework.context.annotation.Configuration;
  *     </context:component-scan>
  */
 @Configuration
-@ComponentScan("com.sf.anno")
+@ComponentScan("com.sf.ioc.anno")
 public class SpringConfig {
 }

+ 1 - 1
spring-demo/src/main/java/com/sf/anno/Box.java → spring-demo/src/main/java/com/sf/ioc/anno/Box.java

@@ -1,4 +1,4 @@
-package com.sf.anno;
+package com.sf.ioc.anno;
 
 import org.springframework.stereotype.Component;
 

+ 1 - 1
spring-demo/src/main/java/com/sf/anno/Chair.java → spring-demo/src/main/java/com/sf/ioc/anno/Chair.java

@@ -1,4 +1,4 @@
-package com.sf.anno;
+package com.sf.ioc.anno;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;

+ 1 - 1
spring-demo/src/main/java/com/sf/anno/Desk.java → spring-demo/src/main/java/com/sf/ioc/anno/Desk.java

@@ -1,4 +1,4 @@
-package com.sf.anno;
+package com.sf.ioc.anno;
 
 import org.springframework.stereotype.Component;
 

+ 1 - 2
spring-demo/src/main/java/com/sf/anno/House.java → spring-demo/src/main/java/com/sf/ioc/anno/House.java

@@ -1,8 +1,7 @@
-package com.sf.anno;
+package com.sf.ioc.anno;
 
 import jakarta.annotation.Resource;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
 /**

+ 1 - 1
spring-demo/src/main/java/com/sf/anno/Plane.java → spring-demo/src/main/java/com/sf/ioc/anno/Plane.java

@@ -1,4 +1,4 @@
-package com.sf.anno;
+package com.sf.ioc.anno;
 
 // 平面
 public interface Plane {

+ 1 - 1
spring-demo/src/main/java/com/sf/anno/Teacher.java → spring-demo/src/main/java/com/sf/ioc/anno/Teacher.java

@@ -1,4 +1,4 @@
-package com.sf.anno;
+package com.sf.ioc.anno;
 
 import org.springframework.stereotype.Component;
 

+ 1 - 1
spring-demo/src/main/java/com/sf/auto/Chair.java → spring-demo/src/main/java/com/sf/ioc/auto/Chair.java

@@ -1,4 +1,4 @@
-package com.sf.auto;
+package com.sf.ioc.auto;
 
 /**
  * 椅子

+ 1 - 1
spring-demo/src/main/java/com/sf/auto/House.java → spring-demo/src/main/java/com/sf/ioc/auto/House.java

@@ -1,4 +1,4 @@
-package com.sf.auto;
+package com.sf.ioc.auto;
 
 /**
  * 教室

+ 1 - 1
spring-demo/src/main/java/com/sf/auto/Teacher.java → spring-demo/src/main/java/com/sf/ioc/auto/Teacher.java

@@ -1,4 +1,4 @@
-package com.sf.auto;
+package com.sf.ioc.auto;
 
 /**
  * 老师

+ 1 - 1
spring-demo/src/main/java/com/sf/car/Car.java → spring-demo/src/main/java/com/sf/ioc/car/Car.java

@@ -1,4 +1,4 @@
-package com.sf.car;
+package com.sf.ioc.car;
 
 public class Car {
 

+ 1 - 1
spring-demo/src/main/java/com/sf/car/CarInstanceFactory.java → spring-demo/src/main/java/com/sf/ioc/car/CarInstanceFactory.java

@@ -1,4 +1,4 @@
-package com.sf.car;
+package com.sf.ioc.car;
 
 import java.util.HashMap;
 import java.util.Map;

+ 1 - 1
spring-demo/src/main/java/com/sf/car/CarStaticFactory.java → spring-demo/src/main/java/com/sf/ioc/car/CarStaticFactory.java

@@ -1,4 +1,4 @@
-package com.sf.car;
+package com.sf.ioc.car;
 
 import java.util.HashMap;
 import java.util.Map;

+ 1 - 3
spring-demo/src/main/java/com/sf/factory/Computer.java → spring-demo/src/main/java/com/sf/ioc/factory/Computer.java

@@ -1,6 +1,4 @@
-package com.sf.factory;
-
-import com.sf.factory.printer.Printer;
+package com.sf.ioc.factory;
 
 /**
  * 计算机

+ 1 - 1
spring-demo/src/main/java/com/sf/factory/Output.java → spring-demo/src/main/java/com/sf/ioc/factory/Output.java

@@ -1,4 +1,4 @@
-package com.sf.factory;
+package com.sf.ioc.factory;
 
 /**
  * 模拟计算机连接打印机的使用方式

+ 2 - 3
spring-demo/src/main/java/com/sf/factory/OutputFactory.java → spring-demo/src/main/java/com/sf/ioc/factory/OutputFactory.java

@@ -1,7 +1,6 @@
-package com.sf.factory;
+package com.sf.ioc.factory;
 
-import com.sf.factory.printer.BetterPrinter;
-import com.sf.factory.printer.Printer;
+import com.sf.ioc.factory.printer.BetterPrinter;
 
 /**
  * 工厂类

+ 2 - 2
spring-demo/src/main/java/com/sf/factory/printer/BetterPrinter.java → spring-demo/src/main/java/com/sf/ioc/factory/printer/BetterPrinter.java

@@ -1,6 +1,6 @@
-package com.sf.factory.printer;
+package com.sf.ioc.factory.printer;
 
-import com.sf.factory.Output;
+import com.sf.ioc.factory.Output;
 
 /**
  * 打印机升级了

+ 2 - 2
spring-demo/src/main/java/com/sf/factory/printer/Printer.java → spring-demo/src/main/java/com/sf/ioc/factory/printer/Printer.java

@@ -1,6 +1,6 @@
-package com.sf.factory.printer;
+package com.sf.ioc.factory.printer;
 
-import com.sf.factory.Output;
+import com.sf.ioc.factory.Output;
 
 /**
  * 打印机

+ 1 - 1
spring-demo/src/main/java/com/sf/factory/shape/Shape.java → spring-demo/src/main/java/com/sf/ioc/factory/shape/Shape.java

@@ -1,4 +1,4 @@
-package com.sf.factory.shape;
+package com.sf.ioc.factory.shape;
 
 /**
  * 抽象类

+ 1 - 1
spring-demo/src/main/java/com/sf/factory/shape/Triangle.java → spring-demo/src/main/java/com/sf/ioc/factory/shape/Triangle.java

@@ -1,4 +1,4 @@
-package com.sf.factory.shape;
+package com.sf.ioc.factory.shape;
 
 public class Triangle extends Shape{
 

+ 1 - 1
spring-demo/src/main/java/com/sf/helloworld/Auth.java → spring-demo/src/main/java/com/sf/ioc/helloworld/Auth.java

@@ -1,4 +1,4 @@
-package com.sf.helloworld;
+package com.sf.ioc.helloworld;
 
 /**
  * 权限类

+ 1 - 1
spring-demo/src/main/java/com/sf/helloworld/Role.java → spring-demo/src/main/java/com/sf/ioc/helloworld/Role.java

@@ -1,4 +1,4 @@
-package com.sf.helloworld;
+package com.sf.ioc.helloworld;
 
 import java.util.Arrays;
 import java.util.List;

+ 1 - 1
spring-demo/src/main/java/com/sf/helloworld/User.java → spring-demo/src/main/java/com/sf/ioc/helloworld/User.java

@@ -1,4 +1,4 @@
-package com.sf.helloworld;
+package com.sf.ioc.helloworld;
 
 public class User {
     // User user = new User();

+ 1 - 1
spring-demo/src/main/java/com/sf/lifecycle/MyBeanPost.java → spring-demo/src/main/java/com/sf/ioc/lifecycle/MyBeanPost.java

@@ -1,4 +1,4 @@
-package com.sf.lifecycle;
+package com.sf.ioc.lifecycle;
 
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.config.BeanPostProcessor;

+ 0 - 12
spring-demo/src/main/java/com/sf/jdbc/SpringJdbcConfig.java

@@ -1,12 +0,0 @@
-package com.sf.jdbc;
-
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-// Import导入另一个配置文件的内容
-@ComponentScan
-@Configuration
-@Import(DruidConfig.class)
-public class SpringJdbcConfig {
-}

+ 1 - 1
spring-demo/src/main/java/com/sf/jdbc/DruidConfig.java → spring-demo/src/main/java/com/sf/mybatis/DruidConfig.java

@@ -1,4 +1,4 @@
-package com.sf.jdbc;
+package com.sf.mybatis;
 
 
 import com.alibaba.druid.pool.DruidDataSource;

+ 44 - 0
spring-demo/src/main/java/com/sf/mybatis/MybatisConfig.java

@@ -0,0 +1,44 @@
+package com.sf.mybatis;
+
+
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.core.io.Resource;
+
+import javax.sql.DataSource;
+
+// 使用@MapperScan代替扫描dao
+@Configuration
+@ComponentScan("com.sf.mybatis.service")
+@MapperScan("com.sf.mybatis.dao")
+@Import(DruidConfig.class)
+public class MybatisConfig {
+
+    // Resource这里是一个资源类 不是注解 来自import org.springframework.core.io.Resource;
+    // @Value可以获取指定路径的资源
+    @Value("classpath:mybatis-config.xml")
+    private Resource mybatisConfig;
+
+    @Value("classpath:mapper/BookMapper.xml")
+    private Resource mapperConfig;
+
+    //  <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
+    //        <property name="dataSource" ref="datasource"></property>
+    //        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
+    //    </bean>
+    @Bean
+    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
+        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
+        sqlSessionFactoryBean.setDataSource(dataSource);
+        sqlSessionFactoryBean.setConfigLocation(mybatisConfig);
+        sqlSessionFactoryBean.setMapperLocations(mapperConfig);
+        return sqlSessionFactoryBean;
+    }
+}

+ 2 - 2
spring-demo/src/main/java/com/sf/jdbc/dao/BookDao.java → spring-demo/src/main/java/com/sf/mybatis/dao/BookDao.java

@@ -1,6 +1,6 @@
-package com.sf.jdbc.dao;
+package com.sf.mybatis.dao;
 
-import com.sf.jdbc.entity.Book;
+import com.sf.mybatis.entity.Book;
 
 import java.util.List;
 

+ 7 - 1
spring-demo/src/main/java/com/sf/jdbc/entity/Book.java → spring-demo/src/main/java/com/sf/mybatis/entity/Book.java

@@ -1,10 +1,16 @@
-package com.sf.jdbc.entity;
+package com.sf.mybatis.entity;
 
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.io.Serializable;
 
 @Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
 public class Book implements Serializable {
 
     private static final long serialVersionUID = 5047814726963775513L;

+ 10 - 0
spring-demo/src/main/java/com/sf/mybatis/service/BookService.java

@@ -0,0 +1,10 @@
+package com.sf.mybatis.service;
+
+import com.sf.mybatis.entity.Book;
+
+import java.util.List;
+
+public interface BookService {
+
+    List<Book> findAll();
+}

+ 21 - 0
spring-demo/src/main/java/com/sf/mybatis/service/impl/BookServiceImpl.java

@@ -0,0 +1,21 @@
+package com.sf.mybatis.service.impl;
+
+import com.sf.mybatis.dao.BookDao;
+import com.sf.mybatis.entity.Book;
+import com.sf.mybatis.service.BookService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class BookServiceImpl implements BookService {
+
+    @Autowired
+    private BookDao bookDao;
+
+    @Override
+    public List<Book> findAll() {
+        return bookDao.findAll();
+    }
+}

+ 2 - 2
spring-demo/src/main/java/com/sf/self/Test.java

@@ -1,7 +1,7 @@
 package com.sf.self;
 
-import com.sf.helloworld.Role;
-import com.sf.helloworld.User;
+import com.sf.ioc.helloworld.Role;
+import com.sf.ioc.helloworld.User;
 
 import java.util.ArrayList;
 import java.util.List;

+ 10 - 10
spring-demo/src/main/resources/spring-advisor.xml → spring-demo/src/main/resources/aop/spring-advisor.xml

@@ -5,35 +5,35 @@
         https://www.springframework.org/schema/beans/spring-beans.xsd">
 
     <!-- 注册被监控的实现类 -->
-    <bean id="person" class="com.sf.aop.Person"></bean>
+    <bean id="person" class="com.sf.aop.advice.Person"></bean>
 
     <!-- 注册通知实现类 -->
-    <bean id="beforeAdvice" class="com.sf.aop.MyBeforeAdvice"></bean>
-    <bean id="afterAdvice" class="com.sf.aop.MyAfterAdvice"></bean>
+    <bean id="beforeAdvice" class="com.sf.aop.advice.MyBeforeAdvice"></bean>
+    <bean id="afterAdvice" class="com.sf.aop.advice.MyAfterAdvice"></bean>
 
     <!-- 声明类和方法的匹配 -->
-    <bean id="classFilter" class="com.sf.aop.advisor.MyClassFilter"/>
-    <bean id="eatMethodMatcher" class="com.sf.aop.advisor.EatMethodMatcher"/>
-    <bean id="wcMethodMatcher" class="com.sf.aop.advisor.WcMethodMatcher"/>
+    <bean id="classFilter" class="com.sf.aop.advice.advisor.MyClassFilter"/>
+    <bean id="eatMethodMatcher" class="com.sf.aop.advice.advisor.EatMethodMatcher"/>
+    <bean id="wcMethodMatcher" class="com.sf.aop.advice.advisor.WcMethodMatcher"/>
 
     <!-- 此时关注的是 Person类的eat方法 -->
-    <bean id="eatPointCut" class="com.sf.aop.advisor.MyPointCut">
+    <bean id="eatPointCut" class="com.sf.aop.advice.advisor.MyPointCut">
         <property name="classFilter" ref="classFilter"></property>
         <property name="methodMatcher" ref="eatMethodMatcher"></property>
     </bean>
 
     <!-- 此时关注的是 Person类的wc方法 -->
-    <bean id="wcPointCut" class="com.sf.aop.advisor.MyPointCut">
+    <bean id="wcPointCut" class="com.sf.aop.advice.advisor.MyPointCut">
         <property name="classFilter" ref="classFilter"></property>
         <property name="methodMatcher" ref="wcMethodMatcher"></property>
     </bean>
 
-    <bean id="eatAdvisor" class="com.sf.aop.advisor.MyPointCutAdvisor">
+    <bean id="eatAdvisor" class="com.sf.aop.advice.advisor.MyPointCutAdvisor">
         <property name="advice" ref="beforeAdvice"></property>
         <property name="pointcut" ref="eatPointCut"></property>
     </bean>
 
-    <bean id="wcAdvisor" class="com.sf.aop.advisor.MyPointCutAdvisor">
+    <bean id="wcAdvisor" class="com.sf.aop.advice.advisor.MyPointCutAdvisor">
         <property name="advice" ref="afterAdvice"></property>
         <property name="pointcut" ref="wcPointCut"></property>
     </bean>

+ 2 - 2
spring-demo/src/main/resources/spring-aop.xml → spring-demo/src/main/resources/aop/spring-aop.xml

@@ -5,10 +5,10 @@
         https://www.springframework.org/schema/beans/spring-beans.xsd">
 
     <!-- 注册被监控的实现类 -->
-    <bean id="person" class="com.sf.aop.Person"></bean>
+    <bean id="person" class="com.sf.aop.advice.Person"></bean>
 
     <!-- 注册通知实现类 -->
-    <bean id="before" class="com.sf.aop.MyBeforeAdvice"></bean>
+    <bean id="before" class="com.sf.aop.advice.MyBeforeAdvice"></bean>
 
     <!-- 注册代理监控对象生产工厂 -->
     <bean id="personProxy" class="org.springframework.aop.framework.ProxyFactoryBean">

+ 4 - 4
spring-demo/src/main/resources/spring-aspect.xml → spring-demo/src/main/resources/aop/spring-aspect.xml

@@ -8,21 +8,21 @@
         https://www.springframework.org/schema/aop/spring-aop.xsd">
 
     <!-- 核心逻辑  被代理的对象 -->
-    <bean id="crossTalk" class="com.sf.aspect.CrossTalk"></bean>
+    <bean id="crossTalk" class="com.sf.aop.aspect.CrossTalk"></bean>
     <!-- 非核心逻辑  核心逻辑前后要做的事儿 -->
-    <bean id="audience" class="com.sf.aspect.Audience"></bean>
+    <bean id="audience" class="com.sf.aop.aspect.Audience"></bean>
 
     <aop:config>
         <aop:aspect ref="audience">
             <!-- 连接点  要关注的具体方法是谁  可以用表达式来表示 -->
             <!-- 表达式的组成 execution(* com.sf.aspect.Performance.perform()) -->
             <!-- 表达式的组成 执行(返回任意类型 包名.类名.方法名(参数)) -->
-            <aop:pointcut id="pointcut" expression="execution(* com.sf.aspect.Performance.perform())"/>
+            <aop:pointcut id="pointcut" expression="execution(* com.sf.aop.aspect.Performance.perform())"/>
             <!-- pointcut 和 advice 组成 advisor的逻辑 简写如下 -->
             <aop:before method="takeSeats" pointcut-ref="pointcut"></aop:before>
         </aop:aspect>
         <aop:aspect ref="audience">
-            <aop:pointcut id="pointcut1" expression="execution(* com.sf.aspect.Performance.respond())"/>
+            <aop:pointcut id="pointcut1" expression="execution(* com.sf.aop.aspect.Performance.respond())"/>
             <aop:after-returning method="applause" pointcut-ref="pointcut1"></aop:after-returning>
         </aop:aspect>
     </aop:config>

+ 0 - 0
spring-demo/src/main/resources/spring-mysql.xml → spring-demo/src/main/resources/aop/spring-mysql.xml


+ 36 - 0
spring-demo/src/main/resources/aop/spring-tx-anno.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xmlns:tx="http://www.springframework.org/schema/tx"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
+        https://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/context
+        https://www.springframework.org/schema/context/spring-context.xsd
+        http://www.springframework.org/schema/tx
+        http://www.springframework.org/schema/tx/spring-tx.xsd">
+
+    <!-- 加载properties文件 -->
+    <context:property-placeholder location="classpath:db.properties"/>
+
+    <bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource">
+        <property name="url" value="${jdbc.url}"></property>
+        <property name="username" value="${jdbc.username}"></property>
+        <property name="password" value="${jdbc.password}"></property>
+        <property name="driverClassName" value="${jdbc.driverName}"></property>
+    </bean>
+
+    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
+        <constructor-arg name="dataSource" ref="datasource"></constructor-arg>
+    </bean>
+
+    <context:component-scan base-package="com.sf.jdbc"></context:component-scan>
+
+    <!-- 配置spring提供的 事务管理器 -->
+    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
+        <property name="dataSource" ref="datasource"></property>
+    </bean>
+
+    <!-- 开启事务的注解配置 -->
+    <tx:annotation-driven transaction-manager="transactionManager" mode="proxy"></tx:annotation-driven>
+</beans>

+ 50 - 0
spring-demo/src/main/resources/aop/spring-tx.xml

@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xmlns:tx="http://www.springframework.org/schema/tx"
+       xmlns:aop="http://www.springframework.org/schema/aop"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
+        https://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/context
+        https://www.springframework.org/schema/context/spring-context.xsd
+        http://www.springframework.org/schema/tx
+        http://www.springframework.org/schema/tx/spring-tx.xsd
+        http://www.springframework.org/schema/aop
+        https://www.springframework.org/schema/aop/spring-aop.xsd">
+
+    <!-- 加载properties文件 -->
+    <context:property-placeholder location="classpath:db.properties"/>
+
+    <bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource">
+        <property name="url" value="${jdbc.url}"></property>
+        <property name="username" value="${jdbc.username}"></property>
+        <property name="password" value="${jdbc.password}"></property>
+        <property name="driverClassName" value="${jdbc.driverName}"></property>
+    </bean>
+
+    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
+        <constructor-arg name="dataSource" ref="datasource"></constructor-arg>
+    </bean>
+
+    <context:component-scan base-package="com.sf.jdbc"></context:component-scan>
+
+    <!-- 配置spring提供的 事务管理器 -->
+    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
+        <property name="dataSource" ref="datasource"></property>
+    </bean>
+
+    <!-- 使用通知类配置事务 -->
+    <tx:advice id="txAdvice" transaction-manager="transactionManager">
+        <tx:attributes>
+            <!-- propagation 用来配置事务传播行为  增删改 默认使用REQUIRED -->
+            <tx:method name="insert*" propagation="REQUIRED" isolation="DEFAULT"/>
+        </tx:attributes>
+    </tx:advice>
+
+    <!-- 配置表达式-->
+    <aop:config>
+        <!-- 配置一个通用的表达式  可以识别所有路径下的 所有以ServiceImpl结尾的类 所有的方法-->
+        <aop:advisor advice-ref="txAdvice" pointcut="execution(* *..*.*ServiceImpl.*(..))"/>
+    </aop:config>
+</beans>

+ 1 - 1
spring-demo/src/main/resources/db.properties

@@ -1,4 +1,4 @@
-jdbc.url=jdbc:mysql://localhost:3306/books?useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai
+jdbc.url=jdbc:mysql://localhost:3306/novels?useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai
 jdbc.driverName=com.mysql.cj.jdbc.Driver
 # ??????username ???????????
 #username=root

+ 0 - 0
spring-demo/src/main/resources/spring-annotation.xml → spring-demo/src/main/resources/ioc/spring-annotation.xml


+ 4 - 4
spring-demo/src/main/resources/spring-auto.xml → spring-demo/src/main/resources/ioc/spring-auto.xml

@@ -4,13 +4,13 @@
        xsi:schemaLocation="http://www.springframework.org/schema/beans
         https://www.springframework.org/schema/beans/spring-beans.xsd">
 
-    <bean id="house" class="com.sf.auto.House" autowire="byType"></bean>
-    <bean id="chair" class="com.sf.auto.Chair" autowire="byName"></bean>
-    <bean id="teacher" class="com.sf.auto.Teacher">
+    <bean id="house" class="com.sf.ioc.auto.House" autowire="byType"></bean>
+    <bean id="chair" class="com.sf.ioc.auto.Chair" autowire="byName"></bean>
+    <bean id="teacher" class="com.sf.ioc.auto.Teacher">
         <property name="name" value="jichao"/>
     </bean>
 
-    <bean id="teacher1" class="com.sf.auto.Teacher">
+    <bean id="teacher1" class="com.sf.ioc.auto.Teacher">
         <property name="name" value="zhangsan"/>
     </bean>
 </beans>

+ 8 - 8
spring-demo/src/main/resources/spring-beans-new.xml → spring-demo/src/main/resources/ioc/spring-beans-new.xml

@@ -7,33 +7,33 @@
         http://www.springframework.org/schema/util
         https://www.springframework.org/schema/util/spring-util.xsd">
 
-    <bean id="user" class="com.sf.helloworld.User">
+    <bean id="user" class="com.sf.ioc.helloworld.User">
         <constructor-arg name="name" value="zhaoliu"></constructor-arg>
         <constructor-arg name="desc" value="普通用户"></constructor-arg>
         <!--        如果我们想多个对象复用一个对象 可以使用ref进行关联-->
         <constructor-arg name="role" ref="role"></constructor-arg>
     </bean>
 
-    <bean id="user1" class="com.sf.helloworld.User">
+    <bean id="user1" class="com.sf.ioc.helloworld.User">
         <constructor-arg name="name" value="zhangsan"></constructor-arg>
         <constructor-arg name="desc" value="普通用户"></constructor-arg>
         <!--        如果我们想多个对象复用一个对象 可以使用ref进行关联-->
         <constructor-arg name="role" ref="role"></constructor-arg>
     </bean>
 
-    <bean id="user2" class="com.sf.helloworld.User">
+    <bean id="user2" class="com.sf.ioc.helloworld.User">
         <property name="name" value="zhangsan"></property>
         <property name="desc" value="普通用户"></property>
         <!--        如果我们想多个对象复用一个对象 可以使用ref进行关联-->
         <property name="role" ref="role"></property>
     </bean>
 
-    <bean id="role" class="com.sf.helloworld.Role">
+    <bean id="role" class="com.sf.ioc.helloworld.Role">
         <constructor-arg name="name" value="guest"></constructor-arg>
     </bean>
 
     <!-- Role role1 = new Role();  role1.setDesc(String[]); -->
-    <bean id="role1" class="com.sf.helloworld.Role">
+    <bean id="role1" class="com.sf.ioc.helloworld.Role">
 <!--        <constructor-arg name="name" value="guest"></constructor-arg>-->
         <property name="name" value="guest"></property>
         <property name="desc">
@@ -45,7 +45,7 @@
         </property>
     </bean>
 
-    <bean id="role2" class="com.sf.helloworld.Role">
+    <bean id="role2" class="com.sf.ioc.helloworld.Role">
         <property name="name" value="guest"></property>
         <property name="userList">
             <list>
@@ -63,7 +63,7 @@
         </property>
     </bean>
 
-    <bean id="role3" class="com.sf.helloworld.Role">
+    <bean id="role3" class="com.sf.ioc.helloworld.Role">
         <property name="name" value="guest"></property>
         <property name="userList">
             <list>
@@ -74,7 +74,7 @@
     </bean>
 
 
-    <bean id="role4" class="com.sf.helloworld.Role">
+    <bean id="role4" class="com.sf.ioc.helloworld.Role">
         <property name="name" value="guest"></property>
         <property name="userList" ref="userListId"></property>
     </bean>

+ 7 - 7
spring-demo/src/main/resources/spring-beans.xml → spring-demo/src/main/resources/ioc/spring-beans.xml

@@ -6,21 +6,21 @@
 
     <!--    把名字 和 类路径配置进去-->
     <!-- User user = new User();   user.setName("zhangsan");   user.setDesc("普通用户");-->
-    <bean id="user" class="com.sf.helloworld.User">
+    <bean id="user" class="com.sf.ioc.helloworld.User">
         <!--        如果要给属性赋值 使用property-->
         <property name="name" value="zhangsan"/>
         <property name="desc" value="普通用户"/>
     </bean>
 
     <!--  new User("lisi","普通用户")-->
-    <bean id="user2" class="com.sf.helloworld.User">
+    <bean id="user2" class="com.sf.ioc.helloworld.User">
         <constructor-arg name="name" value="lisi"></constructor-arg>
         <constructor-arg name="desc" value="普通用户"></constructor-arg>
     </bean>
 
     <!-- String str = "\""; -->
     <!-- 如果在value中配置 小于号和大于号  -->
-    <bean id="user3" class="com.sf.helloworld.User">
+    <bean id="user3" class="com.sf.ioc.helloworld.User">
         <property name="name" value="&lt;&gt;"/>
         <property name="desc">
             <value><![CDATA[a<>b]]></value>
@@ -28,24 +28,24 @@
     </bean>
 
 
-    <bean id="user1" class="com.sf.helloworld.User">
+    <bean id="user1" class="com.sf.ioc.helloworld.User">
         <constructor-arg name="name" value="wangwu"></constructor-arg>
         <constructor-arg name="desc" value="普通用户"></constructor-arg>
         <constructor-arg name="role">
-            <bean class="com.sf.helloworld.Role">
+            <bean class="com.sf.ioc.helloworld.Role">
                 <constructor-arg name="name" value="admin"/>
             </bean>
         </constructor-arg>
     </bean>
 
-    <bean id="user4" class="com.sf.helloworld.User">
+    <bean id="user4" class="com.sf.ioc.helloworld.User">
         <constructor-arg name="name" value="zhaoliu"></constructor-arg>
         <constructor-arg name="desc" value="普通用户"></constructor-arg>
         <!--        如果我们想多个对象复用一个对象 可以使用ref进行关联-->
         <constructor-arg name="role" ref="role"></constructor-arg>
     </bean>
 
-    <bean id="role" class="com.sf.helloworld.Role">
+    <bean id="role" class="com.sf.ioc.helloworld.Role">
         <constructor-arg name="name" value="guest"></constructor-arg>
     </bean>
 

+ 5 - 5
spring-demo/src/main/resources/spring-factory.xml → spring-demo/src/main/resources/ioc/spring-factory.xml

@@ -8,26 +8,26 @@
     <!-- 我们在简单工厂模式中  通过配置工厂方法来获取具体的对象 -->
     <!-- 此时工厂方法需要的参数  是通过构造器的配置传进去 -->
     <!-- CarStaticFactory.getCar(3) -->
-    <bean id="bmwCar" class="com.sf.car.CarStaticFactory" factory-method="getCar">
+    <bean id="bmwCar" class="com.sf.ioc.car.CarStaticFactory" factory-method="getCar">
         <constructor-arg value="3"></constructor-arg>
     </bean>
 
-    <bean id="audiCar" class="com.sf.car.CarStaticFactory" factory-method="getCar">
+    <bean id="audiCar" class="com.sf.ioc.car.CarStaticFactory" factory-method="getCar">
         <constructor-arg value="2"></constructor-arg>
     </bean>
 
-    <bean id="carFactory" class="com.sf.car.CarInstanceFactory">
+    <bean id="carFactory" class="com.sf.ioc.car.CarInstanceFactory">
         <property name="map">
             <map>
                 <entry key="4">
-                    <bean class="com.sf.car.Car">
+                    <bean class="com.sf.ioc.car.Car">
                         <property name="id" value="4"></property>
                         <property name="name" value="BMW"></property>
                         <property name="price" value="440000"></property>
                     </bean>
                 </entry>
                 <entry key="5">
-                    <bean class="com.sf.car.Car">
+                    <bean class="com.sf.ioc.car.Car">
                         <property name="id" value="5"></property>
                         <property name="name" value="XiaoMiSu7"></property>
                         <property name="price" value="219000"></property>

+ 3 - 3
spring-demo/src/main/resources/spring-singleton.xml → spring-demo/src/main/resources/ioc/spring-singleton.xml

@@ -7,14 +7,14 @@
     <!--    默认是单例的-->
 <!--    <bean id="role" class="com.sf.helloworld.Role" scope="singleton"></bean>-->
     <!--   显示声明为多例的 prototype-->
-    <bean id="user" class="com.sf.helloworld.User" scope="prototype"></bean>
+    <bean id="user" class="com.sf.ioc.helloworld.User" scope="prototype"></bean>
 
     <!--   bean的生命周期  创建 - 初始化 init-method - 可以使用 - 销毁 destroy-method -->
-    <bean id="auth" class="com.sf.helloworld.Auth" init-method="init" destroy-method="destroy">
+    <bean id="auth" class="com.sf.ioc.helloworld.Auth" init-method="init" destroy-method="destroy">
         <property name="name" value="没权限"/>
     </bean>
 
     <!--    把自定义的bean后置处理器 加载到容器中-->
-    <bean id = "myBeanPost" class="com.sf.lifecycle.MyBeanPost">
+    <bean id = "myBeanPost" class="com.sf.ioc.lifecycle.MyBeanPost">
     </bean>
 </beans>

+ 7 - 0
spring-demo/src/main/resources/mapper/BookMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sf.mybatis.dao.BookDao">
+    <select id="findAll" resultType="com.sf.mybatis.entity.Book">
+        select * from book;
+    </select>
+</mapper>

+ 12 - 0
spring-demo/src/main/resources/mybatis-config.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-config.dtd">
+<configuration>
+    <settings>
+        <!-- 使用mybatis的自动驼峰转换-->
+        <setting name="mapUnderscoreToCamelCase" value="true"/>
+    </settings>
+    <mappers>
+<!--        <mapper resource="mapper/BookMapper.xml"></mapper>-->
+    </mappers>
+</configuration>

+ 34 - 0
spring-demo/src/main/resources/spring-mybatis.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
+        https://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/context
+        https://www.springframework.org/schema/context/spring-context.xsd">
+
+    <!-- 加载properties文件 -->
+    <context:property-placeholder location="classpath:db.properties"/>
+
+    <bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource">
+        <property name="url" value="${jdbc.url}"></property>
+        <property name="username" value="${jdbc.username}"></property>
+        <property name="password" value="${jdbc.password}"></property>
+        <property name="driverClassName" value="${jdbc.driverName}"></property>
+    </bean>
+
+    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
+        <property name="dataSource" ref="datasource"></property>
+        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
+    </bean>
+
+    <!-- 配置mapper扫描 -->
+    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
+        <property name="basePackage" value="com.sf.mybatis.dao"></property>
+        <!-- 这里配置上述的 sqlSessionFactoryBeanName 注意要使用的是value 而不是ref-->
+        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
+    </bean>
+
+    <context:component-scan base-package="com.sf.mybatis.service"></context:component-scan>
+
+</beans>

+ 0 - 23
spring-demo/src/test/java/com/sf/TestJdbc.java

@@ -1,23 +0,0 @@
-package com.sf;
-
-import com.sf.jdbc.SpringJdbcConfig;
-import com.sf.jdbc.dao.BookDao;
-import com.sf.jdbc.entity.Book;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
-
-import java.util.List;
-
-@SpringJUnitConfig(SpringJdbcConfig.class)
-public class TestJdbc {
-
-    @Autowired
-    private BookDao bookDao;
-
-    @Test
-    public void test() {
-        List<Book> books = bookDao.findAll();
-        System.out.println(books);
-    }
-}

+ 25 - 0
spring-demo/src/test/java/com/sf/TestMybatis.java

@@ -0,0 +1,25 @@
+package com.sf;
+
+import com.sf.mybatis.MybatisConfig;
+import com.sf.mybatis.entity.Book;
+import com.sf.mybatis.service.BookService;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+
+import java.util.List;
+
+//@SpringJUnitConfig(locations = "classpath:spring-mybatis.xml")
+@SpringJUnitConfig(MybatisConfig.class)
+public class TestMybatis {
+
+    @Autowired
+    private BookService bookService;
+
+    @Test
+    public void test() {
+        List<Book> books = bookService.findAll();
+        System.out.println(books);
+    }
+
+}

+ 7 - 7
spring-demo/src/test/java/com/sf/TestAop.java → spring-demo/src/test/java/com/sf/aop/TestAop.java

@@ -1,8 +1,8 @@
-package com.sf;
+package com.sf.aop;
 
-import com.sf.aop.BaseService;
-import com.sf.aspect.AopConfig;
-import com.sf.aspect.Performance;
+import com.sf.aop.advice.BaseService;
+import com.sf.aop.aspect.AopConfig;
+import com.sf.aop.aspect.Performance;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
@@ -12,7 +12,7 @@ public class TestAop {
 
     @Test
     public void test() {
-        ApplicationContext context = new ClassPathXmlApplicationContext("spring-aop.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("aop/spring-aop.xml");
         BaseService personProxy = (BaseService) context.getBean("personProxy");
         personProxy.eat();
         personProxy.wc();
@@ -21,7 +21,7 @@ public class TestAop {
 
     @Test
     public void testAdvisor() {
-        ApplicationContext context = new ClassPathXmlApplicationContext("spring-advisor.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("aop/spring-advisor.xml");
         BaseService personProxy = (BaseService) context.getBean("personProxy");
         personProxy.eat();
         personProxy.wc();
@@ -30,7 +30,7 @@ public class TestAop {
     @Test
     public void testAspect(){
         // 识别xml方式的配置文件
-        ApplicationContext context = new ClassPathXmlApplicationContext("spring-aspect.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("aop/spring-aspect.xml");
         Performance performance = context.getBean(Performance.class);
         performance.perform();
         performance.respond();

+ 3 - 3
spring-demo/src/test/java/com/sf/TestAopConfig.java → spring-demo/src/test/java/com/sf/aop/TestAopConfig.java

@@ -1,8 +1,8 @@
-package com.sf;
+package com.sf.aop;
 
 
-import com.sf.aspect.AopConfig;
-import com.sf.aspect.Performance;
+import com.sf.aop.aspect.AopConfig;
+import com.sf.aop.aspect.Performance;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;

+ 2 - 2
spring-demo/src/test/java/com/sf/TestDruid.java → spring-demo/src/test/java/com/sf/aop/TestDruid.java

@@ -1,4 +1,4 @@
-package com.sf;
+package com.sf.aop;
 
 import com.alibaba.druid.pool.DruidDataSource;
 import org.junit.jupiter.api.Test;
@@ -10,7 +10,7 @@ public class TestDruid {
     @Test
     public void test(){
         ApplicationContext context =
-                new ClassPathXmlApplicationContext("spring-mysql.xml");
+                new ClassPathXmlApplicationContext("aop/spring-mysql.xml");
         DruidDataSource dataSource = context.getBean(DruidDataSource.class);
         System.out.println(dataSource.getUrl());
         System.out.println(dataSource.getUsername());

+ 44 - 0
spring-demo/src/test/java/com/sf/aop/TestJdbc.java

@@ -0,0 +1,44 @@
+package com.sf.aop;
+
+import com.sf.aop.jdbc.SpringJdbcConfig;
+import com.sf.aop.jdbc.dao.AuthorDao;
+import com.sf.aop.jdbc.dao.BookDao;
+import com.sf.aop.jdbc.entity.Author;
+import com.sf.aop.jdbc.entity.Book;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+
+import java.util.List;
+
+@SpringJUnitConfig(SpringJdbcConfig.class)
+public class TestJdbc {
+
+    @Autowired
+    private BookDao bookDao;
+
+    @Autowired
+    private AuthorDao authorDao;
+
+    @Test
+    public void test() {
+        List<Book> books = bookDao.findAll();
+        System.out.println(books);
+    }
+
+    @Test
+    public void test1() {
+        // 建造者模式
+        // 首先给实体类增加  @Builder注解  然后在创建对象时  就可以通过类调用builder()  接下来就可以给属性赋值了
+        // 在给所有属性赋值后  调用build()方法  就可以创建对象了
+        Book book = Book.builder().bookId("9999").bookName("疯狂java讲义").typeId("2").authorId("2")
+                .authorName("李刚").bookImg("/img/9999.png").bookDesc("另一份数据")
+                .build();
+        int insert = bookDao.insert(book);
+        System.out.println(insert);
+
+        Author author = Author.builder().authorId("7").authorName("李刚").authorDesc("另一份数据").build();
+        int authorInsert = authorDao.insert(author);
+        System.out.println(authorInsert);
+    }
+}

+ 24 - 0
spring-demo/src/test/java/com/sf/aop/TestTx.java

@@ -0,0 +1,24 @@
+package com.sf.aop;
+
+import com.sf.aop.jdbc.entity.Author;
+import com.sf.aop.jdbc.entity.Book;
+import com.sf.aop.jdbc.service.BookService;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+
+@SpringJUnitConfig(locations = "classpath:aop/spring-tx.xml")
+public class TestTx {
+
+    @Autowired
+    private BookService bookService;
+
+    @Test
+    public void test() {
+        Book book = Book.builder().bookId("9999").bookName("疯狂java讲义").typeId("2").authorId("2")
+                .authorName("李刚").bookImg("/img/9999.png").bookDesc("另一份数据").build();
+        Author author = Author.builder().authorId("7").authorName("李刚").authorDesc("另一份数据").build();
+
+        bookService.insert(book, author);
+    }
+}

+ 26 - 0
spring-demo/src/test/java/com/sf/aop/TestTxAnno.java

@@ -0,0 +1,26 @@
+package com.sf.aop;
+
+import com.sf.aop.jdbc.SpringJdbcConfig;
+import com.sf.aop.jdbc.entity.Author;
+import com.sf.aop.jdbc.entity.Book;
+import com.sf.aop.jdbc.service.BookService;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+
+//@SpringJUnitConfig(locations = "classpath:spring-tx-anno.xml")
+@SpringJUnitConfig(SpringJdbcConfig.class)
+public class TestTxAnno {
+
+    @Autowired
+    private BookService bookService;
+
+    @Test
+    public void test() {
+        Book book = Book.builder().bookId("9999").bookName("疯狂java讲义").typeId("2").authorId("2")
+                .authorName("李刚").bookImg("/img/9999.png").bookDesc("另一份数据").build();
+        Author author = Author.builder().authorId("7").authorName("李刚").authorDesc("另一份数据").build();
+
+        bookService.insert(book, author);
+    }
+}

+ 3 - 3
spring-demo/src/test/java/com/sf/TestAnno.java → spring-demo/src/test/java/com/sf/ioc/TestAnno.java

@@ -1,6 +1,6 @@
-package com.sf;
+package com.sf.ioc;
 
-import com.sf.anno.House;
+import com.sf.ioc.anno.House;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
@@ -8,7 +8,7 @@ import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
 /**
  * @SpringJUnitConfig 是spring整合Junit的注解
  */
-@SpringJUnitConfig(locations = "classpath:spring-annotation.xml")
+@SpringJUnitConfig(locations = "classpath:ioc/spring-annotation.xml")
 public class TestAnno {
 
     @Autowired

+ 5 - 5
spring-demo/src/test/java/com/sf/TestAuto.java → spring-demo/src/test/java/com/sf/ioc/TestAuto.java

@@ -1,8 +1,8 @@
-package com.sf;
+package com.sf.ioc;
 
-import com.sf.auto.Chair;
-import com.sf.auto.House;
-import com.sf.auto.Teacher;
+import com.sf.ioc.auto.Chair;
+import com.sf.ioc.auto.House;
+import com.sf.ioc.auto.Teacher;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -11,7 +11,7 @@ public class TestAuto {
 
     @Test
     public void test() {
-        ApplicationContext context = new ClassPathXmlApplicationContext("spring-auto.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("ioc/spring-auto.xml");
 
         House house = context.getBean("house", House.class);
         System.out.println(house);

+ 2 - 2
spring-demo/src/test/java/com/sf/TestConfig.java → spring-demo/src/test/java/com/sf/ioc/TestConfig.java

@@ -1,6 +1,6 @@
-package com.sf;
+package com.sf.ioc;
 
-import com.sf.anno.House;
+import com.sf.ioc.anno.House;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;

+ 3 - 3
spring-demo/src/test/java/com/sf/TestFactory.java → spring-demo/src/test/java/com/sf/ioc/TestFactory.java

@@ -1,6 +1,6 @@
-package com.sf;
+package com.sf.ioc;
 
-import com.sf.car.Car;
+import com.sf.ioc.car.Car;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -9,7 +9,7 @@ public class TestFactory {
 
     @Test
     public void test(){
-        ApplicationContext context = new ClassPathXmlApplicationContext("spring-factory.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("ioc/spring-factory.xml");
         Car bmw = (Car) context.getBean("bmwCar");
         System.out.println(bmw);
 

+ 5 - 5
spring-demo/src/test/java/com/sf/TestSingleton.java → spring-demo/src/test/java/com/sf/ioc/TestSingleton.java

@@ -1,7 +1,7 @@
-package com.sf;
+package com.sf.ioc;
 
-import com.sf.helloworld.Role;
-import com.sf.helloworld.User;
+import com.sf.ioc.helloworld.Role;
+import com.sf.ioc.helloworld.User;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -10,7 +10,7 @@ public class TestSingleton {
 
     @Test
     public void test() {
-        ApplicationContext context = new ClassPathXmlApplicationContext("spring-singleton.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("ioc/spring-singleton.xml");
         System.out.println("=======");
         User user = (User) context.getBean("user");
         User user1 = (User) context.getBean("user");
@@ -27,7 +27,7 @@ public class TestSingleton {
         // 创建容器  多态的使用
         // 声明时类型A  a = new  运行时类型B()
         // A是B的父类 或者 A是B的实现接口
-        ApplicationContext context = new ClassPathXmlApplicationContext("spring-singleton.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("ioc/spring-singleton.xml");
 //        ClassPathXmlApplicationContext context1 = new ClassPathXmlApplicationContext("spring-singleton.xml");
 //        Auth auth = context.getBean(Auth.class);
 //        System.out.println(auth);

+ 5 - 5
spring-demo/src/test/java/com/sf/TestUser.java → spring-demo/src/test/java/com/sf/ioc/TestUser.java

@@ -1,7 +1,7 @@
-package com.sf;
+package com.sf.ioc;
 
-import com.sf.helloworld.Role;
-import com.sf.helloworld.User;
+import com.sf.ioc.helloworld.Role;
+import com.sf.ioc.helloworld.User;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -17,7 +17,7 @@ public class TestUser {
     public void test() {
         // 先引入spring容器  然后查找user的bean
         // ApplicationContext 是应用上下文  容器的意思
-        ApplicationContext context = new ClassPathXmlApplicationContext("spring-beans.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("ioc/spring-beans.xml");
         User user = (User) context.getBean("user");
         System.out.println(user);
 
@@ -40,7 +40,7 @@ public class TestUser {
 
     @Test
     public void testNew() {
-        ApplicationContext context = new ClassPathXmlApplicationContext("spring-beans-new.xml");
+        ApplicationContext context = new ClassPathXmlApplicationContext("ioc/spring-beans-new.xml");
         User user = (User) context.getBean("user");
         System.out.println(user);