1.  创建工程

  ¤  idea使用web模版创建新工程

  ¤  在main目录下创建java和resources两个目录,设置java目录为Sources,设置resources目录为Resources

    ♦  java目录下创建com.feiyan包结构

    ♦  com.feiyan下创建config  controller  dao  domain  service.impl目录

  ¤  在main两级创建test目录,test下创建java目录,设置java目录为Test

  ¤  pom.xml文件添加所需要的所有坐标和插件

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring-webmvc</artifactId>

      <version>5.2.10.RELEASE</version>

    </dependency>

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring-jdbc</artifactId>

      <version>5.2.10.RELEASE</version>

    </dependency>

    <dependency>

      <groupId>org.springframework</groupId>

      <artifactId>spring-test</artifactId>

      <version>5.2.10.RELEASE</version>

    </dependency>

    <dependency>

      <groupId>org.mybatis</groupId>

      <artifactId>mybatis</artifactId>

      <version>3.5.6</version>

    </dependency>

    <dependency>

      <groupId>org.mybatis</groupId>

      <artifactId>mybatis-spring</artifactId>

      <version>1.3.0</version>

    </dependency>

    <dependency>

      <groupId>mysql</groupId>

      <artifactId>mysql-connector-java</artifactId>

      <version>5.1.47</version>

    </dependency>

    <dependency>

      <groupId>com.alibaba</groupId>

      <artifactId>druid</artifactId>

      <version>1.1.16</version>

    </dependency>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>4.12</version>

      <scope>test</scope>

    </dependency>

    <dependency>

      <groupId>javax.servclet</groupId>

      <artifactId>javax.servclet-api</artifactId>

      <version>3.1.0</version>

      <scope>provcided</scope>

    </dependency>

    <dependency>

      <groupId>com.fasterxml.jackson.core</groupId>

      <artifactId>jackson-databind</artifactId>

      <version>2.9.0</version>

    </dependency>

    <plugin>

      <groupId>org.apache.tomcat.maven</groupId>

      <artifactId>tomcat7-maven-plugin</artifactId>

      <version>2.1</version>

      <configuration>

        <port>80</port>

        <path></path>

      </configuration>

    </plugin>

2.  SSM整合

  ¤  Spring

    ♦  SpringConfig:com.feiyan.config包下创建Springconfig类

      @Configuration

      @ComponentScan({"com.feiyan.service"})

      @PropertySources("jdbc.properties")

      @Import({"JdbcConfig.class", "MybatisConfig.class"})

      @EnableTransactionManagement

      public class SpringConfig

      {

      }

  ¤  MyBatisc

    ♦  MybatisConfig:com.feiyan.config包下创建MybatisConfig类

      public class MybatisConfig

      {

        @Bean

        public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource)

        {

          SqlSessionFactoryBean factoryBean = new SqlSessionFactiryBean();

          factoryBean.setDataSource(dataSource);

          factoryBean.setTypeAliasesPackage("com.feiyan.doMain");

          return factoryBean;

        }

        @Bean

        public MapperScannerConfigurer mapperScannerConfigurer()

        {

          MapperScannerConfigurer msc = new MapperScannerConfigurer();

          msc.setBasePackage("com.feiyan.dao");

          return msc;

        }

      }

    ♦  JdbcConfig:com.feiyan.config包下创建JdbcConfig类

      public class JdbcConfig

      {

        @Value("${jdbc.driver}")

        private String driver;

        @Value("${jdbc.url}")

        private String url;

        @Value("${jdbc.username}")

        private String username;

        @Value("${jdbc.password}")

        private String password;

        @Bean

        public DataSource dataSource()

        {

          DruidDataSource dataSource = new DuridDataSource();

          dataSource.setDriveClassName(driver);

          dataSource.setUrl(url);

          dataSource.setUsername(username);

          dataSource.setPassword(password);

          return dataSource;

        }

        @Bean

        public PlatformTransactionManager transactionManager(DataSource dataSource)

        {

          DataSourceTransactionManager ds = new DataSourceTransactionManager();

          ds.setDataSource(dataSource);

          return ds;

        }

      }

    ♦  jdbc.properties:resources目录下创建jdbc.properties文件

      jdbc.driver=com.mysql.jdbc.Drive

      jdbc.url=jdbc:mysql://localhost:3306/ssm_db

      jdbc.username=root

      jdbc.password=root

  ¤  SpringMVC

    ♦  ServletConfig:com.feiyan.config包下创建ServletConfig类

      public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer

      {

        protected Class<?>[] getRootConfigClasses()

        {

          return new Class[]{SpringConfig.class};

        }

        protected Class<?>[] getServletConfigClasses()

        {

          return new Class[]{SpringMvcConfig.class};

        }

        protected String getServletMappings()

        {

          return new String[]{"/"};

        }

      }

    ♦  SpringMvcConfig:com.feiyan.config包下创建SpringMvcConfig类

      @Configuration

      @ComponentScan("com.feiyan.controller");

      @EnableWebMvc

      public class SpringMvcConfig

      {

      }

3.  功能模块

  ¤  表与实体类

    ♦  表自行创建

    ♦  Book:com.feiyan.domain包下创建Book类

      public class Book

      {

        private Integer id;

        public Integer getId(){return id;}

        public void setId(Integer id){this.id = id;}

        private String type;

        public String getType(){return type;}

        public void setType(String type){this.type = type;}

        private String name;

        public String getName(){return name;}

        public void setName(String name){this.name= name;}

        private String description;

        public String getDescription(){return description;}

        public void setDescription(String description){this.description = description;}

      }

  ¤  dao(接口+自动代理):com.feiyan.dao包下创建BookDao接口

    public interface BookDao

    {

      @Insert("insert into tbl_book values(null, #{type}, #{name}, #{description})")  第一种写法

      @Insert("insert into tbl_book (type, name, description) values(#{type}, #{name}, #{description})")  第二种写法

      public void save(Book book);

      @Update("update tbl_book set type = #{type}, name = #{name}, description = #{description} where id = #{id}")

      public void update(Book book);

      @Delete("delete from tbl_book where id = #{id}")

      public void delete(Integer id);

      @Select("select * from tbl_book where id = #{id}")

      public Book getById(Integer id);

      @Select("select * from tbl_book")

      public List<Book> getAll();

    }

  ¤  service(接口+实现类)

    ♦  BookService:com.feiyan.service包下创建BookService接口

      @Transactional

      public interface BookService

      {

        public boolean save(Book book);

        public boolean update(Book book);

        public boolean delete(Integer id);

        public Book getById(Integer id);

        public List<Book> getAll();

      }

    ♦  BookServiceImpl:com.feiyan.service.impl包下创建BookServiceImpl实现类

      @Service

      public class BookServiceImpl implements BookService

      {

        @Autowired

        private BookDao bookDao;

        public boolean save(Book book)

        {

          bookDao.save(book);

          retrun true;

        }

        public boolean update(Book book)

        {

          bookDao.update(book);

          retrun true;

        }

        public boolean delete(Integer id)

        {

          bookDao.delete(id);

          retrun true;

        }

        public Book getById(Integer id)

        {

          return bookDao.getById(id);

        }

        public List<Book> getAll()

        {

          return bookDao.getAll();

        }

      }

    ♦  业务层接口测试(整合JUint):test.java包下创建业务层测试类BookServiceTest类

      @RunWith(SpringJUnit4ClassRunner.class)

      @ContextConfiguration(classes = SpringConfig.class)

      public class BookServiceTest

      {

        @AutoWired

        private BookService bookService;

        @Test

        public void testGetById()

        {

          Book book = bookService.getById(1);

        }

      }

  ¤  controller

    ♦  BookController:com.feiyan.controller包下创建BookController类

      @RestController

      @ResuestMapping("/books")

      public class BookController

      {

        @Autowired

        private BookService bookService;

        @PostMapping

        public boolean save(@RequestBody Book book)

        {

          return bookService.save(book);

 

        }

        @PutMapping

        public boolean update(@RequestBody Book book)

        {

          return bookService.update(book);

        }

        @DeleteMapping("/{id}")

         public boolean delete(@PathVariable Integer id)

        {

          return bookService.delete(id);

        }

        @GetMapping("/{id}")

        public Book getById(@PathVariable Integer id)

        {

          return bookService.getById(id);

        }

        @GetMapping

        public List<Book> getAll()

        {

          return bookService.getAll();

        }

      }

    ♦  表现层接口测试(PostMan)