zoukankan      html  css  js  c++  java
  • mybatis与spring集成

    1.添加相关依赖

    1.1 添加spring相关依赖(5.0.2.RELEASE)
    spring-core
    spring-beans
    spring-context
    spring-orm
    spring-tx
    spring-aspects
    spring-web

    1.2 添加mybatis相关依赖
    mybatis核心:mybatis(3.4.5)
    Mybatis分页:pagehelper(5.1.2)

    1.3 spring整合mybatis(1.3.1)
    mybatis-spring

    1.4 添加dbcp2连接池
    commons-dbcp2(2.1.1)
    commons-pool2(2.4.3)

    1.5 添加日志配置(2.9.1)
    log4j-core
    log4j-api
    log4j-web

    1.6 其他
    junit(4.12)
    javax.servlet-api(4.0.0)
    lombok(1.18.2)

    注:使用mybatis-generator插件,pom文件添加支持

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.liuwenwu</groupId>
      <artifactId>ssm</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
    
      <name>ssm Maven Webapp</name>
      <!-- FIXME change it to the project's website -->
      <url>http://www.example.com</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.plugin.version>3.7.0</maven.compiler.plugin.version>
    
        <!--添加jar包依赖-->
        <!--1.spring 5.0.2.RELEASE相关-->
        <spring.version>5.0.2.RELEASE</spring.version>
        <!--2.mybatis相关-->
        <mybatis.version>3.4.5</mybatis.version>
        <!--mysql-->
        <mysql.version>5.1.44</mysql.version>
        <!--pagehelper分页jar依赖-->
        <pagehelper.version>5.1.2</pagehelper.version>
        <!--mybatis与spring集成jar依赖-->
        <mybatis.spring.version>1.3.1</mybatis.spring.version>
        <!--3.dbcp2连接池相关 druid-->
        <commons.dbcp2.version>2.1.1</commons.dbcp2.version>
        <commons.pool2.version>2.4.3</commons.pool2.version>
        <!--4.log日志相关-->
        <log4j2.version>2.9.1</log4j2.version>
        <!--5.其他-->
        <junit.version>4.12</junit.version>
        <servlet.version>4.0.0</servlet.version>
        <lombok.version>1.18.2</lombok.version>
      </properties>
    
    
      <dependencies>
        <!--1.spring相关-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-orm</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-tx</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aspects</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>${spring.version}</version>
        </dependency>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>${spring.version}</version>
        </dependency>
    
        <!--2.mybatis相关-->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>${mybatis.version}</version>
        </dependency>
        <!--mysql-->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>${mysql.version}</version>
        </dependency>
        <!--pagehelper分页插件jar包依赖-->
        <dependency>
          <groupId>com.github.pagehelper</groupId>
          <artifactId>pagehelper</artifactId>
          <version>${pagehelper.version}</version>
        </dependency>
        <!--mybatis与spring集成jar包依赖-->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis-spring</artifactId>
          <version>${mybatis.spring.version}</version>
        </dependency>
    
        <!--3.dbcp2连接池相关-->
        <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-dbcp2</artifactId>
          <version>${commons.dbcp2.version}</version>
        </dependency>
        <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-pool2</artifactId>
          <version>${commons.pool2.version}</version>
        </dependency>
    
        <!--4.log日志相关依赖-->
        <!--核心log4j2jar包-->
        <dependency>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-core</artifactId>
          <version>${log4j2.version}</version>
        </dependency>
        <dependency>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-api</artifactId>
          <version>${log4j2.version}</version>
        </dependency>
        <!--web工程需要包含log4j-web,非web工程不需要-->
        <dependency>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-web</artifactId>
          <version>${log4j2.version}</version>
        </dependency>
    
        <!--5.其他-->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>${junit.version}</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>${servlet.version}</version>
          <scope>provided</scope>
        </dependency>
        <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <version>${lombok.version}</version>
          <scope>provided</scope>
        </dependency>
    
      </dependencies>
    
      <build>
        <finalName>ssm</finalName>
    
        <resources>
          <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
          <resource>
            <directory>src/main/java</directory>
            <includes>
              <include>**/*.xml</include>
            </includes>
          </resource>
          <!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题-->
          <resource>
            <directory>src/main/resources</directory>
            <includes>
              <include>jdbc.properties</include>
              <include>*.xml</include>
            </includes>
          </resource>
        </resources>
    
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>${maven.compiler.plugin.version}</version>
              <configuration>
                <source>${maven.compiler.source}</source>
                <target>${maven.compiler.target}</target>
                <encoding>${project.build.sourceEncoding}</encoding>
              </configuration>
            </plugin>
            <plugin>
              <groupId>org.mybatis.generator</groupId>
              <artifactId>mybatis-generator-maven-plugin</artifactId>
              <version>1.3.2</version>
              <dependencies>
                <!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 -->
                <dependency>
                  <groupId>mysql</groupId>
                  <artifactId>mysql-connector-java</artifactId>
                  <version>${mysql.version}</version>
                </dependency>
              </dependencies>
              <configuration>
                <overwrite>true</overwrite>
              </configuration>
            </plugin>
    
            <plugin>
              <artifactId>maven-clean-plugin</artifactId>
              <version>3.1.0</version>
            </plugin>
            <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
            <plugin>
              <artifactId>maven-resources-plugin</artifactId>
              <version>3.0.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.8.0</version>
            </plugin>
            <plugin>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.22.1</version>
            </plugin>
            <plugin>
              <artifactId>maven-war-plugin</artifactId>
              <version>3.2.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-install-plugin</artifactId>
              <version>2.5.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-deploy-plugin</artifactId>
              <version>2.8.2</version>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </project>

    2.1 注解式开发
    开启注解
    <!--1. 注解式开发 -->
    <!-- 注解驱动 -->

    <context:annotation-config/>

    <!-- 用注解方式注入bean,并指定查找范围:com.zking.ssh2及子子孙孙包-->

    <context:component-scan base-package="com.zking.oa"/>

    2.2 引入外部jdbc配置文件

    <context:property-placeholder location="classpath:jdbc.properties"/>

    2.3 配置dbcp2数据库连接池
    详见“dbcp2.txt”

    2.4 spring和mybatis整合
    详见“spring与mybatis整合.txt”


    2.5 注解式事物配置

    配置事务管理(环绕通知) 有关数据库操作的开启、提交操作都是在环绕在数据库操作的前后
    切面
    excution(* *..*Biz.*(..))

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager" />

    2.6 开启动态代理
    <aop:aspectj-autoproxy/>

    3.注解式开发
    ssh中数据的增删改查spring的配置如下
    @Repository
    <bean id=bookDao class=""/>
    @Service
    <bean id=bookService class="">
    @Autowired/@Resource:
    <property name=bookDao ref=bookDao/>
    </bean>
    @Constroller
    <bean id=bookAction class="">
    @Autowired/@Resource:
    <property name=bookService ref=bookService/>
    </bean>

    spring ioc注入方式
    set
    构造
    自动装配
    bytype 根据属性对应的接口在spring的上下文匹配实现类
    byname 根据属性名在spring上下文中寻找对应的id的Bean

    hibernate与spring测试
    applicationContext applicationContext = new classpathxmlappli..("appplicationContext.xml");
    applicationContext。getBean("xxxservice");

    @Repository:将DAO类声明为Bean
    @Service:通常作用在业务层
    @Constroller:通常作用在控制层,将在Spring MVC中使用
    @Component:是一个泛化的概念,仅仅表示spring中的一个组件(Bean),可以作用在任何层次
    @Scope:模式声明(singleton|prototype)
    @Autowired:将自动在代码上下文与其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方
    @Resource:
    1)@Resource后面没有任何内容,默认通过name属性去匹配bean,找不到再按type去匹配
    2)指定了name或者type则根据指定的类型去匹配bean
    3)指定了name和type则根据指定的name和type去匹配bean,任何一个不匹配都将报错

    问题:@Autowired和@Resource两个注解的区别:
    相当于之前spring、hibernate时代中的set注入,省去set、get方法
    1)@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配
    2)@Autowired是Spring的注解,@Resource是J2EE的注解,这个看一下导入注解的时候这两个注解的包名就一清二楚了
    Spring属于第三方的,J2EE是Java自己的东西,因此,建议使用@Resource注解,以减少代码和Spring之间的耦合。

    @Transactional
    注:个人感觉注解式事务比以前的声明式事务更加麻烦,要写的东西更多

    applicationContext-mabatis.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: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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://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 http://www.springframework.org/schema/aop/spring-aop.xsd">
    
        <!--1. 注解式开发 -->
        <!-- 注解驱动 -->
        <context:annotation-config/>
        <!-- 用注解方式注入bean,并指定查找范围:com.javaxl.ssm及子子孙孙包-->
        <context:component-scan base-package="com.liuwenwu"/>
    
        <context:property-placeholder location="classpath:jdbc.properties"/>
    
        <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
              destroy-method="close">
            <property name="driverClassName" value="${jdbc.driver}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
            <!--初始连接数-->
            <property name="initialSize" value="10"/>
            <!--最大活动连接数-->
            <property name="maxTotal" value="100"/>
            <!--最大空闲连接数-->
            <property name="maxIdle" value="50"/>
            <!--最小空闲连接数-->
            <property name="minIdle" value="10"/>
            <!--设置为-1时,如果没有可用连接,连接池会一直无限期等待,直到获取到连接为止。-->
            <!--如果设置为N(毫秒),则连接池会等待N毫秒,等待不到,则抛出异常-->
            <property name="maxWaitMillis" value="-1"/>
        </bean>
    
        <!--4. spring和MyBatis整合 -->
        <!--1) 创建sqlSessionFactory-->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 指定数据源 -->
            <property name="dataSource" ref="dataSource"/>
            <!-- 自动扫描XxxMapping.xml文件,**任意路径 -->
            <property name="mapperLocations" value="classpath*:com/liuwenwu/**/mapper/*.xml"/>
            <!-- 指定别名 -->
            <property name="typeAliasesPackage" value="com/liuwenwu/**/model"/>
            <!--配置pagehelper插件-->
            <property name="plugins">
                <array>
                    <bean class="com.github.pagehelper.PageInterceptor">
                        <property name="properties">
                            <value>
                                helperDialect=mysql
                            </value>
                        </property>
                    </bean>
                </array>
            </property>
        </bean>
    
        <!--2) 自动扫描com/javaxl/ssm/**/mapper下的所有XxxMapper接口(其实就是DAO接口),并实现这些接口,-->
        <!--   即可直接在程序中使用dao接口,不用再获取sqlsession对象-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!--basePackage 属性是映射器接口文件的包路径。-->
            <!--你可以使用分号或逗号 作为分隔符设置多于一个的包路径-->
            <property name="basePackage" value="com/liuwenwu/**/mapper"/>
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        </bean>
    
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource" />
        </bean>
        <tx:annotation-driven transaction-manager="transactionManager" />
        <aop:aspectj-autoproxy/>
    
    
    </beans>

    applicationContext.xml
    spring核心配置文件中 引入 applicationContext-mybatis.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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!--整合mybatis框架-->
        <import resource="applicationContext-mabatis.xml"></import>
    </beans>

    4.Spring Test+Junit完美组合

    4.1 在工程的pom文件中增加spring-test的依赖

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>${spring.version}</version>
    </dependency>

    4.2 创建BaseTestCase,并在该类上加上两个注解

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations={"classpath:applicationContext.xml"})

    相关代码:

    BookService:
    package com.liuwenwu.service;
    
    import com.liuwenwu.model.Book;
    import com.liuwenwu.util.PageBean;
    
    import java.util.List;
    import java.util.Map;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-24 19:20
     */
    public interface BookService {
        int deleteByPrimaryKey(Integer bid);
    
        int insert(Book record);
    
        int insertSelective(Book record);
    
        Book selectByPrimaryKey(Integer bid);
    
        int updateByPrimaryKeySelective(Book record);
    
        int updateByPrimaryKey(Book record);
    
        List<Map> aaaa(Map map, PageBean pageBean);
    
        List<Map> listPager(Map map, PageBean pageBean);
    }

    bookservieimpl:

    package com.liuwenwu.service.impl;
    
    import com.liuwenwu.mapper.BookMapper;
    import com.liuwenwu.model.Book;
    import com.liuwenwu.service.BookService;
    import com.liuwenwu.util.PageBean;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    import java.util.Map;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-24 19:22
     */
    
    @Service
    public class BookServiceImpl implements BookService {
    
        @Autowired
        private BookMapper bookMapper;
    
        @Override
        public int deleteByPrimaryKey(Integer bid) {
            return bookMapper.deleteByPrimaryKey(bid);
        }
    
        @Override
        public int insert(Book record) {
            return bookMapper.insert(record);
        }
    
        @Override
        public int insertSelective(Book record) {
            return bookMapper.insertSelective(record);
        }
    
        @Override
        public Book selectByPrimaryKey(Integer bid) {
            return bookMapper.selectByPrimaryKey(bid);
        }
    
        @Override
        public int updateByPrimaryKeySelective(Book record) {
            return updateByPrimaryKeySelective(record);
        }
    
        @Override
        public int updateByPrimaryKey(Book record) {
            return bookMapper.updateByPrimaryKey(record);
        }
    
        @Override
        public List<Map> aaaa(Map map, PageBean pageBean) {
            return bookMapper.aaaa(map);
        }
    
        @Override
        public List<Map> listPager(Map map, PageBean pageBean) {
            return bookMapper.aaaa(map);
        }
    }

    SpringBaseTest.java:

    package com.liuwenwu;
    
    import com.liuwenwu.model.Book;
    import com.liuwenwu.util.PageBean;
    import org.junit.Before;
    import org.junit.runner.RunWith;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-24 12:04
     */
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations={"classpath:applicationContext.xml"})
    public class SpringBaseTest {
        protected Book book;
        protected PageBean pageBean;
    
    
        @Before
        public void init(){
            book =new Book();
            pageBean =new PageBean();
        }
    
    }

    测试:

    package com.liuwenwu.service.impl;
    
    import com.liuwenwu.SpringBaseTest;
    import com.liuwenwu.model.Book;
    import com.liuwenwu.service.BookService;
    import com.liuwenwu.util.StringUtil;
    import org.junit.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import static org.junit.Assert.*;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-24 19:28
     */
    public class BookServiceImplTest extends SpringBaseTest {
    
    
        @Autowired
        private BookService bookService;
    
    
    
    
        @Test
        public void insert() {
            book.setBid(43);
            book.setBname("嘤嘤嘤");
            book.setPrice(200.0);
            this.bookService.insert(book);
        }
    
        @Test
        public void selectByPrimaryKey() {
            Book book = this.bookService.selectByPrimaryKey(43);
            System.out.println(book);
        }
       
    }

     Aop整合pagehelper插件 

    注意:记得开动态代理

    使用AOP编程解决分页代码重复的问题

       @Around("execution(* *..*Service.*pager(..))")

       public Object invoke(ProceedingJoinPoint args)

    语法结构:execution(方法修饰符  方法返回值  方法所属类 匹配方法名 (  方法中的形参表 )  方法申明抛出的异常  )

    "*"  :代表一个任意类型的参数;

    “..”:代表零个或多个任意类型的参数。

    PagerAspect

    package com.liuwenwu;
    
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import com.liuwenwu.util.PageBean;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.springframework.stereotype.Component;
    
    import java.util.List;
    
    /**
     * @author LWW
     * @site www.lww.com
     * @company
     * @create 2019-09-24 20:10
     * 处理符合* *..*Service.*pager(..)这个方法,只要调用这个方法,就能达到分页的效果
     * PageHelper.start()
     * 调用目标方法之前
     * 处理结果集
     * .*Pager(map,pagebean)
     * .*Pager(map,banme)
     */
    
    @Component
    @Aspect
    public class PagerAspect {
        @Around("execution(* *..*Service.*Pager(..))")
        public Object invoke(ProceedingJoinPoint args) throws Throwable {
            Object[] params = args.getArgs();
            PageBean pageBean = null;
            for (Object param : params) {
                if(param instanceof PageBean){
                    pageBean = (PageBean)param;
                    break;
                }
            }
    
            if(pageBean != null && pageBean.isPagination())
                PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
    
            Object list = args.proceed(params);
    
            if(null != pageBean && pageBean.isPagination()){
                PageInfo pageInfo = new PageInfo((List) list);
                pageBean.setTotal(pageInfo.getTotal()+"");
            }
            return list;
        }
    
    }

    BookMapper.java:

    List<Map> aaaa(Map map);

    BookMapper.xml:

      <select id="aaaa" resultType="java.util.Map" parameterType="java.util.Map">
        select * from t_mvc_book
        <where>
          <if test="null != bname and bname !=''">
            and bname like #{bname}
          </if>
        </where>
      </select>
    BookService:
        List<Map> aaaa(Map map, PageBean pageBean);
    
        List<Map> listPager(Map map, PageBean pageBean);

    BookServiceImpl:

        @Override
        public List<Map> aaaa(Map map, PageBean pageBean) {
            return bookMapper.aaaa(map);
        }
    
        @Override
        public List<Map> listPager(Map map, PageBean pageBean) {
            return bookMapper.aaaa(map);
        }

    Junit测试:

        @Test
        public void aaaa() {
            Map map =new HashMap();
            map.put("bname", StringUtil.toLikeStr("圣墟"));
            List<Map> aaaa = this.bookService.aaaa(map, pageBean);
            for (Map m : aaaa) {
                System.out.println(m);
            }
        }
    
        @Test
        public void listPager() {
            Map map =new HashMap();
            map.put("bname", StringUtil.toLikeStr("圣墟"));
            pageBean.setPage(3);
            List<Map> bbbb = this.bookService.listPager(map,pageBean);
            for (Map m : bbbb) {
                System.out.println(m);
            }
    
        }

    无分页效果:

    分页效果10条:

  • 相关阅读:
    FZU 2112 并查集、欧拉通路
    HDU 5686 斐波那契数列、Java求大数
    Codeforces 675C Money Transfers 思维题
    HDU 5687 字典树插入查找删除
    HDU 1532 最大流模板题
    HDU 5384 字典树、AC自动机
    山科第三届校赛总结
    HDU 2222 AC自动机模板题
    HDU 3911 线段树区间合并、异或取反操作
    CodeForces 615B Longtail Hedgehog
  • 原文地址:https://www.cnblogs.com/liuwenwu9527/p/11581937.html
Copyright © 2011-2022 走看看