前言
本人項目多用Java語言開發(fā),且IDE主要是IntelliJ IDEA2019.1 x64版本,由于在IDEA工具的使用上,本人有時也是一知半解,遇到問題就百度搜索,然而網(wǎng)上很多資料參差不齊,故想著將自己遇到的問題整理總結(jié),希望能對你有所幫助,我盡量會整理詳細些,如有不懂或描述不恰當?shù)牡胤剑埩粞灾赋?,謝謝~
問題一:Maven項目JDK與本機JDK版本不一致
描述:本人安裝的JDK版本是1.8,每當我創(chuàng)建一個Maven工程后,項目的默認JDK版本默認是1.5,而且每次我重新打開項目或者掛著項目沒操作后,即使更改為JDK1.8也會被默默改回JDK1.5。出現(xiàn)問題如下:


下面介紹兩種方法解決,第一種比較笨且為臨時的,第二種較好。
解決方法一:修改項目JDK版本
- 打開Settings窗口(快捷鍵
Ctrl + Alt + S):File -> Settings

修改JDK版本為8
- 打開Project Structure窗口(快捷鍵
Ctrl + Alt + Shift + S):File -> Project Structure


逐一修改每個項目的JDK版本,Apply即可解決
存在不足:臨時性修改,下一次重啟有可能會出現(xiàn)版本不一致問題
解決方法二:pom文件約定JDK版本
在pom.xml文件中添加如下插件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<properties>
<java.version>1.8</java.version>
<maven.version>3.5.1</maven.version>
</properties>
<build>
<plugins>
<!--調(diào)整modules的language level為8-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
<project></project>都貼上了,免得你不知道放在哪里,嘿嘿
如果你的項目是多個模塊,那么只需要在主模塊中添加
可以一勞永逸解決
問題二:如何生成IDEA自定義代碼模板
例如上一個問題中的代碼塊,如果每次使用時,都需要找到對應(yīng)的代碼進行復(fù)制粘貼,很繁瑣,好在IDEA提供了一個Live Templates功能,能夠自定義代碼模板,只需要輸入相應(yīng)的快捷方式就能自動生成,類似于psvmIDEA就能自動填充為public static void main(String[] args)一樣。
- 打開Settings窗口(快捷鍵
Ctrl + Alt + S):File -> Settings

- 創(chuàng)建一個Template Group

- 在新建的Template Group下創(chuàng)建Live Template

- 創(chuàng)建Live Template

其中
maven_jdk_setting類似于psvm,設(shè)置作用在xml文件中
- 效果圖如下:


個人常用模板
-
熱部署插件(devtools_build)
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins> </build> -
JPA對應(yīng)的persistence_xml的文件格式(jpa_persistence_xml)
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> <!--需要配置persistence-unit節(jié)點 持久化單元: name:持久化單元名稱 transaction-type:事務(wù)管理的方式 JTA:分布式事務(wù)管理 RESOURCE_LOCAL:本地事務(wù)管理 --> <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL"> <!--jpa的實現(xiàn)方式 --> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <!--可選配置:配置jpa實現(xiàn)方的配置信息--> <properties> <!-- 數(shù)據(jù)庫信息 用戶名,javax.persistence.jdbc.user 密碼, javax.persistence.jdbc.password 驅(qū)動, javax.persistence.jdbc.driver 數(shù)據(jù)庫地址 javax.persistence.jdbc.url --> <property name="javax.persistence.jdbc.user" value="root"/> <property name="javax.persistence.jdbc.password" value="root"/> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///db1"/> <!--配置jpa實現(xiàn)方(hibernate)的配置信息 顯示sql : false|true 自動創(chuàng)建數(shù)據(jù)庫表 : hibernate.hbm2ddl.auto create : 程序運行時創(chuàng)建數(shù)據(jù)庫表(如果有表,先刪除表再創(chuàng)建) update :程序運行時創(chuàng)建表(如果有表,不會創(chuàng)建表) none :不會創(chuàng)建表 --> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.hbm2ddl.auto" value="update" /> </properties> </persistence-unit> </persistence> -
mybatis的application配置yml文件(mybatis_applicaiton_yml)
# 數(shù)據(jù)源配置 spring: datasource: # url username password TODO url: jdbc:mysql://localhost:3306/數(shù)據(jù)庫名稱?useUnicode=true&characterEncoding=utf8 username: 用戶名 password: 密碼 driver-class-name: com.mysql.jdbc.Driver # MyBatis配置 mybatis: # type-aliases-package mapper-locations TODO type-aliases-package: cn.tod.mybatisgenerator.entity mapper-locations: classpath:cn.tod.mybatisgenerator.mapper/*.xml # mybatis.config = mybatis 配置?件名稱 # mybatis.mapperLocations = mapper xml ?件地址 # # mybatis.typeAliasesPackage = 實體類包路徑 # mybatis.typeHandlersPackage = type handlers 處理器包路徑 # mybatis.check-config-location = 檢查 mybatis 配置是否存在,?般命名為 mybatis-config.xml # mybatis.executorType = 執(zhí)?模式。默認是 SIMPLE -
mybatis對應(yīng)的config_xml文件格式(mybatis_config_xml)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置 mybatis 的環(huán)境 --> <environments default="mysql"> <!-- 配置 mysql 的環(huán)境 --> <environment id="mysql"> <!-- 配置事務(wù)的類型 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置連接數(shù)據(jù)庫的信息:用的是數(shù)據(jù)源(連接池) --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/數(shù)據(jù)庫名"/> <property name="username" value="用戶名"/> <property name="password" value="密碼"/> </dataSource> </environment> </environments> <!-- 告知 mybatis 映射配置的位置:基于xml配置 --> <mappers> <mapper resource="cn/tod/mybatis/dao/IUserDao.xml"/> <!-- <mapper class="cn.tod.mybatis.dao.IUserDao"/> --> </mappers> </configuration> -
mybatis對應(yīng)的config_xml文件配置(基于注解配置)(mybatis_config_xml_annotation)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置 mybatis 的環(huán)境 --> <environments default="mysql"> <!-- 配置 mysql 的環(huán)境 --> <environment id="mysql"> <!-- 配置事務(wù)的類型 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置連接數(shù)據(jù)庫的信息:用的是數(shù)據(jù)源(連接池) --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/數(shù)據(jù)庫名"/> <property name="username" value="用戶名"/> <property name="password" value="密碼"/> </dataSource> </environment> </environments> <!-- 告知 mybatis 映射配置的位置:基于注解配置,需要刪除對應(yīng)的mapper.xml --> <mappers> <mapper class="cn.tod.mybatis.dao.IUserDao"/> </mappers> </configuration> -
mybatis對應(yīng)的mapper_xml文件格式(mybatis_mapper_xml)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.tod.mybatis.dao.IUserDao"> <select id="findAll" resultType="cn.tod.mybatis.entity.User"> SELECT * FROM user </select> </mapper> -
mybatisgenerator的pom插件(mybatisgenerator_build_pom_xml)
<build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.2</version> <configuration> <!--其中g(shù)eneratorConfig.xml的位置,大家根據(jù)實際情況自行調(diào)整--> <configurationFile>src/main/resources/MybatisGeneratorConfig.xml</configurationFile> <verbose>true</verbose> <overwrite>true</overwrite> </configuration> <executions> <execution> <id>Generate MyBatis Artifacts</id> <goals> <goal>generate</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> </dependencies> </plugin> </plugins> </build> -
mybatisgenerator的配置文件(mybatisgenerator_config_xml)
<?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"> <!-- 手動導(dǎo)入mybatis-generator-config_1_0.dtd--> <!--因為生成過程中需要連接db,所以第3行指定了驅(qū)動jar包的位置--> <generatorConfiguration> <!-- <classPathEntry--> <!-- location="C:/Oracle/Middleware/wlserver_10.3/server/lib/ojdbc6.jar"/>--> <context id="my" targetRuntime="MyBatis3"> <!-- 指定生成的java文件的編碼,沒有直接生成到項目時中文可能會亂碼 --> <property name="javaFileEncoding" value="UTF-8"/> <commentGenerator> <property name="suppressDate" value="false"/> <property name="suppressAllComments" value="true"/> </commentGenerator> <!-- oracle配置 --> <!-- <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@***:1521:orcl" userId="***" password="***"> 針對oracle數(shù)據(jù)庫 <property name="remarksReporting" value="true"></property> </jdbcConnection> --> <!-- mysql配置 --> <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/數(shù)據(jù)庫名?useUnicode=true" userId="用戶名" password="密碼"><!--connectionURL userId password TODO--> <!-- 針對mysql數(shù)據(jù)庫 --> <property name="useInformationSchema" value="true"></property> </jdbcConnection> <javaTypeResolver> <property name="forceBigDecimals" value="false" /> </javaTypeResolver> <!--19-33行指定生成“entity實體類、mybatis映射xml文件、mapper接口”的具體位置--> <javaModelGenerator targetPackage="cn.tod.mybatisgenerator.entity" targetProject="src\main\java"><!--targetPackage TODO--> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <sqlMapGenerator targetPackage="cn.tod.mybatisgenerator.mapper" targetProject="src\main\resources"><!--targetPackage TODO--> <property name="enableSubPackages" value="true"/> </sqlMapGenerator> <javaClientGenerator targetPackage="cn.tod.mybatisgenerator.mapper" targetProject="src\main\java" type="XMLMAPPER"><!--targetPackage TODO--> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!--40-46行為具體要生成的表,如果有多個表,復(fù)制這一段,改下表名即可--> <table tableName="userinfo" domainObjectName="UserInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"><!--tableName domainObjectName TODO--> </table> </context> </generatorConfiguration> -
spring基于aop的bean_xml文件格式(spring_aop_bean_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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- bean 標簽:用于配置讓 spring 創(chuàng)建對象,并且存入 ioc 容器之中 id 屬性:對象的唯一標識。 class 屬性:指定要創(chuàng)建對象的全限定類名 --> <!-- 配置 service --> <bean id="accountService" class="cn.tod.spring.aop.xml.service.impl.AccountServiceImpl"> <property name="IAccountDao" ref="accountDao"/> </bean> <!-- 配置 dao --> <bean id="accountDao" class="cn.tod.spring.aop.xml.dao.impl.AccountDaoImpl"> <property name="queryRunner" ref="queryRunner"/> <property name="connectionUtils" ref="connectionUtils"/> </bean> <bean id="queryRunner" class="org.apache.commons.dbutils.QueryRunner" scope="prototype"/> <bean id="connectionUtils" class="cn.tod.spring.aop.xml.utils.ConnectionUtils"> <property name="threadLocal" ref="threadLocal"/> <property name="dataSource" ref="dataSource"/> </bean> <bean id="threadLocal" class="java.lang.ThreadLocal"/> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/db1"/> <property name="user" value="root"/> <property name="password" value="root"/> </bean> <!-- 配置通知 --> <bean id="transactionManager" class="cn.tod.spring.aop.xml.utils.TransactionManager"> <property name="connectionUtils" ref="connectionUtils"/> </bean> <!-- 使用aop:config聲明aop配置 --> <aop:config> <!-- <!– 使用aop:aspect配置切面 –>--> <!-- <aop:aspect id="transactionAdvice" ref="transactionManager">--> <!-- <!– 使用aop:before配置前置通知 –>--> <!-- <aop:before method="beginTransaction" pointcut-ref="pc1"/>--> <!-- <!– 使用aop:pointcut配置切入點表達式 –>--> <!-- <!– * 代表任意 返回值、包、類名、數(shù)據(jù)類型, ..可以表示參數(shù)列表有無參數(shù)均可、當前包及其子包 –>--> <!--<!– <aop:pointcut id="pc1" expression="execution(–>--> <!--<!– public void cn.tod.spring.aop.xml.service.impl.AccountServiceImpl.transfer(–>--> <!--<!– java.lang.String, java.lang.String, java.lang.Double–>--> <!--<!– )–>--> <!--<!– )"/>–>--> <!-- <aop:pointcut id="pc1" expression="execution(--> <!-- * cn.tod.spring.aop.xml.service.impl.*.*(..)--> <!-- )"/>--> <!-- <!– 使用aop:after-returning配置后置通知 –>--> <!-- <aop:after-returning method="commit" pointcut-ref="pc1"/>--> <!-- <!– 使用aop:after-throwing配置異常通知 –>--> <!-- <aop:after-throwing method="rollback" pointcut-ref="pc1"/>--> <!-- <!– 使用aop:after配置最終通知 –>--> <!-- <aop:after method="release" pointcut-ref="pc1"/>--> <!-- </aop:aspect>--> <aop:pointcut id="pc1" expression="execution( * cn.tod.spring.aop.xml.service.impl.*.*(..) )"/> <aop:aspect id="transactionAdvice" ref="transactionManager"> <!-- 配置環(huán)繞通知 --> <aop:around method="transactionAround" pointcut-ref="pc1"/> </aop:aspect> </aop:config> </beans> -
spring對應(yīng)的注解方式的bean_xml文件格式(spring_bean_annotation_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" 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"> <!-- 告知 spring 創(chuàng)建容器時要掃描的包 --> <context:component-scan base-package="cn.tod.spring.annotation"/> <!-- 配置數(shù)據(jù)源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/db1"/> <property name="user" value="root"/> <property name="password" value="root"/> </bean> <!-- 配置JdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> </beans> -
spring對應(yīng)的bean_xml文件格式(spring_bean_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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- bean 標簽:用于配置讓 spring 創(chuàng)建對象,并且存入 ioc 容器之中 id 屬性:對象的唯一標識。 class 屬性:指定要創(chuàng)建對象的全限定類名 --> <!-- 配置 service --> <bean id="accountService" class="cn.tod.spring.service.impl.AccountServiceImpl"> <!-- 給數(shù)組注入數(shù)據(jù) --> <property name="myStrs"> <set> <value>AAA</value> <value>bbb</value> <value>CCC</value> </set> </property> <!-- 注入 list 集合數(shù)據(jù) --> <property name="myList"> <array> <value>DDD</value> <value>eee</value> <value>FFF</value> </array> </property> <!-- 注入 set 集合數(shù)據(jù) --> <property name="mySet"> <list> <value>GGG</value> <value>GGG</value> <value>hhh</value> </list> </property> <!-- 注入 Map 數(shù)據(jù) --> <property name="myMap"> <props> <prop key="AAA">aaa</prop> <prop key="BBB">bbb</prop> </props> </property> <!-- 注入 properties 數(shù)據(jù) --> <property name="myProps"> <map> <entry key="AAA" value="aaa"/> <entry key="BBB"> <value>bbb</value> </entry> </map> </property> </bean> <!-- 配置 dao --> <bean id="accountDao" class="cn.tod.spring.dao.impl.AccountDaoImpl"> <!-- <constructor-arg name="name" value="Tod"/>--> <!-- <constructor-arg name="age" value="25"/>--> <!-- <constructor-arg name="birthday" ref="yesterday"/>--> <property name="name" value="Jim"/> <property name="age" value="24"/> <property name="birthday" ref="yesterday"/> </bean> <bean id="yesterday" class="java.util.Date"/> </beans>
問題三:如何使用IDEA自動生成實體類的serialVersionUID
有時候我們?yōu)榱朔乐箤嶓w類在存儲中被人為修改,需要實現(xiàn)實體類的序列化機制,實現(xiàn)Serializable接口,同時定義一個唯一的SerializeUID,代碼如下:
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 2588932577248604962L;
}
serialVersionUID可以自己定義,也可以有IDEA自動生成,只要保證唯一即可
下面講一下如何使用IDEA自動生成serialVersionUID
- 打開Settings窗口(快捷鍵
Ctrl + Alt + S):File -> Settings

搜索serialize,選擇實現(xiàn)Serializable接口的類沒有定以serialVersionUID會有警告提示
- 生成實體類的serialVersionUID

在實體類名稱上按下
Alt + Enter快捷鍵
