zoukankan      html  css  js  c++  java
  • Springboot & Mybatis 构建restful 服务

    Springboot & Mybatis 构建restful 服务一

    1 前置条件

    • jdk测试:java -version

    • maven测试:命令行之行mvn -v

    • eclipse及maven插件

    2 Springboot

    1)创建maven项目:

    eclipse:new -> project -> maven project

     选择:Create a simple project(skip archetype selection)

    (假设项目名为com.serena.AccountBalance)

    2)修改pom:

          <!-- 新增 -->
          <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.4.1.RELEASE</version>
          </parent> 
          <dependencies>
            <!-- 新增spring boot依赖 -->
            <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
          </dependencies>

    3)下载数据库驱动包(此例使用的是 Oracle 数据库,由于 Oracle 版权问题,所以需下载驱动jar包):

    去 Oracle 官网下载 jdbc驱动ojdbc6-1.0.1.jar

    在终端执行下列命令
        mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=1.0.1 -Dpackaging=jar -Dfile=ojdbc6.jar

    在eclipse中选中当前工程

    maven -> update project...

    4)在项目目录下分别创建:

    (此例中为:main/java/com/serena)

     
        — controller      //接口层
        — servcie           //业务层
            — impl
        — mapper          //数据操作层
        — entity            //数据持久化层

    5)在项目目录下新建启动类 App.java:

    (此例中为:main/java/com/serena)

        import org.springframework.boot.SpringApplication;
        import org.springframework.boot.autoconfigure.SpringBootApplication;   
        @SpringBootApplication
        public class App {
            public static void main(String[] args) {
                SpringApplication.run(App.class, args);
            }
        }
     

    6)代码:编写controller和service代码

    创建service/ISY.java,内容如下:

    package com.serena.service;
    import java.util.List;
    import com.serena.entity.SettleAccount;
    public interface ISY {
    
    
        // 通过账户 id(主键)查找账户
        SettleAccount selectByAccountCode(String accountCode);
        // 查找所有账户
        List<SettleAccount> selectAccounts();
    }

    创建 controller/SY.java,内容如下:

    package com.serena.controller;
    import java.util.List;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    import com.serena.entity.SettleAccount;
    import com.serena.service.ISY;
    @RestController
    public class SY {
        @Autowired
        private ISY iSY;
    // 通过用户 id 来查找用户余额
    // 使用 get 请求传递参数
        @RequestMapping(value="/account/{accountCode}",method = RequestMethod.GET)
        public SettleAccount selectByAccountCode(@PathVariable("accountCode")String accountCode){
        SettleAccount settleAccount  = iSY.selectByAccountCode(accountCode);
                return settleAccount;
        } 
      // 查找所有 account 的余额
        @RequestMapping(value="/accounts",method = RequestMethod.GET)
        public List<SettleAccount> selectAccounts(){
            List<SettleAccount> list = null;
            list = iSY.selectAccounts();
            return list;
        }
    }
     

    编写service/impl/SYService.java

    package com.serena.service.impl;
    import java.util.List;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import com.serena.entity.SettleAccount;
    import com.serena.mapper.SettleAccountMapper;
    import com.serena.service.ISY;
    @Service
    public class SYService implements ISY{
        @Autowired
        private SettleAccountMapper settleAccountMapper;
        @Override
        public SettleAccount selectByAccountCode(String accountCode) {
            SettleAccount settleAccount = null;
            settleAccount = settleAccountMapper.selectByPrimaryKey(accountCode);
            return settleAccount;
        } 
        @Override
        public List<SettleAccount> selectAccounts() {
            List<SettleAccount> list = null;
            list = settleAccountMapper.selectAccounts();
            return list;
        }
    }

    3 Mybatis generator

    1)修改pom:

    新增依赖

        <!-- Spring Boot 集成MyBatis -->
         <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.1.1</version>
        </dependency>
    <!-- 实体映射 -->
        <dependency>
            <groupId>com.datastax.cassandra</groupId>
            <artifactId>cassandra-driver-mapping</artifactId>
        </dependency>
       <!-- mysql 数据库连接 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        
      <!-- oracle 数据库连接 -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>1.0.1</version>
            <scope>runtime</scope>
        </dependency>
     
    新增自动生成 mapper 和 entity 插件 plugin
       <!-- mybatis generator 插件 -->
            <plugin> 
                <groupId>org.mybatis.generator</groupId> 
                <artifactId>mybatis-generator-maven-plugin</artifactId> 
                <version>1.3.5</version> 
                <configuration>  
                    <verbose>true</verbose>  
                    <overwrite>true</overwrite>  
                </configuration>  
            </plugin> 
     

    2)创建配置文件: src/main/resources/generatorConfig.xml

    中文标注的地方需自定义!!!

     
    <!DOCTYPE generatorConfiguration 
      PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
      "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    <generatorConfiguration>
        <classPathEntry location="安装的 Oracle 驱动包的仓库jar文件位置" />
                <context id="OracleTables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
         <jdbcConnection driverClass="驱动类"
            connectionURL="数据库URL地址"
            userId="用户名"        password="密码">
        </jdbcConnection>
      <javaTypeResolver>
         <property name="forceBigDecimals" value="false"/>
      </javaTypeResolver>
      <javaModelGenerator targetPackage="com.serena.entity" targetProject="src/main/java">
          <property name="enableSubPackages" value="false"/>
          <property name="trimStrings" value="true"/>
      </javaModelGenerator>
      <sqlMapGenerator targetPackage="com.serena.mapper" targetProject="src/main/java">
           <property name="enableSubPackages" value="false"/>
      </sqlMapGenerator>
      <javaClientGenerator type="XMLMAPPER" targetPackage="com.serena.mapper" targetProject="src/main/java">
        <property name="enableSubPackages" value="false"/>
      </javaClientGenerator>
      <!-- 例: 查询的表名:SETTLEACCOUNT
               自定义的实体类名称:SettleAccount
            -->
      <table  tableName="SETTLEACCOUNT" domainObjectName="自定义的实体类名称"  enableCountByExample="false" enableSelectByExample="false" enableUpdateByExample="false" enableDeleteByExample="false">
      </table>
    </context>
    </generatorConfiguration>
     

    3) 执行:maven build: mybatis-generator:generate

    4. Mybatis

    1) 在所有mapper类中的接口声明前增加 @Mapper

    添加@Mapper

    @Mapper
    public interface SettleAccountMapper {
      //some code
    }

    2)删除entity 里SettleAccount多余的属性和 setter,getter 方法,只保留 ACCOUNTCODE, CUSTOMERCODE, ACCOUNTNAME, SMSNUM

    3)在SettleAccountMapper.xml中执行下列操作:

    // 添加
    <select id="selectAccounts"  resultMap="BaseResultMap">
        select 
        <include refid="Base_Column_List" />
        from SETTLEACCOUNT
      </select>
    // 修改 id为BaseResultMap的resultMap
     <resultMap id="BaseResultMap" type="com.serena.entity.SettleAccount">
        <id column="ACCOUNTCODE" jdbcType="VARCHAR" property="accountcode" />
        <result column="CUSTOMERCODE" jdbcType="VARCHAR" property="customercode" />
        <result column="ACCOUNTNAME" jdbcType="VARCHAR" property="accountname" />
        <result column="SMSNUM" jdbcType="DECIMAL" property="smsnum" />
      </resultMap>
    // 修改id 为Base_Column_List的 sql
     <sql id="Base_Column_List">
        ACCOUNTCODE, CUSTOMERCODE, ACCOUNTNAME,  SMSNUM
      </sql>
     

    修改SettleAccountMapper:

    package com.serena.mapper;
    import java.util.List;
    import org.apache.ibatis.annotations.Mapper;
    import com.serena.entity.SettleAccount;
    @Mapper
    public interface SettleAccountMapper {
        // 抽象方法:通过账户编号查找账户
        SettleAccount selectByPrimaryKey(String accountcode);
        // 抽象方法:查找所有账户
        List<SettleAccount> selectAccounts();
    }

    4)编译:maven build: clean compile

    5)创建配置文件:src/main/java/resources/application.properties

    // 服务器端口号
        server.port=8101
    //  mapper映射地址
        mybatis.mapper-locations=classpath*:mapper/*Mapper.xml
    //  数据库URL地址
     spring.datasource.url=
    // 登录数据库的用户名
        spring.datasource.username=
    //  密码
        spring.datasource.password=
     

    6)运行启动类App.class

    7)在iterm 中输入如下指令测试:

     http localhost:8101/accounts
      
     http localhost:8101/account/U0001
     
  • 相关阅读:
    Codeforces Round #657 (Div. 2) 题解
    洛谷 P2765 魔术球问题 (最小路径覆盖 or 贪心)
    洛谷 P2472 蜥蜴 (最大流)
    Codeforces Round #665 (Div. 2) 题解
    洛谷 P1231 教辅的组成 (三分图匹配,裂点)
    USACO5.4 奶牛的电信Telecowmunication (最小割,割边转割点)
    有关网络流的一些板子题
    洛谷 p2756 飞行员配对方案问题(最大流,二分图匹配)
    JSON.toJSONString中序列化空字符串遇到的坑
    关于mysql自动备份的小方法
  • 原文地址:https://www.cnblogs.com/serena25/p/6515346.html
Copyright © 2011-2022 走看看