当前位置:   article > 正文

spring boot + mybatis + maven 构建新工程_springboot mybatis maven

springboot mybatis maven

前言

        公司转型,新项目需要用java作为老员工,也只能转型了 ,最近开始重新捡起java 多年不碰了新构架新的开始。至少 jdbc hss  还会  学一下新框架 spring boot, mybatis 吧, maven 是真好用啊。

一.工程建立。

使用 Spring Initializr工具直接建立。

 springboot 依赖库 我选择Lombok ,DevTools,SpringWeb,MybatisFrameWork,MS SQL Server。等

Lombok 可以减少 beans  的 代码量。数据库持久层 用Mybatis 没用 Hibernate, 尝尝鲜, 电脑上装了MSSQLServer 就用这吧 懒得装mysql 了 而且说实话 sqlserver 确实比 mysql 效率高。数据量超过千万量级后 mysql 明显比不过 mssqlserver了 不知道是不是我 mysql 理解的不够透彻导致的。

三.框架目录结构

这里包括了 控制层controller,持久层pojo,dao层mapper,业务逻辑层service,通用工具utils

四.pom文件中添加依赖和插件。

添加一下 mybatis 的驱动依赖

  1. <!-- mybatis 驱动 -->
  2. <dependency>
  3. <groupId>org.mybatis</groupId>
  4. <artifactId>mybatis</artifactId>
  5. <version>3.5.9</version>
  6. </dependency>

既然使用了mybatis 那就直接添加 mybatis.generator 这个插件 可以自动生成相关映射文件。化繁为简吗,手撕代码很烦的。当然生成后可以加工美化一下。自动生成的代码有点冗长。

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.mybatis.generator</groupId>
  5. <artifactId>mybatis-generator-maven-plugin</artifactId>
  6. <version>1.3.5</version>
  7. <dependencies>
  8. <dependency>
  9. <groupId>com.microsoft.sqlserver</groupId>
  10. <artifactId>mssql-jdbc</artifactId>
  11. <version>10.2.1.jre8</version>
  12. </dependency>
  13. </dependencies>
  14. <!--指定配置文件位置-->
  15. <configuration>
  16. <configurationFile>./src/main/resources/generatorConfig.xml</configurationFile>
  17. <verbose>true</verbose>
  18. <overwrite>true</overwrite>
  19. </configuration>
  20. </plugin>
  21. </plugins>
  22. </build>

这里可以在configuration标签里指定一下 generator配置文件位置。否则无法使用插件

下面配置一下 generatorConfig.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration
  3. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5. <generatorConfiguration>
  6. <context id="MysqlTables" targetRuntime="MyBatis3" defaultModelType="flat">
  7. <!-- 生成的Java文件的编码 -->
  8. <property name="javaFileEncoding" value="UTF-8" />
  9. <!-- 格式化java代码 -->
  10. <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter" />
  11. <!-- 格式化XML代码 -->
  12. <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter" />
  13. <!--beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,例如:ORACLE使用双引号,MYSQL默认是`反引号; -->
  14. <property name="beginningDelimiter" value="`" />
  15. <property name="endingDelimiter" value="`" />
  16. <!-- lombok插件,減少生成代碼 -->
  17. <!-- 使用自带序列化插件 -->
  18. <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
  19. <!-- 注释 -->
  20. <commentGenerator>
  21. <property name="suppressDate" value="true" />
  22. <!-- 是否去除自动生成的注释 true:是 : false:否 -->
  23. <property name="suppressAllComments" value="true" />
  24. </commentGenerator>
  25. <!-- 数据库链接配置 -->
  26. <jdbcConnection driverClass="com.microsoft.sqlserver.jdbc.SQLServerDriver"
  27. connectionURL="jdbc:sqlserver://192.168.8.66:1433;DatabaseName=IotCard;integratedSecurity=false;encrypt=false;trustServerCertificate=false"
  28. userId="sa" password="******">
  29. </jdbcConnection>
  30. <!-- 实体类生成未知 -->
  31. <javaModelGenerator
  32. targetPackage="com.cliot.pojo" targetProject="./src/main/java/">
  33. <property name="enableSubPackages" value="true" />
  34. <property name="trimStrings" value="true" />
  35. </javaModelGenerator>
  36. <!-- mapping文件生成位置 -->
  37. <sqlMapGenerator targetPackage="mapper" targetProject="./src/main/resources/">
  38. <property name="enableSubPackages" value="true" />
  39. </sqlMapGenerator>
  40. <!-- dao接口生成位置 -->
  41. <javaClientGenerator type="XMLMAPPER"
  42. targetPackage="com.cliot.mapper" targetProject="./src/main/java/">
  43. <property name="enableSubPackages" value="true" />
  44. </javaClientGenerator>
  45. <!-- 表配置 tableName 表名 domainObjectName java类名,首字母必须大写,否则报字符串越界错误 -->
  46. <table tableName="cardinfo" domainObjectName="CardInfo"
  47. enableCountByExample="false" enableUpdateByExample="false"
  48. enableDeleteByExample="false" enableSelectByExample="false"
  49. selectByExampleQueryId="false">
  50. </table>
  51. <table tableName="card_pooled_monthly_usage" domainObjectName="CardPooledMonthlyUsage"
  52. enableCountByExample="false" enableUpdateByExample="false"
  53. enableDeleteByExample="false" enableSelectByExample="false"
  54. selectByExampleQueryId="false">
  55. </table>
  56. <table tableName="card_pooled_12month_usage" domainObjectName="CardPooled12MonthUsage"
  57. enableCountByExample="false" enableUpdateByExample="false"
  58. enableDeleteByExample="false" enableSelectByExample="false"
  59. selectByExampleQueryId="false">
  60. </table>
  61. </context>
  62. </generatorConfiguration>

配置一下数据库驱动,连接字符串 用户名密码等,配置一下 mapper dao接口生成路径,mapper.xml文件生成路劲 pojo 映射文件生成路劲等 ,根据自己的时间需求配置把。

然后配置一下 数据库表的信息,完成

五. 生成mybatis映射文件。

点击生成文件 

 

 啊文件生成了

我们来看看

不错不错方便 真想。 看看代码吧

 不看了 反正能用就行,为了避坑 我们还是需要对代码加工一下。就是加几个注释。

 

  1. package com.cliot.mapper;
  2. import com.cliot.pojo.CardInfo;
  3. import org.apache.ibatis.annotations.Mapper;
  4. import org.springframework.stereotype.Repository;
  5. @Repository
  6. @Mapper
  7. public interface CardInfoMapper {
  8. int deleteByPrimaryKey(Long cardId);
  9. int insert(CardInfo record);
  10. int insertSelective(CardInfo record);
  11. CardInfo selectByPrimaryKey(Long cardId);
  12. int updateByPrimaryKeySelective(CardInfo record);
  13. int updateByPrimaryKey(CardInfo record);
  14. }

 在 mapper接口文件上加入 @Repository 和@Mapper  可以让springboot方便扫描到映射文件可以自动装载。踩过的坑还是要提一嘴。

哦 还有要在启动函数上加注释  ,@Mapperscan(“******”) ,可以让容器自动注入 mapper免得后面报红 说找不到 映射文件。

 六.配置springboot 配置文件

不多说了直接上文件了。大家都看得懂。

  1. spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
  2. spring.datasource.username=sa
  3. spring.datasource.password=******
  4. spring.datasource.url=jdbc:sqlserver://192.168.8.66:1433;DatabaseName=IotCard;integratedSecurity=false;encrypt=false;trustServerCertificate=false
  5. spring.datasource.hikari.minimum-idle=5
  6. spring.datasource.hikari.maximum-pool-size=60
  7. spring.datasource.hikari.auto-commit=true
  8. spring.datasource.hikari.idle-timeout=30000
  9. spring.datasource.hikari.pool-name= DatebookHikariCP
  10. spring.datasource.hikari.max-lifetime=900000
  11. spring.datasource.hikari.connection-timeout= 15000
  12. spring.datasource.hikari.connection-test-query: SELECT 1
  13. mybatis.mapper-locations= classpath:mapper/*.xml
  14. mybatis.type-aliases-package=com.cliot.pojo

这里设置了 数据源参数,连接池参数 ,持久层mapper的存放地址 映射文件pojo的映射文件等

懂得都懂 不懂得 度娘一下都懂了 就不一一赘述了。

七.测试是否成功

建立测试的controller类

  1. package com.cliot.controller;
  2. import com.cliot.pojo.CardPooledMonthlyUsage;
  3. import com.cliot.service.TestService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.ResponseBody;
  8. import java.util.List;
  9. @Controller
  10. public class TestController {
  11. @Autowired
  12. TestService testService;
  13. @RequestMapping("/")
  14. @ResponseBody
  15. public List<CardPooledMonthlyUsage> test() throws Exception {
  16. List<CardPooledMonthlyUsage> cards=testService.queryCard();
  17. return cards;
  18. }
  19. }

 建立service类处理业务逻辑

  1. package com.cliot.service;
  2. import com.cliot.mapper.CardPooledMonthlyUsageMapper;
  3. import com.cliot.pojo.CardPooledMonthlyUsage;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6. import java.util.List;
  7. @Service
  8. public class TestService {
  9. @Autowired
  10. CardPooledMonthlyUsageMapper monthlyUsageMapper;
  11. public List<CardPooledMonthlyUsage> queryCard() {
  12. return monthlyUsageMapper.queryAll();
  13. }
  14. }

修改 dao层 mapper文件 增加测试 的sql 处理语句。

 

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.cliot.mapper.CardPooledMonthlyUsageMapper">
  4. <resultMap id="BaseResultMap" type="com.cliot.pojo.CardPooledMonthlyUsage">
  5. <id column="usage_id" jdbcType="BIGINT" property="usageId" />
  6. <result column="card_id" jdbcType="BIGINT" property="cardId" />
  7. <result column="iccid" jdbcType="NVARCHAR" property="iccid" />
  8. <result column="used_flow" jdbcType="DOUBLE" property="usedFlow" />
  9. <result column="usage_month" jdbcType="NVARCHAR" property="usageMonth" />
  10. <result column="DESC_CNT" jdbcType="NVARCHAR" property="descCnt" />
  11. </resultMap>
  12. <sql id="Base_Column_List">
  13. usage_id, card_id, iccid, used_flow, usage_month, DESC_CNT
  14. </sql>
  15. <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
  16. select
  17. <include refid="Base_Column_List" />
  18. from card_pooled_monthly_usage
  19. where usage_id = #{usageId,jdbcType=BIGINT}
  20. </select>
  21. <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
  22. delete from card_pooled_monthly_usage
  23. where usage_id = #{usageId,jdbcType=BIGINT}
  24. </delete>
  25. <insert id="insert" parameterType="com.cliot.pojo.CardPooledMonthlyUsage">
  26. insert into card_pooled_monthly_usage (usage_id, card_id, iccid,
  27. used_flow, usage_month, DESC_CNT
  28. )
  29. values (#{usageId,jdbcType=BIGINT}, #{cardId,jdbcType=BIGINT}, #{iccid,jdbcType=NVARCHAR},
  30. #{usedFlow,jdbcType=DOUBLE}, #{usageMonth,jdbcType=NVARCHAR}, #{descCnt,jdbcType=NVARCHAR}
  31. )
  32. </insert>
  33. <insert id="insertSelective" parameterType="com.cliot.pojo.CardPooledMonthlyUsage">
  34. insert into card_pooled_monthly_usage
  35. <trim prefix="(" suffix=")" suffixOverrides=",">
  36. <if test="usageId != null">
  37. usage_id,
  38. </if>
  39. <if test="cardId != null">
  40. card_id,
  41. </if>
  42. <if test="iccid != null">
  43. iccid,
  44. </if>
  45. <if test="usedFlow != null">
  46. used_flow,
  47. </if>
  48. <if test="usageMonth != null">
  49. usage_month,
  50. </if>
  51. <if test="descCnt != null">
  52. DESC_CNT,
  53. </if>
  54. </trim>
  55. <trim prefix="values (" suffix=")" suffixOverrides=",">
  56. <if test="usageId != null">
  57. #{usageId,jdbcType=BIGINT},
  58. </if>
  59. <if test="cardId != null">
  60. #{cardId,jdbcType=BIGINT},
  61. </if>
  62. <if test="iccid != null">
  63. #{iccid,jdbcType=NVARCHAR},
  64. </if>
  65. <if test="usedFlow != null">
  66. #{usedFlow,jdbcType=DOUBLE},
  67. </if>
  68. <if test="usageMonth != null">
  69. #{usageMonth,jdbcType=NVARCHAR},
  70. </if>
  71. <if test="descCnt != null">
  72. #{descCnt,jdbcType=NVARCHAR},
  73. </if>
  74. </trim>
  75. </insert>
  76. <update id="updateByPrimaryKeySelective" parameterType="com.cliot.pojo.CardPooledMonthlyUsage">
  77. update card_pooled_monthly_usage
  78. <set>
  79. <if test="cardId != null">
  80. card_id = #{cardId,jdbcType=BIGINT},
  81. </if>
  82. <if test="iccid != null">
  83. iccid = #{iccid,jdbcType=NVARCHAR},
  84. </if>
  85. <if test="usedFlow != null">
  86. used_flow = #{usedFlow,jdbcType=DOUBLE},
  87. </if>
  88. <if test="usageMonth != null">
  89. usage_month = #{usageMonth,jdbcType=NVARCHAR},
  90. </if>
  91. <if test="descCnt != null">
  92. DESC_CNT = #{descCnt,jdbcType=NVARCHAR},
  93. </if>
  94. </set>
  95. where usage_id = #{usageId,jdbcType=BIGINT}
  96. </update>
  97. <update id="updateByPrimaryKey" parameterType="com.cliot.pojo.CardPooledMonthlyUsage">
  98. update card_pooled_monthly_usage
  99. set card_id = #{cardId,jdbcType=BIGINT},
  100. iccid = #{iccid,jdbcType=NVARCHAR},
  101. used_flow = #{usedFlow,jdbcType=DOUBLE},
  102. usage_month = #{usageMonth,jdbcType=NVARCHAR},
  103. DESC_CNT = #{descCnt,jdbcType=NVARCHAR}
  104. where usage_id = #{usageId,jdbcType=BIGINT}
  105. </update>
  106. <update id="updateTest">
  107. BEGIN TRANSACTION
  108. select iccid from card_pooled_monthly_usage WITH (UPDLOCK, READPAST) where usage_month = #{usageMonth} and iccid=#{iccid}
  109. update card_pooled_monthly_usage set DESC_CNT='2' where usage_month = #{usageMonth} and iccid=#{iccid}
  110. COMMIT TRANSACTION
  111. </update>
  112. <select id="queryAll" resultMap="BaseResultMap">
  113. select distinct top 10 iccid,min(usage_month) as usage_month from card_pooled_monthly_usage where usage_month >'202107' group by iccid
  114. </select>
  115. </mapper>

自动生成的代码好多啊,乱七八糟的 难受。我们只看最后的 queryAll 这个标记。 要添加否则mapper接口映射不到会报错。

好了 构架做完了 可以开始测试了

运行启动程序

程序启动 运行在 8080端口 我们访问一下看

 运行成功 ,工程建立完成。

总结

        新构架 在磕磕绊绊中基本入门了。时间有限就不深入研究了。等有空了去看看构架的文档吧,反正常用的功能都能用了 可以开始开发 web 项目了。开工咯。遇到坑在学校总结吧。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/875380
推荐阅读
相关标签
  

闽ICP备14008679号