java数据库常见问题
- 一 常见数据库语法
- 二 java程序
- springboot项目注解配置问题
- 1springboot项目启动类注解继承SpringBootServletInitializer 类目的
- 2springboot项目@MapperScan注解
- 3springboot项目@Mapper
- 4Mybatis映射文件路径classpath*与classpath区别
- 5Mybatis映射文件.xml 中判断注解
- 6Mybatis映射文件返回实体类映射或者返回实体类列表映射
- 7Mybatis映射文件返回Map映射或者返回List
- 8Mybatis映射文件接收map参数(查询)
- 9Mybatis映射文件接收实体类参数(添加修改)
- 10Mybatis映射文件返回实体类映射resultMap
- 11Mybatis映射文件新增判断参数
- springboot项目打包方式
- 三 IDEA与SVN
一 常见数据库语法
Mysql
1日期转换
date_format函数:
定义和用法
DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。
语法
DATE_FORMAT(date,format)
date 参数是合法的日期。format 规定日期/时间的输出格式。
STR_TO_DARE(date,format)将字符串转日期类型
可以使用的格式有:
格式 描述
%a 缩写星期名
%b 缩写月名
%c 月,数值
%D 带有英文前缀的月中的天
%d 月的天,数值(00-31)
%e 月的天,数值(0-31)
%f 微秒
%H 小时 (00-23)
%h 小时 (01-12)
%I 小时 (01-12)
%i 分钟,数值(00-59)
%j 年的天 (001-366)
%k 小时 (0-23)
%l 小时 (1-12)
%M 月名
%m 月,数值(00-12)
%p AM 或 PM
%r 时间,12-小时(hh:mm:ss AM 或 PM)
%S 秒(00-59)
%s 秒(00-59)
%T 时间, 24-小时 (hh:mm:ss)
%U 周 (00-53) 星期日是一周的第一天
%u 周 (00-53) 星期一是一周的第一天
%V 周 (01-53) 星期日是一周的第一天,与 %X 使用
%v 周 (01-53) 星期一是一周的第一天,与 %x 使用
%W 星期名
%w 周的天 (0=星期日, 6=星期六)
%X 年,其中的星期日是周的第一天,4 位,与 %V 使用
%x 年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y 年,4 位
%y 年,2 位
实例
下面的脚本使用 DATE_FORMAT() 函数来显示不同的格式。我们使用 NOW() 来获得当前的日期/时间:
DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')
DATE_FORMAT(NOW(),'%m-%d-%Y')
DATE_FORMAT(NOW(),'%d %b %y')
DATE_FORMAT(NOW(),'%d %b %Y %T:%f')
结果类似:
Dec 29 2008 11:45 PM
12-29-2008
29 Dec 08
29 Dec 2008 16:25:46.635
2为null判断
SELECT ISNULL('i like yanggb'); // 0
oracle
1日期转换
to_date函数:
//注意:java中MM代表月份,mm代表分钟,但sql不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle中用mi代替分钟。
select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;
to_char函数:
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分钟
/*******日期格式参数 含义说明 ********/
D 一周中的星期几
DAY 天的名字,使用空格填充到9个字符
DD 月中的第几天
DDD 年中的第几天
DY 天的简写名
IW ISO标准的年中的第几周
IYYY ISO标准的四位年份
YYYY 四位年份
YYY,YY,Y 年份的最后三位,两位,一位
HH 小时,按12小时计
HH24 小时,按24小时计
MI 分
SS 秒
MM 月
Mon 月份的简写
Month 月份的全名
W 该月的第几个星期
WW 年中的第几个星期 1.日期时间间隔操作
当前时间减去7分钟的时间
select sysdate,sysdate - interval ’7’ MINUTE from dual
当前时间减去7小时的时间
select sysdate - interval ’7’ hour from dual
当前时间减去7天的时间
select sysdate - interval ’7’ day from dual
当前时间减去7月的时间
select sysdate,sysdate - interval ’7’ month from dual
当前时间减去7年的时间
select sysdate,sysdate - interval ’7’ year from dual
时间间隔乘以一个数字
select sysdate,sysdate - 8 *interval ’2’ hour from dual
2为null判断
NVL函数是将NULL值的字段转换成默认字段输出。
NVL(expr1,expr2)
expr1,需要转换的字段名或者表达式。
PLSQL
1日期转换
to_char(bslm.sb_report_time,'yyyy-MM-dd hh24:mi:ss')
to_timestamp(to_char(info.callback_time,' yyyy-MM-dd'), 'yyyy-MM-dd') >= to_timestamp(#{beginTime},'yyyy-MM-dd')
2为null判断
COALESCE(t.mill_number,'')
IsNull
如果是Null,就返回指定的值,否则返回原值。
select userName,IsNULL(address,'无') from [user]...
sqlserver
1日期转换
使用 CAST:
CAST ( expression AS data_type )//将字符串转换成特定的各式
定义和用法
CONVERT() 函数是把日期转换为新数据类型的通用函数。
CONVERT() 函数可以用不同的格式显示日期/时间数据。
语法
CONVERT(data_type(length),data_to_be_converted,style)
data_type(length) 规定目标数据类型(带有可选的长度)。
data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。
可以使用的 style 值:
Style ID Style 格式
100 或者 0 mon dd yyyy hh:miAM (或者 PM)
101 mm/dd/yy
102 yy.mm.dd
103 dd/mm/yy
104 dd.mm.yy
105 dd-mm-yy
106 dd mon yy
107 Mon dd, yy
108 hh:mm:ss
109 或者 9 mon dd yyyy hh:mi:ss:mmmAM(或者 PM)
110 mm-dd-yy
111 yy/mm/dd
112 yymmdd
113 或者 13 dd mon yyyy hh:mm:ss:mmm(24h)
114 hh:mi:ss:mmm(24h)
120 或者 20 yyyy-mm-dd hh:mi:ss(24h)
121 或者 21 yyyy-mm-dd hh:mi:ss.mmm(24h)
126 yyyy-mm-ddThh:mm:ss.mmm(没有空格)
130 dd mon yyyy hh:mi:ss:mmmAM
131 dd/mm/yy hh:mi:ss:mmmAM
实例
下面的脚本使用 CONVERT() 函数来显示不同的格式。
我们将使用 GETDATE() 函数来获得当前的日期/时间:
CONVERT(VARCHAR(19),GETDATE())
CONVERT(VARCHAR(10),GETDATE(),110)
CONVERT(VARCHAR(11),GETDATE(),106)
CONVERT(VARCHAR(24),GETDATE(),113)
结果类似:
Dec 29 2008 11:45 PM
12-29-2008
29 Dec 08
29 Dec 2008 16:25:46.635
2为null判断
navicat常用设置
1navicat设置默认值
在设置默认值上字符串数字直接’0’ 或 0
2navicat设置输入时间
timestamp : CURRENT_TIMESTAMP
datetime: now()
二 java程序
springboot项目注解配置问题
1springboot项目启动类注解继承SpringBootServletInitializer 类目的
作用: 继承SpringBootServletInitializer可以使用外部tomcat,自己可以设置端口号,项目名。不需要用外部tomcat的话继承不继承都可以。
如将项目打成war包 解压通过外部tomcat访问就需要继承这个类重写configure
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
@MapperScan(basePackages = {"com.zlxd.dao","com.zlxd.modules.*.dao"})
@EnableScheduling
public class ApiApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ApiApplication.class);
}
}
当我们把项目打成jar直接运行访问的时候不需要继承这个类
2springboot项目@MapperScan注解
作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
添加位置:是在Springboot启动类上面添加,
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
@MapperScan(basePackages = {"com.zlxd.dao","com.zlxd.modules.*.dao"})
@EnableScheduling
public class ApiApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ApiApplication.class);
}
}
3springboot项目@Mapper
作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类
添加位置:接口类上面
@Mapper
public interface UserDAO {
//代码
}
4Mybatis映射文件路径classpath*与classpath区别
需要加载路径为com/thomas/base/mapper和com/thomas/bu/mapper/business下的所有mapper文件
<!-- 配置mybatis的sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描mappers.xml -->
<property name="mapperLocations" value="classpath:com/thomas/*/mappers/*Mapper.xml" ></property>
<!-- mybatis配置文件 -->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>
结果一直报com/thomas/base/mappers下的mapper文件的某个方法找不到.
<!-- 配置mybatis的sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描mappers.xml -->
<property name="mapperLocations" value="classpath*:com/thomas/*/mappers/*Mapper.xml" ></property>
<!-- mybatis配置文件 -->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>
注意:
原因是classpath:和classpath*:在spring加载资源的时候是不同的.
classpath:只能加载找到的第一个资源文件.(上面只匹配了com/thomas/bu/mappers/business下的mapper文件,而com/thomas/base/mappers就被忽略了)
classpath*:能加载多个路径下的资源文件.(com/thomas/bu/mappers/business和com/thomas/base/mappers都被加载进来了.)
在多个classpath中存在同名资源,都需要加载时,那么用classpath:只会加载第一个,这种情况下也需要用classpath*:前缀
用classpath*:需要遍历所有的classpath,所以加载速度是很慢的;因此,在规划的时候,应该尽可能规划好资源文件所在的路径,尽量避免使用classpath*。
5Mybatis映射文件.xml 中判断注解
1 字符类型判断需要判断空字符和null
<if test="id != null and id != ''">
id = #{id}
</if>
2 日期类型和数字类型判断null
<if test="update_time != null">
update_time = #{update_time},
</if>
3 字符串判断想等或不等
mybatis 映射文件中,if标签判断字符串相等,两种方式:
因为mybatis映射文件,是使用的ognl表达式,所以在判断字符串sex变量是否是字符串Y的时候
<if test="sex=='Y'.toString()"></if>
<if test = 'sex== "Y"'></if>
注意:
不能使用
<if test="sex=='Y'">
and 1=1
</if>
因为mybatis会把'Y'解析为字符,所以不能这样写 会报NumberFormatException
MyBatis是使用的OGNL表达式来进行解析的,这个地方有一个坑需要注意下,单引号内有一个字符的情况下,OGNL会将其以 java 中的 char 类型进行解析,那么此时 char 类型与参数 String 类型用等号进行比较的时候结果都是false。解决方案也很简单,就是讲 test 中的单个字符用双引号括起来。
<where>
/*不行*/
<if test="qryStr=='Y'">
and counts=1
</if>
/*可以*/
<if test="qryStr=='Y'.toString()">
and counts=1
</if>
/*可以*/
<if test='qryStr=="Y"'>
and counts=2
</if>
</where>
4 多重判断用and
<if test=" state != null and state != '' and isRelease =='1'.toString() ">
and processcurrent.is_release = #{isRelease}
</if>
6Mybatis映射文件返回实体类映射或者返回实体类列表映射
dao层:
WeatherDeviceVo getDeviceByCode(String deviceCode);
List<WeatherDeviceVo> getDeviceByCode(String deviceCode);
xml层: 用resultType对应返回实体类包名确定单条数据用WeatherDeviceVo接收 非确定条数需要用List<WeatherDeviceVo>接收
<select id="getDeviceByCode" parameterType="String" resultType="com.data.styz.entity.WeatherDeviceVo">
SELECT
d.ID,
d.device_code AS "deviceCode",
d.device_name AS "deviceName",
d.device_type AS "deviceType",
d.device_ip AS "deviceIp",
d.device_user AS "deviceUser",
d.device_pwd AS "devicePwd",
d.longitude,
d.latitude,
d.altitude,
d.detail,
d.station_code AS "stationCode",
d.change_time AS "changeTime",
d.last_collect_time AS "lastCollectTime",
d.create_user AS "createUserId",
to_char(d.create_time,'yyyy-MM-dd hh24:mi:ss') AS "createTime",
d.update_user AS "updateUserId",
d.update_time AS "updateTime",
d.remarks ,
o.name
FROM
t_st_base_device d
left join ptlorganization o on d.station_code = o.code and d.del_flag = '0'
<where>
<if test = "deviceCode != null and deviceCode!='' ">
and device_code = #{deviceCode}
</if>
and del_flag = '0' limit 1 //单条数据
</where>
</select>
7Mybatis映射文件返回Map映射或者返回List
dao层:
Map<String, Object> getList(String device);
List<Map<String, Object>> getList(String device);
xml层: 用resultType对应返回实体类包名确定单条数据用WeatherDeviceVo接收 非确定条数需要用List<WeatherDeviceVo>接收
<select id="getList" parameterType="String" resultType="java.util.Map">
SELECT
d.ID,
d.device_code AS "deviceCode",
d.device_name AS "deviceName",
d.device_type AS "deviceType",
COALESCE(d.device_ip,'') AS "deviceIp",
d.device_port AS "devicePort",
d.device_status AS "deviceStatus"
FROM
t_de d
<where>
d.del_flag = '0'
<if test = "deviceName != null and deviceName!='' ">
and device_name like concat ('%',#{deviceName},'%')
</if>
ORDER BY d.create_time desc
</where>
</select>
8Mybatis映射文件接收map参数(查询)
HashMap<String, Object> params = new HashMap<>();
params.put("beginTime",beginTime);
params.put("endTime",endTime);
params.put("device",device);
List<Map<String, Object>> list = millManagementDao.getStd(params);
<select id="getStd" parameterType="map" resultType="map">
select
to_number(avg(info.${columname })||'','99999.99') as "num",
to_char(info.callback_time,${sim }) as "timeInterval"
from t_st_data_weather_station_info info
<where>
<if test = "beginTime != null and beginTime != ''">
and info.n_date >= #{beginTime}
</if>
<if test = "endTime != null and endTime != ''">
and info.n_date <= #{endTime}
</if>
<if test = "device != null and device != ''">
and info.device_id = #{device}
</if>
</where>
</select>
9Mybatis映射文件接收实体类参数(添加修改)
int millManagementDao.addApply(Entity entity);
<insert id="addApply" parameterType="com.entity.Entity ">
insert into t_os_pest_mill_apply
("id", "mill_number","head_person", "head_person_phone",
"create_person_id","update_person_id","unit_id","start_time","end_time")
values
(#{id}, #{millNumber}, #{headPerson},#{headPersonPhone},
#{createPersonId}, #{updatePersonId},#{organCode},#{startTime},#{endTime});
</insert>
10Mybatis映射文件返回实体类映射resultMap
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.zlxd.entity.DiscEntity" id="id">
<result property="id" column="id"/>
<result property="xianId" column="xianId"/>
<result property="linChang" column="linchang"/>
<result property="linBan" column="linban"/>
<result property="xiaoBan" column="xiao_ban"/>
<result property="linLing" column="linling"/>
</resultMap>
property:为实体类属性
column: 为sql返回字段
<select id="getList" parameterType="map" resultMap="id">
select
bslm.id as "id",
bslm.xian_id as "xianId",
bslm.lin_chang as "linchang",
bslm.lin_ban as "linban"
from t_report bslm
</select>
List<DiscEntity> list = millDao.getList(params);
11Mybatis映射文件新增判断参数
<insert id="setWeatherDevice" parameterType="com.zlxd.modules.data.styz.entity.Weather">
insert into device
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null and id != ''">
id,
</if>
<if test="deviceCode != null and deviceCode != ''">
device_code,
</if>
<if test="deviceName != null and deviceName != ''">
device_name,
</if>
<if test="deviceType != null and deviceType != ''">
device_type,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null and id != ''">
#{id},
</if>
<if test="deviceCode != null and deviceCode != ''">
#{deviceCode},
</if>
<if test="deviceName != null and deviceName != ''">
#{deviceName},
</if>
<if test="deviceType != null and deviceType != ''">
#{deviceType},
</if>
</trim>
</insert>
springboot项目打包方式
1打成war包外部tomcat访问
springboot需要做的准备
1 启动类实现SpringBootServletInitializer
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
@MapperScan(basePackages = {"com.zlxd.dao","com.zlxd.modules.*.dao"})
public class ApiApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(ApiApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ApiApplication.class);
}
}
2pom.xml配置
将打包方式修改为war
<packaging>war</packaging>
移除tomcat依赖或者将tomcat依赖scope改为provide
移除tomcat依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 移除嵌入式tomcat插件 -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
3linux部署步骤
1本地IDEA打成war包 --> 在linux服务器上创建一个项目文件夹–> jar -xvf xxx.war 解压文件到该文件夹下面–>tomcat配置文件指向这个目录
4tomcat配置文件配置
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8041" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8042" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,application/xml,application/javascript,text/css,application/json,image/png,image/gif,image/jpg" />
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8043" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context docBase="/home/deploy/ecology/项目文件夹名称" path="/项目名" reloadable="true"></Context>
</Host>
</Engine>
</Service>
</Server>
2打成jar包 使用内置tomcat
打成jar方便多了直接用IDEA打包pom配置文件不需要去除内部tomcat
在linux服务器上创建一个项目文件夹把jar导入进去直接启动
启动jar包方式
在这里只说两种:
一种是手动命令启动
一种是创建脚本启动
手动命令启动
java -jar 运行时是前台启动,并非后台运行退出之后项目关闭
这个解决的方法是,使用nohub命令
nohup 是 no hang up 的缩写,就是不挂断的意思
nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
nohup 命令
用途:不挂断地运行命令。
语法:nohup Command [ Arg … ][ & ]
描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 &到命令的尾部
然后我们需要设置对应的日志输出目录
#设置输出目录
nohup java -jar xxx.jar > catalina.out 2>&1 &
# 使用tail命令打印日志
tail -f ./catalina.out
因为使用java -jar的时候,不指定java内存大小的话,会导致启动非常缓慢,所以需要设置堆栈大小
java -jar -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=1024m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC
-XX:MetaspaceSize:最小元空间
-XX:MaxMetaspaceSize:最大元空间
-Xms:最小堆内存
-Xmx:最大堆内存
-Xmn:新生代大小
-Xss:栈大小
-XX:SurvivorRatio:新生代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:为3,表示Eden:Survivor=3:2,一个Survivor区占整个新生代的1/5
-XX:+UseConcMarkSweepGC:设置并发收集器
对于上面的,我只设置了最小堆内存和最大堆内存
启动
nohup java -Xms1024m -Xmx1024m -jar mogu_sms-0.0.1-SNAPSHOT.jar > catalina.out 2>&1 &
关闭
ps -ef|grep xxx.jar
kill -9 pid
创建脚本启动
设置两个启动脚本,以后方便直接启动和关闭
首先是启动脚本 startup.sh
#!/bin/bash
nohup java -Xms256m -Xmx512m -jar youApplication.jar > catalina.out 2>&1 &
tail -f ./catalina.out
然后是关闭脚本 shutdown.sh
#!/bin/bash
PID=$(ps -ef | grep youApplication.jar | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
echo Application is already stopped
else
echo kill $PID
kill $PID
fi
三 IDEA与SVN
利用本地安装的svn把不需要的文件加入忽略之后提交
本文适用于已安装TortoiseSVN客户端的同学
应用场景:
在IEDA中从svn服务拷贝项目,有时候线上服务会存在一些不需要上传更新的文件存在如.idea target文件,更到本地之后这些文件经常自动和线上比对是否做过更改,当文件多的时候会造成IDEA卡顿
由于项目中的IDE Jdeveloper在某些指定目录下面会生成server.xml以及common文件夹,且包含一个名为bc4j.xcfg的文件,每次当IDE设置发生变化,或者新建某些目录,这些文件都会被修改或者新增,而我不愿意将这些变化体现在SVN提交列表中.
解决途径: 找到项目工作目录用本地svn把不需要更改的文件加入忽略 切记是SVN操作而不是IDEA添加忽略文件夹
IDEA添加忽略文件夹只是在我们提交代码的时候可以选择性的不提交忽略文件夹里面的文件并不能更改线上服务项目的文件,那些没用的垃圾文件仍然存在线上服务中
在工作目录中选中不需要上传的文件如.idea target 等文件 SVN 取消版本控制并添加至忽略列表
步骤:
1、右键点击要忽略的文件夹或文件,鼠标移到“TortoiseSVN”,找到“Unversion and add to ignore list”,选择文件夹,弹出提示框确认忽略。
2、设置完忽略文件后,还需要做commit操作,告诉服务器这个文件移除版本控制。
3、这样在IDEA显示项目的时候svn被取消版本控制的文件会显示特殊标记,并且Version Control 下Default 在与服务器同步的情况下不会有垃圾文件存在
4、我们也可以把利用IDEA创建忽略文件夹,把不想提交的文件放在文件夹中当然这些文件是可以删除的在Version Control里
总结:
1IDEA中Version Control 下文件会经常自动与线上服务做对比,当文件多的时候会造成卡顿非常难受,所以需要我们下载SVN本都客户端把不需要的文件取消版本控制并添加至忽略列表从根本上消除文件的个数
2web项目忽略文件.iml,/target目录 *.idea
3vue项目,svn提交代码时忽略node_modules文件夹提交