SpringMVC&Mybatis暑期短学期说明

xiaoxiao2021-02-27  205

首先是目录的说明:

 

-config

-src

-WebRoot

 

Config:里面是SpringMVCMybatis的相关初始化设定,一般除了配置下自己电脑的数据库连接方式,不需要做额外设定。

 

config

-mybatis

-spring

-db.properties

-log4j.properties

 

所以,这里只需要对db.properties进行设置,我这里是postgres,所以设定如下:

 

jdbc.driver=org.postgresql.Driver jdbc.url=jdbc:postgresql://localhost:5432/natsu jdbc.username=postgres jdbc.password=postgres

先不看src,里面当然就是java的源代码。

先看WebRoot文件夹,这个文件夹的内容,就会在tomcat上运行,包括java编译生成的class文件。

WebRoot

-data

-jquery-easyui-1.5.2

-js

-META-INF

-WEB-INF

-index.html

这里的目录是可以通过URL来直接访问和获取的,而WEB-INF的内容是被保护的,不可直接访问。

所以index.html可以直接通过地址栏里面输入网址来打开。(localhost:8080/工程路径/index.html)

 

然后为了方便起见,也就可以直接把所有的jsjsondata文件夹下),css放置在此,如果放置在WEB-INF下,需要再做别的设定,此处不赘述。

WEB-INF

-classes

-jsp

-lib

-web.xml

 

这里的WEB-INF已经是web应用编译后的了,所以存在class文件夹,自己只需要建立jsp文件夹,并且把通过.action来访问的页面放置在此即可,lib里面是相关的jar包,记得建立项目时均放置到其中,避免tomcat运行后,出现找不到jar包依赖的错误。

 

为什么.jsp的页面要放置在WebRoot/WEB-INT/jsp文件夹下,是因为在SpringMVC.xml下做了如下配置:

 

<!-- 视图解析器 解析jsp页面,默认使用jstl标签,classpath下面得有jstl的包 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 配置jsp路径的前后缀 --> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean>

 

目录讲解到此,下面就是src的源代码目录。

 

-controller

-mapper

-po

-service

 

不管前面的包是怎么封的,不论如何,到最后一层都是这四个包:controllermapperposervice

先说popo内简单地说就是方便你来操作数据库的传参和返回值而封装的类,比如这里的Users。当然这里也可以自己建立一些类,目的就是为了方便别的代码的逻辑和编写。

 

public class Users { private int id; // 用户ID private String username;// 用户姓名 private String password;// 用户密码 public int getId() { return id; } ...//get&set public void setPassword(String password) { this.password = password; } }

关于这个po,有自动生成的工具,所以还算是挺方便的。

介绍完了po,下面我们就跟随一个实际需求,来看看整个运行流程。

 

出发点是位于user.jsp引用的mydemo.js的一段ajax请求:

 

$('#login').bind('click', function(){ $.ajax({ url: "./loginResult.action", async: true, type: "POST", dataType: "text",//"json", data: { username: $("#username").textbox('getValue'), password: $("#password").textbox('getValue') }, success: function(result){ if(result=="success"){ $.messager.alert('提示','登陆成功'); $('#loginWindow').window('close'); window.location.reload(); } else if(result=="fail"){ $.messager.alert('提示',"用户名或者密码错误!"); } } }) });

 

这里发送了usernamepassword给服务器,期望得到一个字符串的返回,来知道登录是否成功。

 

而请求的URL ./loginResult.action

 

服务器接到这个请求,当然就是去找对应的controller啦。

 

于是,就在controller里面找到了这货:

 

@RequestMapping("/login") public ModelAndView login() throws Exception{ ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("index"); return modelAndView; } @RequestMapping("/loginResult") @ResponseBody public String loginResult(Users user) throws Exception{ Users usersResult = null; usersResult = usersService.findUser(user); if(usersResult!=null) return "success"; return "fail"; }

 

前面那个controller就是为了用于访问WEB-INF下的页面而书写的。

这边重点看后面这个,这里用了@ResponseBody注释,使得返回的字符串会直接写入response里面。

 

而这里,传入的usernamepassword会自动构成Users对象,而这里在Sercvice下写了个函数来实现返回查询结果,传入的正是User

 

那么再往下一层,我们前往Service

Service

-impl

-UsersService.java

 

public interface UsersService { public Users findUserById(int id) throws Exception; public Users findUser(Users user) throws Exception; }

Service当中,只提供了接口,而实现在其Impl中。

 

public class UsersServiceImpl implements UsersService{ @Autowired private UsersMapper usersMapper; @Override public Users findUser(Users user) throws Exception { Users users = usersMapper.findUser(user); return users; } @Override public Users findUserById(int id) throws Exception { Users users = usersMapper.findUsersById(id); return users; } }

 

而这里可以看到,在@Override的重载代码里面,返回值users就是通过Mapper里面的函数获得的。

 

这里 usersMapper前面用了@Autowired自动装配,因为事实上,usersMapper也只是个接口,所以要配合它的.xml来完成代码。

 

mapper

-UsersMapper.java

-UsersMapper.xml

public interface UsersMapper { // 根据id查询用户信息 public Users findUsersById(int id) throws Exception; // 根据账号密码查询用户 public Users findUser(Users user) throws Exception; }

而最后的最后,就是配置.xml里面对应的sql语句了:

 

<select id="findUser" parameterType="cn.edu.zju.gis.po.Users" resultType="cn.edu.zju.gis.po.Users"> SELECT * FROM USERS WHERE username = #{username} and password = #{password} </select>  

parameterType代表传入的类型 resultType是返回值类型。

 

这里在SQL中的传入参数用#{成员名}来书写即可。

 

最后配上一张流程图。

 

 

转载请注明原文地址: https://www.6miu.com/read-9381.html

最新回复(0)