1. 程式人生 > 其它 >刷機命令學習

刷機命令學習

技術標籤:spring

spring整合mybatis

maven依賴準備
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency
>
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.17</version> </dependency> <dependency> <groupId>org.mybatis</groupId
>
<artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <
version
>
5.3.3</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.1.9.RELEASE</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.6</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.18</version> <scope>provided</scope> </dependency> </dependencies>

大體配置:

img

可以看出spring_dao.xml為整個整合的核心

其中包含

  • 注入資料庫的登入資訊
<!--    DataSource:使用spring的資料來源替換mybatis的配置-->
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url"
                  value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC&amp;useSSL=false"/>
        <property name="username" value="root"/>
        <property name="password" value=""/>
   </bean>
  • 注入mybatis的配置以及sql語句的對映檔案

     <!--固定模式-->
        <!--    sqlSessionFactory就是sqlSession-->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <!--        繫結mybatis-->
            <property name="configLocation" value="classpath:sql_config.xml"/>
            <property name="mapperLocations" value="classpath:generator/*.xml"/>
            <!--        sqlSession-->
        </bean>
        <bean class="org.mybatis.spring.SqlSessionTemplate" id="sessionTemplate">
            <constructor-arg index="0" ref="sqlSessionFactory"/>
            <!--        只能用構造器注入,因為沒有set方法-->
        </bean>
    
  • 注入實現類

        <!--注入實現類-->
        <bean id="student" class="generate.StudentImpl">
            <property name="sessionTemplate" ref="sessionTemplate"/>
        </bean>
        <bean class="generate.StudentImpl2" id="student2">
            <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
        </bean>
    

    整個spring_dao.xml

    <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
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop.xsd">
    
        <!--    DataSource:使用spring的資料來源替換mybatis的配置-->
        <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
            <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
            <property name="url"
                      value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC&amp;useSSL=false"/>
            <property name="username" value="root"/>
            <property name="password" value=""/>
        </bean>
    
    
        <!--固定模式-->
        <!--    sqlSessionFactory就是sqlSession-->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <!--        繫結mybatis-->
            <property name="configLocation" value="classpath:sql_config.xml"/>
            <property name="mapperLocations" value="classpath:generator/*.xml"/>
            <!--        sqlSession-->
        </bean>
        <bean class="org.mybatis.spring.SqlSessionTemplate" id="sessionTemplate">
            <constructor-arg index="0" ref="sqlSessionFactory"/>
            <!--        只能用構造器注入,因為沒有set方法-->
        </bean>
    
        <!--注入實現類-->
        <bean id="student" class="generate.StudentImpl">
            <property name="sessionTemplate" ref="sessionTemplate"/>
        </bean>
        <bean class="generate.StudentImpl2" id="student2">
            <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
        </bean>
    
    
        <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
    
        <tx:advice transaction-manager="transactionManager" id="interceptor">
            <tx:attributes>
                <tx:method name="*" propagation="REQUIRED"/>
            </tx:attributes>
        </tx:advice>
    
    
        <aop:config>
            <aop:pointcut id="txcount" expression="execution(* generate.StudentDao.*.* (..))"/>
            <aop:advisor advice-ref="interceptor" pointcut-ref="txcount"/>
        </aop:config>
    
    
    </beans>
    

    實現類分為兩種:

    1.直接繼承了StudentDao的介面

public class StudentImpl implements StudentDao {
    //    原來的操作都使用sqlSession來執行,現在使用SqlSessionTemplate來執行
    private SqlSessionTemplate sessionTemplate;

    public void setSessionTemplate(SqlSessionTemplate sessionTemplate) {
        this.sessionTemplate = sessionTemplate;
    }

    @Override
    public int insert(Student record) {
        return 0;
    }

    @Override
    public int insertSelective(Student record) {
        return 0;
    }

    @Override
    public List<Student> FindAll() {
        StudentDao mapper = sessionTemplate.getMapper(StudentDao.class);
        return mapper.FindAll();
    }

    @Override
    public int delete(String record) {
        return 0;
    }
}

另外一種就比較簡單了,繼承了SqlSessionDaoSupport和StudentDao

public class StudentImpl2 extends SqlSessionDaoSupport implements StudentDao {
    @Override
    public int insert(Student record) {
        return getSqlSession().getMapper(StudentDao.class).insert(record);
    }

    @Override
    public int insertSelective(Student record) {
        return getSqlSession().getMapper(StudentDao.class).insertSelective(record);
    }

    @Override
    public List<Student> FindAll() {
        Student student = new Student("aa", "aa", "aa", "aa");
        int insert = insert(student);
        System.out.println("新增" + insert);
        int delete = delete("aa");
        System.out.println("刪除" + delete);
        return getSqlSession().getMapper(StudentDao.class).FindAll();
    }

    @Override
    public int delete(String record) {
        return getSqlSession().getMapper(StudentDao.class).delete(record);
    }
}

student類

這次使用了lombok的包

@Data
@AllArgsConstructor//生成有參構造
@NoArgsConstructor//生成無參構造
public class Student implements Serializable {
    private String id;

    private String name;

    private String age;

    private String card;

    private static final long serialVersionUID = 1L;

}

我認為好處就是無需構建get,set方法,以及有參構造和無參構造

@Data:代替了成員變數的get和set方法

@AllArgsConstructor:生成有參構造

@NoArgsConstructor:生成無參構造

測試類

    public static void main(String[] args) throws IOException {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring_dao.xml");
        StudentDao student = context.getBean("student2", StudentDao.class);
        List<Student> students = student.FindAll();
        for (Student student1 : students) {
            System.out.println(student1.toString());
        }
    }

這裡students2使用的是繼承了SqlSessionDaoSupport和StudentDao的方法,

如果使用之繼承了StudentDao的方法只需要改成studnet1即可