使用ssm实现用户的登录和增删改查
今天主要是跟随老师的步伐,使用老师给的界面,完成了数据的增删改查。先写一下今天又掌握的几个知识点,
1、spring的作用是控制反转,即控制权的转移,将生成对象的控制权转移给spring来自动完成,而不需要自己来编码;
2、springmvc本质上就是servlet;
3、mybatis则是作用于持久化数据的持久层,实现的基本上是之前JDBC的工作。
4、将有依赖关系的类放到容器中,解析出这些类的实例,就是依赖注入,依赖注入有两种方式, 一般是使用现成的jar包中的类时,在配置文件配置bean(对象),如下
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 扫描bean包 使用别名 -->
<property name="typeAliasesPackage" value="com.whut.Hulk.bean"></property>
<!--配置加载映射文件 UserMapper.xml-->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
使用自己编写的类时,在类之前写上注释@Service也可以,如下
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private IUserDao userDao;
@Override
public boolean login(String username, String password) {
User user = userDao.findUserByUsername(username);
boolean flag = false;
if(user != null && user.getPassword().equals(password)){
flag = true;
}
return flag;
}
@Override
public List<User> findAll() {
return userDao.findAll();
}
@Override
public void deleteById(int id) {
userDao.deleteById(id);
}
@Override
public void add(User user) {
userDao.add(user);
}
@Override
public User selectUserById(int id) {
return userDao.selectUserById(id);
}
@Override
public void update(User user) {
userDao.update(user);
}
}
5、转发(forward)和重定向(redirect)的区别。转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过 程;重定向时,第一个页面通知浏览器发送一个新的页面请求。因此整个转发过程就只有一次请求,而重定向则需要两次请求。
6、占位符(#)和字符串拼接($)是在处理mybatis在处理sql语句时常用的两种符号。使用占位符时,是直接将参数替换到占位符所占的位置上;使用字符串拼接时,则是传统的字符串拼接相加,会出现问题。因此一般使用占位符会更好些。
总之,ssm简化了编码步骤,方便了开发人员的开发。
代码
我理解的代码运行的大概流程是,网页发出请求是,首先调用Controller,Controller 可以负责定义和调用Model,相应的方法返回ModelAndView的对象,决定要显示哪一个View。在这个过程中,如有需求,会调用Service中的接口,实现相关方法,如需使用数据库,就会调用dao层的接口,而这些接口,会在mybatis中实现。
具体代码:
UserController
@Controller
@RequestMapping("user")
public class UserController {
@Autowired
private IUserService userService;
@RequestMapping("login.do")
public ModelAndView login(User user){
boolean flag = userService.login(user.getUsername(),user.getPassword());
ModelAndView modelAndView = new ModelAndView();
if(flag){
modelAndView.setViewName("main");
}else{
modelAndView.setViewName("../failer");
}
return modelAndView;
}
@RequestMapping("findAll.do")
public ModelAndView findAll() {
ModelAndView mv = new ModelAndView();
List<User> users = userService.findAll();
mv.setViewName("user-list");
mv.addObject("users",users);
return mv;
}
@RequestMapping("deleteById.do")
public String delete(int id){
userService.deleteById(id);
return "redirect:findAll.do";
}
@RequestMapping("add.do")
public String add(User user){
userService.add(user);
return "redirect:findAll.do";
}
@RequestMapping("toUpdate.do")
public ModelAndView toUpadte(int id){
User user = userService.selectUserById(id);
ModelAndView mv = new ModelAndView();
mv.addObject("user",user);
mv.setViewName("user-update");
return mv;
}
@RequestMapping("update.do")
public String update(User user){
userService.update(user);
return "redirect:findAll.do";
}
}
IUserDao
public interface IUserDao {
User findUserByUsername(String Username);
List<User> findAll();
void deleteById(int id);
void add(User user);
User selectUserById(int id);
void update(User user);
}
IUserService
public interface IUserService {
boolean login(String username,String password);
List<User> findAll();
void deleteById(int id);
void add(User user);
User selectUserById(int id);
void update(User user);
}
实现类UserServiceImpl
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private IUserDao userDao;
@Override
public boolean login(String username, String password) {
User user = userDao.findUserByUsername(username);
boolean flag = false;
if(user != null && user.getPassword().equals(password)){
flag = true;
}
return flag;
}
@Override
public List<User> findAll() {
return userDao.findAll();
}
@Override
public void deleteById(int id) {
userDao.deleteById(id);
}
@Override
public void add(User user) {
userDao.add(user);
}
@Override
public User selectUserById(int id) {
return userDao.selectUserById(id);
}
@Override
public void update(User user) {
userDao.update(user);
}
}
实现效果
用户列表
新增用户
新建完成
另外还实现了包括修改和删除功能,不再做演示。