先介绍一下我的这个小系统用到的一些需要了解的东西:
语言:java
框架:SSM
数据库:mysql
运行服务器:tomcat
前端用到了一点jquery框架中的ajax
这个小系统的基础功能就是一个日常管理功能,具备登录、注册、填写个人信息等、、
当然,最主要的还是这个系统的一个
特殊应用功能--暂且不说,开始陈列我在写这个系统个过程中遇到的一些问题:
1、maven工程里找不到 maven dependencies所依赖的包,
解决方案:因为pom.xml配置文件里有个<dependency-management>的标签 去掉就好了 ,这个标签的意思是管理依赖,通过这个标签可以继承所依赖包的version,但是不能直接将所依赖的包添加到子项目中去。
2、@Autowired注解:如果要注解多个接口的话需要多个@Autowired注解:比如下面这样 e5Mapper、e6Mapper才能同时完成自动注解
@Autowired
E6Mapper e6Mapper;
@Autowired
E5Mapper e5Mapper;
如果只用一个@Autowired同时注解多个接口,比如下面这样,则在你运行程序后,使用到e5Mapper时就会报错:没有注解
@Autowired
E6Mapper e6Mapper;
E5Mapper e5Mapper;
3、mapper.xml文件报错:Result Maps collection already contains value for com.youngdo.mappers.FlightMapp
er.BaseResultMap
错误原因是因为mapper.xml文件中
有重复的sql语句!!这是因为在使用generator自动生成sql语句时,系统误操作(具体不太清楚)造成的,只需要把重复的删掉就好了。
4、在mapper.xml中写sql语句时要注意一点:select,要特别注意。
我们在查找时经常会使用到这种条件查询语句:
<select id="getMsg" parameterType="java.lang.String" resultMap="BaseResultMap" >
select * from table_b
where
a between #{1} and #{0}
and
a is not null
</select>
注意该语句的输入参数是String,这时如果你数据库表结构中a字段的参数类型为String,假设有一条记录a="0710",而你输入的参数#{0}="700",#{1}="750" ,你想当然 700<0710<750,这条语句可以查到该记录?错了。数据库得到你的输入参数时,是这么想的:"700"<"0710"<"750"?这位数都不一样,不比较!当你把输入参数改为#{0}="0700" ,#{1}="0750"时,数据库就能正常工作了。
然而,当输入参数使Integer类型时,就不用纠结数据库中a字段是什么类型了,数据库会将纯数字的字符串转化为Integer类型,与你的sql语句进行匹配。此时你的输入参数为:#{0}=700 , #{1}=750 ,数据库时这么判断的:700<710<750 ,ok,返回给你想要的结果