<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      day 621

      spring 學(xué)習(xí)筆記

      1,ioc ##控制反轉(zhuǎn),依賴注入 demo

      控制反轉(zhuǎn):對象由spring容器創(chuàng)建 依賴注入 屬性方法由spring容器 賦值

      .1 set注入 ##樣例類必須有set方法

      package com.hou.pojo;
      
      public class Hello {
      
          private String name;
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          @Override
          public String toString() {
              return "Hello{" +
                      "name='" + name + '\'' +
                      '}';
          }
      }
      

      在spring的配置文件中注冊

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
              https://www.springframework.org/schema/beans/spring-beans.xsd">
          一般用于團隊開發(fā),它可以將多個配置文件,導(dǎo)入合并為一個  
      	<import resource="beans.xml"/>
         一個bean 代表一個對象
          <!--id = 變量名-->
          <!--class = new的對象-->
          <!--property 相當(dāng)于給對象中的屬性設(shè)值-->
          <bean id="userdaomysql" class="com.hou.dao.UserDaoMysqlImpl"></bean>
          <bean id="hello" class="com.hou.pojo.Hello">
              <property name="name" value="Spring"/>
              <!--ref引用spring中已經(jīng)創(chuàng)建很好的對象-->
              <!--value是一個具體的值 一般是基本數(shù)據(jù)類型-->
              <property name="userDao" ref="userdaomysql"/>
          </bean>
          使用有參構(gòu)造 ,構(gòu)造器注入
           <bean id="user" class="com.hou.pojo.User">
               index="0" 參數(shù)索引位置 value="hou"對應(yīng)參數(shù)值
              <constructor-arg index="0" value="hou"/>
               
          </bean>
          <bean id="user" class="com.hou.pojo.User">
              name="name"  形參名    value="hou" 形參值
          <constructor-arg name="name" value="hou"></constructor-arg>
      	</bean>
          
          起別名  
          <bean id="user" class="com.hou.pojo.User">
          <constructor-arg name="name" value="hou"></constructor-arg>
          </bean>
      
          <alias name="user" alias="user2aaa  hannian"/>
          name="user" 對應(yīng)bean的id   
      	alias="user2aaa  hannian"  對應(yīng)的別名 可以取多個  空格隔開
      </beans
      

      @test

      import com.hou.pojo.Hello;
      import org.springframework.context.ApplicationContext;
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      
      public class Mytest {
      
          public static void main(String[] args) {
              //獲取spring上下文對象
              ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
              //我們的對象下能在都在spring·中管理了,我們要使用,直接取出來就可以了
              Hello hello = (Hello) context.getBean("hello");
              System.out.println(hello.toString());
          }
      }
      

      .1,set注入的集中 類型

          <bean id="address" class="com.pojo.Address">
              <property name="address" value="xian"></property>
          </bean>
       
      	<bean id="student" class="com.pojo.Student">
            	基本類型屬性注入
              <property name="name" value="hou"/>
              引用類型 bean 注入
              <property name="address" ref="address"/>
      
              <!--數(shù)組注入-->
              <property name="books">
                  <array>
                      <value>三國</value>
                      <value>西游</value>
                      <value>水滸</value>
                  </array>
              </property>
      
              <!--list-->
              <property name="hobbies">
                  <list>
                      <value>eat</value>
                      <value>drink</value>
                      <value>play</value>
                  </list>
              </property>
              
      		 <!--map-->
              <property name="card">
                  <map>
                      <entry key="1" value="12"/>
                      <entry key="2" value="23"/>
                  </map>
              </property>
      		 <!--set-->
              <property name="game">
                  <set>
                      <value>wangzhe</value>
                      <value>daota</value>
                      <value>lol</value>
                  </set>
              </property>
      		 <!--空值null -->
              <property name="wife">
                  <null></null>
              </property>
      
              <!--properties類  注入-->
              <property name="infor">
                  <props>
                      <prop key="id">20200405</prop>
                      <prop key="name">hdk</prop>
                  </props>
              </property>
          </bean>
      
      

      spring 自帶 p: 和 c: 注入

      <?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:p="http://www.springframework.org/schema/p"
             xmlns:c="http://www.springframework.org/schema/c"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
              https://www.springframework.org/schema/beans/spring-beans.xsd">
      	前提 要先引入        
      	xmlns:p="http://www.springframework.org/schema/p"
        	xmlns:c="http://www.springframework.org/schema/c"
        	
          <!--p命名空間注入/set注入-->
          <bean id="use" class="com.pojo.User" p:name="dong" p:age="10">
          </bean>
      
          <!--c命名空間/構(gòu)造器注入-->
          <bean id="use2" class="com.pojo.User" c:name="kun" c:age="19"></bean>
      </beans>
      

      .2 bean 作用域 (作用域感覺這個詞語在這里有點奇怪 ,單例模式原型模式 和作用域有什么關(guān)系)

      1. scope="singleton" 單例模式(默認)
      <bean id="use2" class="com.pojo.User" scope="singleton"></bean>
      
      1. scope="prototype 原型模式: 每次從容器中g(shù)et的時候,都產(chǎn)生一個新對象!
      <bean id="use2" class="com.pojo.User"  scope="prototype"></bean>
      
      1. 其余的request、session、application這些只能在web開放中使用!

      .3 bean 的自動裝配

      bean3種裝配方法
      1. 在xml中顯示配置 set 構(gòu)造器注入

      2. 在java中顯示配置 直接聲明時賦值

      3. 隱式的自動裝配bean

        1. Byname自動裝配:byname會自動查找,和自己對象set對應(yīng)的值對應(yīng)的id

          保證所有id唯一,并且和set注入的值一致

        2. Bytype自動裝配:byType會自動查找,和自己對象屬性相同的bean

          保證所有的class唯一

      public class Cat {
          public void jiao(){
              System.out.println("miao");
          }
      }
      public class Dog {
      
          public void jiao(){
              System.out.println("wow");
          }
      
      }
      package com.pojo;
      
      
      public class People {
      
          private Cat cat;
          private Dog dog;
          private String name;
      
          @Override
          public String toString() {
              return "People{" +
                      "cat=" + cat +
                      ", dog=" + dog +
                      ", name='" + name + '\'' +
                      '}';
          }
      
          public Cat getCat() {
              return cat;
          }
      
          public void setCat(Cat cat) {
              this.cat = cat;
          }
      
          public Dog getDog() {
              return dog;
          }
      
          public void setDog(Dog dog) {
              this.dog = dog;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      }
      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
              https://www.springframework.org/schema/beans/spring-beans.xsd">
      
          <bean id="cat11" class="com.pojo.Cat"/>
          <bean id="dog" class="com.pojo.Dog"/>
          <!--byname會自動查找,和自己對象set對應(yīng)的值對應(yīng)的id--> 
              會根據(jù) people類的 屬性 private Cat cat; private Dog dog  autowire="byName" 只匹配到dog    id="dog"
          <!--<bean id="people" class="com.pojo.People" autowire="byName">-->
              <!--<property name="name" value="hou"></property>-->
          <!--</bean>-->
          <!--byType會自動查找,和自己對象屬性相同的bean-->
          會根據(jù) people類的 屬性 private Cat cat; private Dog dog autowire="byType"  類型		一致所以匹配所有 id="cat11" id="dog"
          <bean id="people" class="com.pojo.People" autowire="byType">
              <property name="name" value="hou"></property>
          </bean>
      
      </beans>
      

      使用注解自動裝配 注解一定是趨勢,重點記憶

      前提導(dǎo)入context約束

      ? context:annotation-config/

      <?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">
      
      
          <context:annotation-config/>
             <!--指定要掃描的包-->
          <context:component-scan base-package="com.pojo"/>   @Component使用時必寫
      </beans>
      

      @Autowire ##一定結(jié)合自動裝配理解

      在屬性上個使用,也可以在set上使用 我們可以不用編寫set方法了

      public class People {
          @Autowired
          private Cat cat;
          @Autowired
          private Dog dog;
          private String name;
      }
      @Nullable 字段標(biāo)志的注解,說明這個字段可以為null
      
      如果@Autowired自動裝配環(huán)境比較復(fù)雜。自動裝配無法通過一個注解完成的時候
      
      我們可以使用@Qualifier(value = "dog")去配合使用,指定一個唯一的id對象
      
      ```java
      public class People {
          @Autowired
          private Cat cat;
          @Autowired
          @Qualifier(value = "dog")
          private Dog dog;
          private String name;
      }
      ```
      
      @Resource(name="dog")也可以
      
      區(qū)別:
      
      - @autowire通過byType實現(xiàn),而且必須要求這個對象存在
      - @resource默認通過byName實現(xiàn),如果找不到,通過byType實現(xiàn)
      
      1. 使用注解開發(fā)
      @Component
      作用域注入
      @Scope("singleton")
      public class User {
          .1 屬性注入
          @Value("dong")
          private String name;
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      }
      
      1. 衍生的注解

      @Component有幾個衍生注解,會按照web開發(fā)中,mvc架構(gòu)中分層。

      • dao (@Repository)
      • service(@Service)
      • controller(@Controller)

      這四個注解功能一樣的,只是用到不同層級的實現(xiàn)類中

      總結(jié):

      • xml更加萬能
      • 注解,使用有局限性 但是節(jié)約時間

      ? 最好 xml用來管理bean 注解只用來完成屬性的注入

      使用java方式配置spring JavaConfig
      @Configuration //這個也會被spring容器托管,注冊到容器中,因為他本來就是一個@Component
      @ComponentScan("com.pojo")
      @Import(Config2.class)
      public class MyConfig {
      
          @Bean
          public User getUser(){
              return new User();
          }
      
      }
      @Component
      public class User {
      
          @Value("dong")
          private String name;
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          @Override
          public String toString() {
              return "User{" +
                      "name='" + name + '\'' +
                      '}';
          }
      }
      springBoot  最多使用  但是我不理解  沒關(guān)系到springBoot再說
      
      代理

      主要目的在不改變原有業(yè)務(wù)的代碼的基礎(chǔ)上進行功能擴展 ,
      主要是 原有功能類成為代理類的一個屬性 在使用功能的前后增加新功能

      import java.lang.reflect.InvocationHandler;
      import java.lang.reflect.Method;
      import java.lang.reflect.Proxy;
      
      //會這個類,自動生成代理類
      public class ProxyInvocation implements InvocationHandler {
      
          //被代理的接口
          private Rent rent;
      
          public void setRent(Rent rent) {
              this.rent = rent;
          }
      
          //生成代理類
          public Object getProxy(){
              return Proxy.newProxyInstance(this.getClass().getClassLoader(),rent.getClass().getInterfaces(),this);
          }
      
          //處理代理實例,并返回結(jié)果
          public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
              seeHouse();
              Object result = method.invoke(rent, args);
              fare();
              return result;
          }
      
          public void seeHouse(){
              System.out.println("see house");
          }
      
          public void fare(){
              System.out.println("fare");
          }
      }
      public interface Rent {
          void rent();
      }
      public class Host implements Rent {
          public void rent() {
              System.out.println("host rent");
          }
      }
      public class Client {
      
          public static void main(String[] args) {
              //真實角色
              Host host = new Host();
      
              //代理角色
              ProxyInvocation proxyInvocation = new ProxyInvocation();
      
              //通過調(diào)用程序處理角色來處理我們要調(diào)用的接口對象
              proxyInvocation.setRent(host);
      
              Rent proxy = (Rent) proxyInvocation.getProxy();  //這里的proxy是動態(tài)生成的
      
              proxy.rent();
          }
      }
      
      aop 實現(xiàn)原理代理模式

      1,spring 配置文件 + 繼承spring提供接口api實現(xiàn)

      <?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:aop="http://www.springframework.org/schema/aop"
             xsi:schemaLocation="http://www.springframework.org/schema/beanss
              https://www.springframework.org/schema/beans/spring-beans.xsd
              http://www.springframework.org/schema/aop
              https://www.springframework.org/schema/aop/spring-aop.xsd">
      
          <!--注冊bean-->
          <bean id="userservice" class="com.service.UserServiceImp"></bean>
          <bean id="log" class="com.log.Log"/>
          <bean id="afterlog" class="com.log.AfterLog"/>
      
          <!--配置aop-->
          <aop:config>
              <!--切入點:expression:表達式,execution(要執(zhí)行的位置)-->
              <aop:pointcut id="point" expression="execution(* com.service.UserServiceImp.*(..))"/>
              <!--執(zhí)行環(huán)繞-->
              <aop:advisor advice-ref="log" pointcut-ref="point"/>
              <aop:advisor advice-ref="afterlog" pointcut-ref="point"/>
          </aop:config>
      
      </beans>
      public class UserServiceImp implements UserService {
      
      
          public void add() {
              System.out.println("add");
          }
      
          public void delete() {
              System.out.println("delete");
          }
      
          public void query() {
              System.out.println("query");
          }
      
          public void update() {
              System.out.println("update");
          }
      }
      import org.springframework.aop.MethodBeforeAdvice;
      
      import java.lang.reflect.Method;
      
      public class Log implements MethodBeforeAdvice {
          //method:要執(zhí)行的目標(biāo)對象的方法
          //args:參數(shù)
          //target:目標(biāo)對象
          public void before(Method method, Object[] args, Object target) throws Throwable {
              System.out.println(target.getClass().getName()+method.getName());
          }
      }
      public class AfterLog implements AfterReturningAdvice {
      
          //returnVaule: 返回值
          public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
              System.out.println(method.getName()+returnValue);
          }
      }
      public class Mytest {
          public static void main(String[] args) {
              ApplicationContext context = new ClassPathXmlApplicationContext("ApplcationContext.xml");
              //動態(tài)代理代理的是接口
              UserService userService = (UserService) context.getBean("userservice");
              userService.add();
          }
      }
      

      方法二:自定義來實現(xiàn)AOP【主要是切面定義】

      <?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: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/aop
              https://www.springframework.org/schema/aop/spring-aop.xsd">
      
          <!--注冊bean-->
          <bean id="userservice" class="com.service.UserServiceImp"></bean>
          <bean id="log" class="com.log.Log"/>
          <bean id="afterlog" class="com.log.AfterLog"/>
      
          <bean id="diy" class="com.diy.DiyPointcut">
          </bean>
          <aop:config>
              <!--自定義切面-->
              <aop:aspect ref="diy">
                  <!--切入點-->
                  <aop:pointcut id="point" expression="execution(* com.service.UserServiceImp.*(..))"/>
                  <aop:before method="before" pointcut-ref="point"/>
                  <aop:after method="after" pointcut-ref="point"/>
              </aop:aspect>
          </aop:config>
      
      </beans>
      public class DiyPointcut {
      
          public void before(){
              System.out.println("before");
          }
      
          public void after(){
              System.out.println("after");
          }
      }
      

      方法三:注解方式

      <?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: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/aop
              https://www.springframework.org/schema/aop/spring-aop.xsd">
          
          <bean id="ann" class="com.diy.Annotation"></bean>
          <aop:aspectj-autoproxy/>
          <!--注冊bean-->
          <bean id="userservice" class="com.service.UserServiceImp"></bean>
          
      </beans>
      import org.aspectj.lang.ProceedingJoinPoint;
      import org.aspectj.lang.annotation.After;
      import org.aspectj.lang.annotation.Around;
      import org.aspectj.lang.annotation.Aspect;
      import org.aspectj.lang.annotation.Before;
      
      @Aspect  //標(biāo)注這個類是一個切面
      public class Annotation {
      
          @Before("execution(* com.service.UserServiceImp.*(..))")
          public void before(){
              System.out.println("before");
          }
      
          @After("execution(* com.service.UserServiceImp.*(..))")
          public void after(){
              System.out.println("after");
          }
      
          //在環(huán)繞增強中,我們可以給地暖管一個參數(shù),代表我們要獲取切入的點
          @Around("execution(* com.service.UserServiceImp.*(..))")
          public void around(ProceedingJoinPoint joinPoint) throws Throwable {
              System.out.println("around");
      
              Object proceed = joinPoint.proceed();
      
              System.out.println("after around");
          }
      }
      

      $$$整合mybatis

      1,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">
          <parent>
              <artifactId>spring-study</artifactId>
              <groupId>com.hou</groupId>
              <version>1.0-SNAPSHOT</version>
          </parent>
          <modelVersion>4.0.0</modelVersion>
      
          <artifactId>spring-10-mybatis</artifactId>
      
          <dependencies>
              <dependency>
                  <groupId>mysql</groupId>
                  <artifactId>mysql-connector-java</artifactId>
                  <version>5.1.47</version>
              </dependency>
      
              <dependency>
                  <groupId>org.mybatis</groupId>
                  <artifactId>mybatis-spring</artifactId>
                  <version>2.0.4</version>
              </dependency>
      
              <dependency>
                  <groupId>org.springframework</groupId>
                  <artifactId>spring-jdbc</artifactId>
                  <version>5.2.3.RELEASE</version>
              </dependency>
      
      
              <dependency>
                  <groupId>org.mybatis</groupId>
                  <artifactId>mybatis</artifactId>
                  <version>3.5.2</version>
              </dependency>
      
              <dependency>
                  <groupId>org.aspectj</groupId>
                  <artifactId>aspectjweaver</artifactId>
                  <version>1.9.4</version>
              </dependency>
      
              <dependency>
                  <groupId>org.projectlombok</groupId>
                  <artifactId>lombok</artifactId>
                  <version>1.18.12</version>
              </dependency>
          </dependencies>
      
          <build>
              <resources>
                  <resource>
                      <directory>src/main/resources</directory>
                      <includes>
                          <include>**/*.properties</include>
                          <include>**/*.xml</include>
                      </includes>
                  </resource>
                  <resource>
                      <directory>src/main/java</directory>
                      <includes>
                          <include>**/*.properties</include>
                          <include>**/*.xml</include>
                      </includes>
                      <filtering>true</filtering>
                  </resource>
              </resources>
          </build>
      
      </project>
      

      2,mybatis-config.xml

      <?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>
      
          <typeAliases>
              <package name="com.pojo"/>
          </typeAliases>
      
          <environments default="development">
              <environment id="development">
                  <transactionManager type="JDBC"/>
                  <dataSource type="POOLED">
                      <property name="driver" value="com.mysql.jdbc.Driver"/>
                      <property name="url" value="jdbc:mysql://111.230.212.103:3306/mybatis?userSSL=true&amp;
                      userUnicode=true&amp;characterEncoding=UTF-8"/>
                      <property name="username" value="root"/>
                      <property name="password" value="hdk123"/>
                  </dataSource>
              </environment>
          </environments>
      
          <mappers>
              //也可以通過路徑方式注冊
              <mapper class="com.mapper.UserMapper"/>
          </mappers>
      </configuration>
      

      3,userMapper.xml

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE mapper
              PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      
      <mapper namespace="com.mapper.UserMapper">
      
          <select id="selectUser" resultType="user">
              select * from mybatis.user;
          </select>
      
      </mapper>
      

      4,接口類

      public interface UserMapper {
          List<User> selectUser();
      }
      

      整合 一

      --1實現(xiàn)類 UserMapperImpl

      package com.mapper;
      
      import com.pojo.User;
      import org.mybatis.spring.SqlSessionTemplate;
      
      import java.util.List;
      
      public class UserMapperImpl implements UserMapper {
      
          private SqlSessionTemplate sqlSessionTemplate;
      
          public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
              this.sqlSessionTemplate = sqlSessionTemplate;
          }
      
          public List<User> selectUser() {
              UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);
              return mapper.selectUser();
          }
      }
      

      --2 spring.xml

      <?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: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/aop
              https://www.springframework.org/schema/aop/spring-aop.xsd">
      
          <!--data source-->
          org.springframework.jdbc.datasource.DriverManagerDataSourceb 數(shù)據(jù)庫配置類  對應(yīng)mybatis sqlSessionFactoryBuilder
          <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
              <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
              <property name="url" value="jdbc:mysql://111.230.212.103:3306/mybatis?userSSL=true&amp;
                      userUnicode=true&amp;characterEncoding=UTF-8"/>
              <property name="username" value="root"/>
              <property name="password" value="hdk123"/>
          </bean>
      
          <!--sqlsession-->
          org.mybatis.spring.SqlSessionFactoryBean  數(shù)據(jù)庫池類 對應(yīng)mybatis sqlSessionFactory
          <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
              <property name="dataSource" ref="datasource" />
              <!--bound mybatis-->
              <property name="configLocation" value="classpath:mybatis-config.xml"/>
              <property name="mapperLocations" value="classpath:com/mapper/UserMapper.xml"/>
          </bean>
      org.mybatis.spring.SqlSessionTemplate數(shù)據(jù)庫連接對象  對應(yīng)mybatis sqlSession
          <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
              <constructor-arg index="0" ref="sqlSessionFactory"/>
          </bean>
      以上三步都是固定的
          
          
          <bean id="userMapper" class="com.mapper.UserMapperImpl">
              <property name="sqlSessionTemplate" ref="sqlSession"></property>
          </bean>
      
      </beans>
      

      @test

      import com.mapper.UserMapper;
      import com.pojo.User;
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      
      import java.io.IOException;
      
      
      public class Mytest {
      
      
          public static void main(String[] args) throws IOException {
      
              ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");
               context對象相當(dāng)于是spring容器對象用來管理所有bean  實例對象
              
              UserMapper userMapper = context.getBean("userMapper", UserMapper.class);
      
              for (User user : userMapper.selectUser()) {
                  System.out.println(user);
              }
          }
      }
      

      方法二

      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
              https://www.springframework.org/schema/beans/spring-beans.xsd">
          <!--data source-->
          <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
              <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
              <property name="url" value="jdbc:mysql://111.230.212.103:3306/mybatis?userSSL=true&amp;
                      userUnicode=true&amp;characterEncoding=UTF-8"/>
              <property name="username" value="root"/>
              <property name="password" value="hdk123"/>
          </bean>
      
          <!--sqlsession-->
          <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
              <property name="dataSource" ref="datasource" />
              <!--bound mybatis-->
              <property name="configLocation" value="classpath:mybatis-config.xml"/>
              <property name="mapperLocations" value="classpath:com/mapper/UserMapper.xml"/>
          </bean>
      
          <!--<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">-->
              <!--<constructor-arg index="0" ref="sqlSessionFactory"/>-->
          <!--</bean>-->
      
          <!--<bean id="userMapper" class="com.mapper.UserMapperImpl">-->
              <!--<property name="sqlSessionTemplate" ref="sqlSession"></property>-->
          <!--</bean>-->
      
          <bean id="userMapper2" class="com.mapper.UserMapperIml2">
              <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
          </bean>
      
      </beans>
      package com.mapper;
      
      import com.pojo.User;
      import org.apache.ibatis.session.SqlSession;
      import org.mybatis.spring.support.SqlSessionDaoSupport;
      
      import java.util.List;
      
      public class UserMapperIml2 extends SqlSessionDaoSupport implements UserMapper {
          public List<User> selectUser() {
              SqlSession sqlSession = getSqlSession();
              
              ## 為什么能直接調(diào)用getSqlSession();  
              在 Java 中,子類可以直接訪問從父類繼承的 public 和 protected 方法或?qū)傩裕拖裨L問自己的方法一樣。所以你無需使用對象或類名調(diào)用,只需直接調(diào)用 getSqlSession()。為什么能直接調(diào)用
              UserMapper mapper = sqlSession.getMapper(UserMapper.class);
              return mapper.selectUser();
          }
      }
      
      Spring中的事務(wù)管理

      事務(wù)四個特性

      • 原子性
      • 一致性
      • 隔離性
        • 多個業(yè)務(wù)可能操作一個資源,防止數(shù)據(jù)損壞
      • 持久性
        • 事務(wù)一旦提交,無論系統(tǒng)發(fā)生什么問題,結(jié)果都不會被影響。

      Spring中的事務(wù)管理

      • 聲明式事務(wù)
      • 編程式事務(wù)

      聲明式事務(wù)

      <?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: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/tx
              https://www.springframework.org/schema/tx/spring-tx.xsd
              http://www.springframework.org/schema/aop
              https://www.springframework.org/schema/aop/spring-tx.aop">
      
          <!--data source-->
          <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
              <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
              <property name="url" value="jdbc:mysql://111.230.212.103:3306/mybatis?userSSL=true&amp;
                      userUnicode=true&amp;characterEncoding=UTF-8"/>
              <property name="username" value="root"/>
              <property name="password" value="hdk123"/>
          </bean>
      
          <!--sqlsession-->
          <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
              <property name="dataSource" ref="datasource" />
              <!--bound mybatis-->
              <property name="configLocation" value="classpath:mybatis-config.xml"/>
              <property name="mapperLocations" value="classpath:com/mapper/*.xml"/>
          </bean>
      
          <!--聲明式事務(wù)-->
          <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
              <constructor-arg ref="datasource" />
          </bean>
      
          <!--結(jié)合aop實現(xiàn)事務(wù)置入-->
          <!--配置事務(wù)的類-->
          <tx:advice id="tx1" transaction-manager="transactionManager">
              <!--給哪些方法配置事務(wù)-->
              <!--配置事務(wù)的傳播特性-->
              <tx:attributes>
                  <tx:method name="add" propagation="REQUIRED"/>
                  <tx:method name="delete" propagation="REQUIRED"/>
                  <tx:method name="update" propagation="REQUIRED"/>
                  <tx:method name="*" propagation="REQUIRED"/>
                  <tx:method name="query" read-only="true"/>
              </tx:attributes>
          </tx:advice>
      
          <!--配置事務(wù)切入-->
          <aop:config>
              <aop:pointcut id="txpointxut" expression="execution(* com.mapper.*.*(..))"/>
              <aop:advisor advice-ref="tx1" pointcut-ref="txpointxut"/>
          </aop:config>
      
      </beans>
      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
              https://www.springframework.org/schema/beans/spring-beans.xsd">
      
          <import resource="spring-dao.xml"/>
      
          <bean id="userMapper2" class="com.mapper.UserMapperIml2">
              <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
          </bean>
      
      </beans>
      

      Mapper

      package com.mapper;
      
      import com.pojo.User;
      
      import java.util.List;
      
      public interface UserMapper {
          List<User> selectUser();
          int addUser(User user);
          int delete(int id);
      }
      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE mapper
              PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      
      <mapper namespace="com.mapper.UserMapper">
          <select id="selectUser" resultType="user">
              select * from mybatis.user;
          </select>
      
          <insert id="addUser" parameterType="user">
              insert into mybatis.user (id, name, pwd) values
              (#{id}, #{name}, #{pwd})
          </insert>
      
          <delete id="delete" parameterType="int">
              delete from mybatis.user where id=#{id}
          </delete>
      </mapper>
      package com.mapper;
      
      import com.pojo.User;
      import org.apache.ibatis.session.SqlSession;
      import org.mybatis.spring.support.SqlSessionDaoSupport;
      
      import java.util.List;
      
      public class UserMapperIml2 extends SqlSessionDaoSupport implements UserMapper {
      
          public List<User> selectUser() {
              User user = new User(6, "long", "zhi");
              SqlSession sqlSession = getSqlSession();
              UserMapper mapper = sqlSession.getMapper(UserMapper.class);
              mapper.addUser(user);
              mapper.delete(6);
              return mapper.selectUser();
          }
      
          public int addUser(User user) {
              return getSqlSession().getMapper(UserMapper.class).addUser(user);
          }
      
          public int delete(int id) {
              return getSqlSession().getMapper(UserMapper.class).delete(id);
          }
      }
      
      posted on 2024-11-29 18:55  韓行一  閱讀(18)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 91亚洲精品一区二区三区| 人妻少妇偷人精品一区| 欧美颜射内射中出口爆在线| 国产仑乱无码内谢| 亚洲av色综合久久综合| 古蔺县| 中文精品无码中文字幕无码专区| 97久久人人超碰国产精品| 无码丰满人妻熟妇区| 欧美极品少妇×xxxbbb| 不卡一区二区三区四区视频| 91福利一区福利二区| 26uuu另类亚洲欧美日本| 国产中文99视频在线观看| 国内精品伊人久久久久AV一坑| 精品久久丝袜熟女一二三| 国产精品白浆在线观看免费 | 亚洲成人av一区二区| 人妻蜜臀久久av不卡| 国产盗摄xxxx视频xxxx| 国产色无码专区在线观看| 91区国产福利在线观看午夜| 久久自己只精产国品| 看黄a大片日本真人视频直播| 粉嫩国产av一区二区三区| 国产成人毛片无码视频软件| 日本高清一区免费中文视频| 国产欧美亚洲精品a第一页| 日韩精品人妻系列无码av东京| 日韩精品国内国产一区二| 黑人大战欲求不满人妻| 国产综合一区二区三区麻豆| 亚洲成av人片无码天堂下载| 国产亚洲精品AA片在线爽| 色综合伊人色综合网站| 亚洲第一国产综合| 超碰人人超碰人人| 嘉禾县| 久久亚洲精品无码播放| 人妻无码中文字幕| 久久精品人人槡人妻人人玩|