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
     
  • 相关阅读:
    PAT Basic 1077 互评成绩计算 (20 分)
    PAT Basic 1055 集体照 (25 分)
    PAT Basic 1059 C语言竞赛 (20 分)
    PAT Basic 1072 开学寄语 (20 分)
    PAT Basic 1049 数列的片段和 (20 分)
    蓝桥杯BASIC-13 数列排序
    蓝桥杯入门——3.序列求和
    蓝桥杯入门——2.圆的面积
    蓝桥杯入门——1.Fibonacci数列
    树的总结(遍历,BST,AVL原型,堆,练习题)
  • 原文地址:https://www.cnblogs.com/serena25/p/6515346.html
Copyright © 2011-2022 走看看