ssm搭建时候要注意的问题
最近用一台新电脑去搭建ssm框架实现一个上传csv文件,将其中的数据读出来然后存入数据库的功能,但是遇到了很对之前没有遇见过的问题
- 在使用maven进行jar包整理的时候,一定不要用ide自带的maven,因为自带的maven中心资源库是国外的,下载jar非常慢,导致你框架搭建好后一直出现一些莫名其妙的问题,这都是因为jar包没下载完,导致的,所以要自己去下载maven,将setting中的配置中心资源仓库的网址改成阿里的:具体改成下面的:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
同时还要修改一下setting中的jar包下载存储地址:
<localRepository>G:\maven\respository</localRepository>,这样下载的jar包就都在你配置的地方了
- jdbc连接sqlserver和连接mysql是不一样的,第一:jar包不一样。第二:drive驱动不一样
首先需要引入的jar ,在pom文件中加入:
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
然后在db.properties中这样写:
jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url=jdbc:sqlserver://local:3433;DatabaseName=oa_tui
jdbc.username=sda321
jdbc.password=tuiguang!2#
- 常规的物理分页,不用任何插件的分页是这样的(比较容易理解,但是代码冗余比较严重)
首先要建立一个pageUtile工具类
package util;
import java.util.List;
public class PageUtil<T> {
private int pageNumber;//总记录数
private int pageCount;//总页数
private int pageIndex;//当前页
private int pageSize;//每页大小
private List<T> list;//当前页数据
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public int getPageIndex() {
return pageIndex;
}
public void setPageIndex(int pageIndex) {
this.pageIndex = pageIndex;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
}
然后在mapper.xml中要查出来一个每页的数据以及总数据的个数
<!-- 查询全部列表 ,用于分页,每页显示10条数据-->
<select id="findAll" parameterType="int" resultType="com.shen.model.TuiGuang">
<!-- select * from tuiguang limit #{index},10; -->
select top 10 * from tuiguang where id not in (select top ${index} id from tuiguang order by id) order by id
</select>
<!-- 查询出数据总量,用于分页 -->
<select id="pageCountAll" resultType="int">
select count(*) from tuiguang;
</select>
在mapper.java(dao层)写接口,service中也是写接口
然后主要是controller中的处理
@RequestMapping(value="/findAll")
public String findAllController(Model model,@RequestParam(value="pageIndex",defaultValue="1") int pageIndex) {
int pageSize=10;//设置每页显示多少条数据,必须和sql语句中的limit后跟的数字一样
PageUtil<TuiGuang> pageUtile = new PageUtil<TuiGuang>();//初始化分页工具类
List<TuiGuang> list = new ArrayList<TuiGuang>();
pageUtile.setPageIndex(pageIndex);
int num = tuiGuangService.pageCountAll();//调用计算出总条数的方法计算出总条数
pageUtile.setPageNumber(num);
pageUtile.setPageSize(pageSize);
pageUtile.setPageCount((int) Math.ceil((double) (pageUtile
.getPageNumber() / pageUtile.getPageSize())) + 1);//计算出总页数,并封装到工具类
int index = (pageIndex - 1) * pageSize;//计算出每一页从数据库中第几条数据开始取值,也就是limit后面的第一个数字
list = tuiGuangService.findAllService(index);//查询出该页对应的数据并且放到list中
pageUtile.setList(list);
model.addAttribute("pageUtile", pageUtile);
return "login";
}
主要注意的是sqlserver是没有limit这个功能了,所以只能用top配合嵌套查询来实现
select top 数字一 * from tuiguang where id not in (select top 数字二 id from tuiguang order by id) order by id
注意外部查询的是一定会查出来‘数字一’个数据的(除非数据不够),但是它会跳过内层查询出的‘数字二’个数据,然后再去读‘数字一’个数据,简单来说就是跳过内层查询出的数据,然后在读出外部查询出的那些个数据量。
3.在搭建ssm框架的时候,如果提示你你创建的类被当成bean注入失败时,如果其他地方的配置都没有错,那就一定是mapper.xml里面的写错了,一般都是对应的实体类路劲写错了(实体类最好写全路径),按照我之前的那种搭建框架的方法只要启动出错一般就都是mapper.xml中的问题,要多写写,多尝试才可以