最近小編有點閑,突發奇想想重溫一下mybatis,然后在腦海中搜索了一下,納尼,居然不太會用了,想到這里都是淚啊!!現在我所呆的的公司使用的是springboot+hebinate,編程都是使用的JPA語義化編程,都用不上mybatis了,時隔近8個月的時間沒用它,它竟然想溜,然而畢竟它曾經來過,我怎么能輕易讓它走,於是決定自己搭建一個,重溫一下mybatis的使用,不過幸好的是,還真讓我搭建成功了,廢話不多說,上流程。
代碼已經同步gitHub上:https://github.com/Slience-zae/mybatis-no-one.git
1、創建項目
在這里使用的是IDEA,首先就是搭建項目的老一套流程,file -> new -> project ->maven,一路next,按圖填寫完后直接next就好
2.添加依賴
找到pom文件,將下面的依賴加入到pom文件中,這個依賴就相當於我們在搭建普通項目時使用的jar包
<!-- 用來設置版本號 --> <properties> <srping.version>4.0.2.RELEASE</srping.version> <mybatis.version>3.2.8</mybatis.version> <slf4j.version>1.7.12</slf4j.version> <log4j.version>1.2.17</log4j.version> <druid.version>1.0.9</druid.version> </properties> <!-- 用到的jar包 --> <dependencies> <!-- 單元測試 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <!-- 表示開發的時候引入,發布的時候不會加載此包 --> <scope>test</scope> </dependency> <!-- spring框架包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${srping.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${srping.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${srping.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${srping.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${srping.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${srping.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${srping.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${srping.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${srping.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${srping.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${srping.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${srping.version}</version> </dependency> <!-- mybatis框架包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> </dependency> <!--mybatisPlus--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.1</version> </dependency> <!-- 數據庫驅動包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.35</version> </dependency> <!-- 導入dbcp的jar包,用來在applicationContext.xml中配置數據庫 --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <!-- jstl標簽類 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- log --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!--josn全家桶--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.2</version> </dependency> <!-- 連接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!--lombok,配合lombok使用,很好用功能很強大的插件--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.4</version> </dependency> <!-- 上傳下載文件--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <!--servlet依賴包--> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> </dependencies> <build> <!-- java編譯插件,如果maven的設置里配置好jdk版本就不用 --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!--mybatis自動逆向生成實體,mapper,xml的插件--> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> </plugin> </plugins> </build>
注意:這些依賴對於一個mybatis的基礎項目不一定都需要,只是因為為了開發時方便,我把我認為的幾個重要的也加上了,復制上這段依賴后,可能你代碼會報紅,這是因為你本地的maven倉庫沒有查到這些版本的依賴,它會自動下載,靜靜等候一段時間,等這些依賴包都不報紅時,基本就可以了,怎么確認我們導入這些依賴成功了呢,我們可以在下面這個地方看一下。
3.添加配置文件
配置文件都統一放在resources目錄下,關於配置文件的內容解釋請看代碼注釋
配置文件一:jdbc.properties(數據庫連接配置文件)
#數據庫驅動 driver=com.mysql.jdbc.Driver #數據庫連接地址(product是我的數據庫名,這里換成你自己的) url=jdbc:mysql://localhost:3306/product?characterEncoding=utf8&useSSL=false #數據庫的用戶名 username=root #數據庫的密碼 password=root #定義初始連接數 initialSize=0 #定義最大連接數 maxActive=20 #定義最大空閑 maxIdle=20 #定義最小空閑 minIdle=1 #定義最長等待時間 maxWait=60000
配置文件二:log4j.properties(日志配置文件,可以不配置)
#日志輸出級別 log4j.rootLogger=debug,stdout,D,E #設置stdout的日志輸出控制台 log4j.appender.stdout=org.apache.log4j.ConsoleAppender #輸出日志到控制台的方式,默認為System.out log4j.appender.stdout.Target = System.out #設置使用靈活布局 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout #靈活定義輸出格式 log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} -[%p] method:[%c (%rms)] - %m%n
配置文件三:spring-mvc.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:mvc="http://www.springframework.org/schema/mvc" 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/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!-- 掃描注解,這樣com.perfect包下的文件都能被掃描 ,換成你自己的包路徑--> <context:component-scan base-package="com.perfect"/> <!-- 開啟SpringMVC注解模式 --> <mvc:annotation-driven/> <!-- 靜態資源默認servlet配置 --> <mvc:default-servlet-handler/> <!-- 配置返回視圖的路徑,以及識別后綴是jsp文件 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
配置文件四:applicationContext.xml(Spring的全局控制配置文件,最重要)
<?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:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 加載properties文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:jdbc.properties"/> <!-- <property name="locations" value="classpath:log4j.properties"/> --> </bean> <!-- 配置數據源 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </bean> <!-- mybatis和spring完美整合,不需要mybatis的配置映射文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 掃描model包 --> <property name="typeAliasesPackage" value="com.perfect"/> <!-- 掃描sql配置文件:mapper需要的xml文件--> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean> <!-- Mapper動態代理開發,掃描dao接口包--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 注入sqlSessionFactory --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <!-- 給出需要掃描Dao接口包 ,換成你自己的--> <property name="basePackage" value="com.perfect.moudle.system.dao"/> </bean> <!-- 事務管理 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!--數據庫連接池--> <property name="dataSource" ref="dataSource"/> </bean> <!--配置文件上傳--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize"> <!-- 最大上傳大小:5M --> <value>5242880</value> </property> </bean> </beans>
配置文件五:generatorConfig.xml(mybatis逆向生成代碼配置文件,需要個人修改最多,按注釋要求進行修改)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <!-- 第二種mybatis逆向生成xml配置 --> <generatorConfiguration> <!-- 需要指明數據庫連接器的絕對路徑 --> <classPathEntry location="F:\learning\jar\mysql-connector-java-5.1.38.jar" /> <context id="sqlserverTables" targetRuntime="MyBatis3"> <!-- 生成的pojo,將implements Serializable--> <plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin> <commentGenerator> <!-- 是否去除自動生成的注釋 true:是 : false:否 --> <property name="suppressAllComments" value="true" /> </commentGenerator> <!-- 數據庫鏈接URL、用戶名、密碼 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/product" userId="root" password="root"> </jdbcConnection> <!-- 默認false,把JDBC DECIMAL 和 NUMERIC 類型解析為 Integer true,把JDBC DECIMAL 和 NUMERIC 類型解析為java.math.BigDecimal --> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!-- 生成model模型,對應的包路徑,以及文件存放路徑(targetProject),targetProject可以指定具體的路徑,如./src/main/java, 也可以使用“MAVEN”來自動生成,這樣生成的代碼會在target/generatord-source目錄下 --> <!--<javaModelGenerator targetPackage="com.joey.mybaties.test.pojo" targetProject="MAVEN">--> <javaModelGenerator targetPackage="com.perfect.moudle.system.entity" targetProject="./src/main/java"> <property name="enableSubPackages" value="true"/> <!-- 從數據庫返回的值被清理前后的空格 --> <property name="trimStrings" value="true" /> </javaModelGenerator> <!--對應的mapper.xml文件 --> <sqlMapGenerator targetPackage="mapper" targetProject="./src/main/resources"> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <!-- 對應的Mapper接口類文件 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.perfect.moudle.system.dao" targetProject="./src/main/java"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!-- 列出要生成代碼的所有表,這里配置的是不生成Example文件 --> <table tableName="t_scf_risk_warn_detail" domainObjectName="RiskWarnDetail" enableCountByExample="true" enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true" selectByExampleQueryId="true" > <property name="useActualColumnNames" value="true"/> </table> </context> </generatorConfiguration>
注意:有些時候直接將配置文件復制上后,會出現第一行結尾的‘?’有紅色提示的現象,多見於applicationContext.xml和spring_mvc.xml文件,這時候我們只需要把提示紅的部分刪去然后再重新加上,一般就可以解決了。我遇到這個現象時是這樣解決的,如果解決不了那只好百度了,百度滅百分之90以上的bug。
4、調整項目結構
點擊file --> Project Structure -->modules
① F:\old project\mybatis-no-one\src\main\webapp (注意:scr之前是你的項目路徑,不用變,只需要復制scr以后的內容)
② F:\old project\mybatis-no-one\src\main\webapp\WEB-INF\web.xml(同上,只需要修改src之后的路徑)
現在你的項目結構大體只這樣的:
5.配置tomcat,啟動項目
點擊Run,選擇彈出列表的第一個或者第二個,啟動一下就好了,此時應該會跳到頁面index.jsp,這是因為在spring_mvc中這樣配置了,如果啟動報錯,可能有以下幾種原因:
1.數據庫配置錯誤,沒有正確添加自己的數據庫以及用戶名和密碼,導致連接失敗。
2.applicationContext.xml配置有問題,掃描包的位置不對,注入失敗錯誤應該此刻不會出現,因為還未寫代碼,還沒喲創建controller,service,dao,bean等,但是后來可能啟動會出現這個問題。
3.包沖突,依賴添加重復,刪去多余依賴包即可(目前我搭建的這個項目沒有存在這個問題)
6.添加數據庫備用表,逆向生成實體,example以及mapper,mapper.xml等
在這里我簡單提供幾個數據庫生成的sql,也可以不使用我的而使用你自己的,僅供參考
/* Navicat MySQL Data Transfer Source Server : xcrdb_dev Source Server Version : 50726 Source Host : 39.100.124.144:3306 Source Database : xcrdb_dev Target Server Type : MYSQL Target Server Version : 50726 File Encoding : 65001 Date: 2020-03-23 15:25:14 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for t_sys_user -- ---------------------------- DROP TABLE IF EXISTS `t_sys_user`; CREATE TABLE `t_sys_user` ( `id` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '用戶id', `name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '姓名', `sex` int(11) DEFAULT NULL COMMENT '性別', `id_type` int(11) DEFAULT NULL COMMENT '身份證明類型', `id_no` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '身份證明id', `email` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '郵箱地址', `mobile` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '手機號碼', `type` int(11) DEFAULT NULL COMMENT '類型', `status` int(11) DEFAULT NULL COMMENT '狀態', `del_flag` int(11) DEFAULT NULL COMMENT '刪除狀態', `avatar` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '頭像地址', `create_by` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '創建者ID', `create_time` datetime DEFAULT NULL COMMENT '創建時間', `update_by` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '更新者ID', `update_time` datetime DEFAULT NULL COMMENT '更新時間', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用戶表';
/* Navicat MySQL Data Transfer Source Server : mysql5.7 Source Server Version : 50717 Source Host : localhost:3306 Source Database : product Target Server Type : MYSQL Target Server Version : 50717 File Encoding : 65001 Date: 2020-03-31 16:01:08 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for t_scf_risk_warn_info -- ---------------------------- DROP TABLE IF EXISTS `t_scf_risk_warn_info`; CREATE TABLE `t_scf_risk_warn_info` ( `id` varchar(36) COLLATE utf8_bin NOT NULL COMMENT 'id', `warn_code` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '預警代碼', `rule_type` char(1) COLLATE utf8_bin DEFAULT NULL COMMENT '規則分類', `rule_name` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '規則名稱', `check_type` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '檢驗方式', `logical_symbol` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '邏輯符', `threshold` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '閾值', `warn_result` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '預警結果', `rule_condition` text COLLATE utf8_bin COMMENT '規則條件', `del_flag` int(11) DEFAULT NULL COMMENT '刪除狀態', `create_by` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '創建者ID', `create_time` datetime DEFAULT NULL COMMENT '創建時間', `update_by` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '更新者ID', `update_time` datetime DEFAULT NULL COMMENT '更新時間', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='預警設置'; -- ---------------------------- -- Records of t_scf_risk_warn_info -- ---------------------------- INSERT INTO `t_scf_risk_warn_info` VALUES ('252887583070097408', '1001', '0', '企業經營狀態異常', '0', '', '', '0', 0x53454C45435420646F6D61696E5F636F646520646F6D61696E436F64652C6E616D652C756E6E6F20636F7270556E6E6F2046524F4D20745F7379735F6F72672057484552452064656C5F666C61673D3020414E44207374617475733D3120414E4420756E6E6F20494E202853454C45435420756E6E6F2046524F4D20745F63725F756E69745F696E666F2057484552452064656C5F666C61673D3020414E4420535542535452494E4728726F6C655F69642C332C32293D2730312720414E442028737461747573204E4F5420494E2028312C3229204F5220737461747573204953204E554C4C2929, '0', 'zcl_pt', '2020-03-19 10:17:19', 'zcl_pt', '2020-03-20 09:22:27'); INSERT INTO `t_scf_risk_warn_info` VALUES ('252889804868423680', '1002', '0', '機構狀態異常', '0', ' ', ' ', '0', 0x53454C4543542069642C6E616D652C6372656469745F636F646520637265646974436F64652C756E6E6F20636F7270556E6E6F2C756E69745F73746174757320756E69745374617475732046524F4D20745F63725F756E69745F696E666F2057484552452064656C5F666C61673D3020414E442028756E69745F737461747573204E4F5420494E2028312C3229204F5220756E69745F737461747573204953204E554C4C29, '1', 'zcl_pt', '2020-03-19 10:26:09', 'zcl_pt', '2020-03-19 16:17:56'); INSERT INTO `t_scf_risk_warn_info` VALUES ('252890358726266880', '1003', '1', '項目授信狀態失效', '0', ' ', ' ', '0', 0x73656C65637420612E636F72705F756E6E6F20636F7270556E6E6F2066726F6D20745F7363665F6974656D5F6C696D69745F6974656D5F696E666F2061206C656674206A6F696E20745F7379735F6F726720620A206F6E20612E636F72705F756E6E6F203D20622E756E6E6F20776865726520612E617574685F737461747573203D203320616E6420622E737461747573203D203120616E6420612E64656C5F666C6167203D3020616E6420622E64656C5F666C6167203D2030, '0', 'zcl_pt', '2020-03-19 10:28:21', 'mpb_pt', '2020-03-19 15:25:29'); INSERT INTO `t_scf_risk_warn_info` VALUES ('252890493082406912', '1004', '2', '項目狀態失效', '0', ' ', ' ', '0', 0x73656C65637420612E636F72655F756E69745F756E6E6F20636F7270556E6E6F2066726F6D20745F7363665F6974656D5F646174612061206C656674206A6F696E20745F7379735F6F726720620A206F6E20612E636F72655F756E69745F756E6E6F203D20622E756E6E6F20776865726520612E737461747573203D203220616E6420622E737461747573203D203120616E6420612E64656C5F666C6167203D3020616E6420622E64656C5F666C6167203D2030, '0', 'zcl_pt', '2020-03-19 10:28:53', 'mpb_pt', '2020-03-19 15:27:21'); INSERT INTO `t_scf_risk_warn_info` VALUES ('252890667049553920', '1005', '2', '上下游企業關聯狀態失效', '0', ' ', ' ', '0', 0x73656C65637420612E636F72705F756E6E6F20636F7270556E6E6F2066726F6D20745F7363665F6974656D5F73636D2061206C656674206A6F696E20745F7379735F6F726720620A206F6E20612E636F72705F756E6E6F203D20622E756E6E6F20776865726520612E617574685F737461747573203D203320616E6420622E737461747573203D203120616E6420612E64656C5F666C6167203D3020616E6420622E64656C5F666C6167203D2030, '0', 'zcl_pt', '2020-03-19 10:29:35', 'mpb_pt', '2020-03-19 15:28:49'); INSERT INTO `t_scf_risk_warn_info` VALUES ('252890897203597312', '1006', '2', '保證金余額小於保證金比例*已用額度', '0', ' ', ' ', '0', 0x73656C65637420662E6974656D4E6F2C662E636F7270556E6E6F2066726F6D20280A2073656C656374202828706169645F6C696D6974202D2072657475726E65645F6C696D697429202A206465706F7369745F6D696E5F726174696F20292061732072654C696D6974202C20612E6974656D5F6E6F206173206974656D4E6F202C622E636F72655F756E69745F756E6E6F20617320636F7270556E6E6F202C202873656C65637420637572616D742066726F6D20745F7863725F61636E745F696E666F2077686572652061636E746E6F203D20636F6E63617428622E636F72655F756E69745F756E6E6F2C273036272C535542535452494E4728612E6974656D5F6E6F2C31342C34292C273032272920616E6420737461747573203D3120616E64202064656C5F666C6167203D2030202920617320636F6E202066726F6D20745F7363665F6974656D5F6C696D69745F6974656D5F696E666F2061200A4C454654204A4F494E20745F7363665F6974656D5F64617461206220206F6E20612E6974656D5F6E6F203D20622E6974656D5F6E6F0A6C656674206A6F696E20745F7379735F6F72672063206F6E20632E756E6E6F203D20622E636F72655F756E69745F756E6E6F0A77686572652020612E64656C5F666C6167203D203020616E6420622E64656C5F666C6167203D203020616E6420632E737461747573203D20310A2920662020776865726520662E636F6E203C2020662E72654C696D6974, '0', 'zcl_pt', '2020-03-19 10:30:29', 'lxf_pt', '2020-03-19 15:33:12'); INSERT INTO `t_scf_risk_warn_info` VALUES ('252891086945521664', '1007', '4', '企業>7天逾期筆數', '1', '大於', '5', '0', 0x73656C656374206D2E636F7270556E6E6F2066726F6D0A202873656C65637420636F72705F756E6E6F20415320636F7270556E6E6F2C636F756E7428696429206173206E756D2066726F6D20745F7363665F61737365745F6C6F616E5F64656269745F64657461696C2061207768657265204441544544494646284E4F5728292C412E706572696F645F646174655F726570617961626C6529203E203720616E6420612E64656C5F666C6167203D203020616E6420612E7061795F6261636B5F73746174757320696E20282732272C273327292067726F757020627920636F72705F756E6E6F290A2020206D0A2020206A6F696E20745F7379735F6F7267206E206F6E206D2E636F7270556E6E6F203D206E2E756E6E6F0A20202020207768657265206D2E6E756D3E3520616E64206E2E737461747573203D203120616E64206E2E64656C5F666C6167203D2030, '0', 'zcl_pt', '2020-03-19 10:31:15', 'zcl_pt', '2020-03-19 15:38:41'); INSERT INTO `t_scf_risk_warn_info` VALUES ('252891256865165312', '1008', '4', '企業>30天逾期筆數', '1', '大於', '10', '0', 0x73656C656374206D2E636F7270556E6E6F2066726F6D202873656C65637420636F72705F756E6E6F20415320636F7270556E6E6F2C636F756E7428696429206173206E756D2066726F6D20745F7363665F61737365745F6C6F616E5F64656269745F64657461696C2061207768657265204441544544494646284E4F5728292C412E706572696F645F646174655F726570617961626C6529203E20333020616E6420612E64656C5F666C6167203D203020616E6420612E7061795F6261636B5F73746174757320696E20282732272C273327292067726F757020627920636F72705F756E6E6F29206D0A202020206A6F696E20745F7379735F6F7267206E206F6E206D2E636F7270556E6E6F203D206E2E756E6E6F0A202020207768657265206D2E6E756D3E313020616E64206E2E737461747573203D203120616E64206E2E64656C5F666C6167203D2030, '0', 'zcl_pt', '2020-03-19 10:31:55', 'zcl_pt', '2020-03-19 15:35:21'); INSERT INTO `t_scf_risk_warn_info` VALUES ('252891452009353216', '1009', '4', '企業在平台最大逾期天數', '1', '大於', '30', '0', 0x73656C656374206D2E636F7270556E6E6F2066726F6D202873656C65637420612E636F72705F756E6E6F20415320636F7270556E6E6F2C6D617828612E6F7665726475655F6461797329206173206F766572647565446179732066726F6D20745F7363665F61737365745F6C6F616E5F64656269745F64657461696C206120776865726520612E64656C5F666C6167203D203020616E6420612E7061795F6261636B5F73746174757320696E20282732272C273327292067726F757020627920636F72705F756E6E6F29206D0A202020202020202020202020202020202020202020202020206A6F696E20745F7379735F6F7267206E206F6E206D2E636F7270556E6E6F203D206E2E756E6E6F0A7768657265206D2E6F766572647565446179733E333020616E64206E2E737461747573203D203120616E64206E2E64656C5F666C6167203D2030, '0', 'zcl_pt', '2020-03-19 10:32:42', 'zcl_pt', '2020-03-19 15:36:14'); INSERT INTO `t_scf_risk_warn_info` VALUES ('252891821187796992', '1010', '4', '企業在平台近一年超7天的逾期次數', '1', '大於', '10', '0', 0x73656C656374206D2E636F7270556E6E6F2066726F6D202873656C65637420636F72705F756E6E6F20415320636F7270556E6E6F2C636F756E7428696429206173206E756D2066726F6D20745F7363665F61737365745F6C6F616E5F64656269745F64657461696C206120776865726520612E6F7665726475655F64617973203E203720616E6420612E64656C5F666C6167203D203020616E64204441544544494646284355524441544528292C612E6372656174655F74696D6529203E203336352067726F757020627920636F72705F756E6E6F29206D0A202020202020202020202020202020202020202020202020206A6F696E20745F7379735F6F7267206E206F6E206D2E636F7270556E6E6F203D206E2E756E6E6F0A7768657265206D2E6E756D3E313020616E64206E2E737461747573203D203120616E64206E2E64656C5F666C6167203D2030, '0', 'zcl_pt', '2020-03-19 10:34:10', 'zcl_pt', '2020-03-19 15:37:25'); INSERT INTO `t_scf_risk_warn_info` VALUES ('252893151579082752', '1011', '5', '其他', '0', ' ', ' ', '0', 0x31, '1', 'zcl_pt', '2020-03-19 10:39:27', 'dew_pt', '2020-03-19 13:41:01'); INSERT INTO `t_scf_risk_warn_info` VALUES ('252981844763480064', '1012', '1', '123123123123123', '0', '', '', '0', 0x3132333132, '1', 'zhaoxulin_pt', '2020-03-19 16:31:53', 'zhaoxulin_pt', '2020-03-19 16:33:11'); INSERT INTO `t_scf_risk_warn_info` VALUES ('252984707636006912', '1013', '1', '0989098', '0', '', '', '1', 0x39373938393830, '1', 'zhaoxulin_pt', '2020-03-19 16:43:16', 'zhaoxulin_pt', '2020-03-19 16:44:09');
/* Navicat MySQL Data Transfer Source Server : mysql5.7 Source Server Version : 50717 Source Host : localhost:3306 Source Database : product Target Server Type : MYSQL Target Server Version : 50717 File Encoding : 65001 Date: 2020-03-31 16:01:24 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for t_scf_risk_flow_info -- ---------------------------- DROP TABLE IF EXISTS `t_scf_risk_flow_info`; CREATE TABLE `t_scf_risk_flow_info` ( `id` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '主鍵', `prod_id` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '產品場景代碼', `rule_setting` text COLLATE utf8_bin COMMENT '規則配置', `status` int(1) DEFAULT NULL COMMENT '狀態', `del_flag` int(11) DEFAULT NULL COMMENT '刪除狀態', `create_by` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '創建者ID', `create_time` datetime DEFAULT NULL COMMENT '創建時間', `update_by` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '更新者ID', `update_time` datetime DEFAULT NULL COMMENT '更新時間', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='場景風控'; -- ---------------------------- -- Records of t_scf_risk_flow_info -- ---------------------------- INSERT INTO `t_scf_risk_flow_info` VALUES ('252893256814170112', 'logistics', 0x3235323839303335383732363236363838302C3235323839303439333038323430363931322C3235323839303636373034393535333932302C3235323839303839373230333539373331322C3235323839313038363934353532313636342C3235323839313235363836353136353331322C3235323839313435323030393335333231362C3235323839313832313138373739363939322C323532383837353833303730303937343038, '0', '0', 'zcl_pt', '2020-03-19 10:39:52', 'zcl_pt', '2020-03-20 09:31:36'); INSERT INTO `t_scf_risk_flow_info` VALUES ('252893367371829248', 'receivable', 0x323532383933313531353739303832373532, '1', '1', 'zcl_pt', '2020-03-19 10:40:18', 'dew_pt', '2020-03-19 13:23:40'); INSERT INTO `t_scf_risk_flow_info` VALUES ('252893493666516992', 'prepayments', 0x323532383933313531353739303832373532, '1', '1', 'zcl_pt', '2020-03-19 10:40:48', 'dew_pt', '2020-03-19 13:23:44'); INSERT INTO `t_scf_risk_flow_info` VALUES ('252893632271486976', 'stock', 0x323532383933313531353739303832373532, '1', '1', 'zcl_pt', '2020-03-19 10:41:21', 'dew_pt', '2020-03-19 13:23:47'); INSERT INTO `t_scf_risk_flow_info` VALUES ('252934605668093952', 'liqloan', 0x3235323838373538333037303039373430382C323532383839383034383638343233363830, '1', '1', 'dew_pt', '2020-03-19 13:24:10', 'zcl_pt', '2020-03-19 14:42:39'); INSERT INTO `t_scf_risk_flow_info` VALUES ('252959403739713536', 'liqloan', 0x323532383837353833303730303937343038, '0', '0', 'dew_pt', '2020-03-19 15:02:43', 'zcl_pt', '2020-03-19 16:18:30');
修改generatorConfig.xml中的內容,指定數據庫表,生成位置等信息,點擊運行,就能生成對應的代碼文件了。
這個逆向生成只能一個表一個表的生成,多修改幾次配置文件,最終的項目結構應該是這樣的:
紅框圈起來的便是逆向生成的代碼了,注意啊,一個表只能逆向生成一次,連續點擊兩次會導致啟動報錯,如果想要重新生成就刪除之前的文件再執行逆向生成操作。
接下來我們就愉快的寫代碼了!!!!
7、編碼與測試
在這里我就打個樣,不把全部的編程來一遍了,關於mybatis的使用,自行可以學習一下。
在實體的同級目錄下,創建service,serviceImpl,controller三個包,然后再每個包下分別創建UserService,UserServiceImpl,UserController三個類,然后具體代碼走起。
1 package com.perfect.moudle.system.service; 2 3 import com.perfect.moudle.system.entity.User; 4 5 import java.util.List; 6 7 public interface UserService { 8 /** 9 * 保存/更新用戶 10 * @param user 11 */ 12 void saveUser(User user); 13 14 /** 15 * 刪除用戶 16 * @param id 17 * @return 18 */ 19 boolean deleteUser(String id); 20 21 /** 22 * 根據id查詢用戶的詳情 23 * @param id 24 * @return 25 */ 26 User selectById(String id); 27 28 /** 29 * 獲取用戶列表 30 * @return 31 */ 32 List<User> selectUserList(); 33 34 /** 35 * 根據用戶名模糊查詢 36 * @param name 37 * @return 38 */ 39 List<User> selectUserLikeName(String name); 40 }
package com.perfect.moudle.system.serviceimpl; import com.perfect.common.utils.IdWorker; import com.perfect.moudle.system.dao.UserMapper; import com.perfect.moudle.system.entity.User; import com.perfect.moudle.system.entity.UserExample; import com.perfect.moudle.system.service.UserService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.UUID; @Service @Transactional public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public void saveUser(User user) { if(user.getId()!=null && !"".equals(user.getId())){//更新 userMapper.updateByPrimaryKey(user); }else{//保存 User newUser = new User(); //將對象賦值給新對象 BeanUtils.copyProperties(user, newUser,"id","create_time" ,"create_by","update_time","update_by","del_flag"); userMapper.insertSelective(newUser); } } @Override public boolean deleteUser(String id) { User user = userMapper.selectByPrimaryKey(id); user.setDel_flag(1); int count = userMapper.updateByPrimaryKey(user); if(count!=0){ return true; }else{ return false; } } @Override public User selectById(String id){ return userMapper.selectByPrimaryKey(id); } @Override public List<User> selectUserList() { return userMapper.selectByExample(null); } @Override public List<User> selectUserLikeName(String name) { UserExample userExample = new UserExample(); UserExample.Criteria criteria = userExample.createCriteria(); criteria.andNameLike(name); return userMapper.selectByExample(userExample); } }
package com.perfect.moudle.system.controller; import com.perfect.common.utils.ResultUtil; import com.perfect.common.vo.Result; import com.perfect.moudle.system.entity.User; import com.perfect.moudle.system.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping(value = "/user") public class UserController { @Autowired private UserService userService; /** * 保存/更新用戶 * @param user * @return */ @RequestMapping(value = "/save",method = RequestMethod.POST) public Result saveUser(@RequestBody User user){ ResultUtil resultUtil = new ResultUtil(); userService.saveUser(user); return resultUtil.setSuccessMsg("保存成功"); } /** * 刪除用戶 * @param id * @return */ @RequestMapping(value = "/del",method = RequestMethod.GET) public Result delUser(@RequestParam(value = "id") String id){ boolean isOk = userService.deleteUser(id); if (isOk){ return new ResultUtil<>().setSuccessMsg("刪除成功"); }else { return new ResultUtil<>().setErrorMsg("刪除失敗,請檢查代碼"); } } /** * 獲取所有的用戶列表 * @return */ @RequestMapping(value = "/findUserList",method = RequestMethod.GET) public Result findUserList(){ return new ResultUtil<>().setData(userService.selectUserList()); } /** * 根據id 獲取用戶信息 * @param id * @return */ @RequestMapping(value = "/findById",method = RequestMethod.GET) public Result findById(@RequestParam String id){ return new ResultUtil<>().setData(userService.selectById(id)); } }
接下來啟動,用postman測試一下,一切都ok了。
若看完整代碼,請訪問gitHub:https://github.com/Slience-zae/mybatis-no-one.git
注:本篇博客皆為本人一字一句的敲打出來的,轉載請備注出處,如有問題,敬請批評。