DAY3 使用SSM实现基础的CRUD功能

SSM(Spring + Spring MVC + MyBatis)

Spring :Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
控制反转 (IoC):依赖注入是控制反转的一种技术,控制反转是一个通用的概念,大致理解为将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
面向切面 (AOP):系统是由许多组件组成,每个组件各负责一块特定功能,还有可能承担日志,事务管理和安全等系统服务中去,这些系统服务称为横切关注点,因为它可以跨越系统的多个组件。

Spring MVC :Spring MVC是一种实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,基于MVC的构架思想可以对Web层起到一定的解耦作用,简化日常开发。
MVC思想将一个应用分成三个基本部分:Model(模型)、View(视图)、Controller(控制器)

MyBatis:MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。
相比于之前的Servlet开发,我们除了需要自己提供 SQL 外,还必须操作 Connection、Statment、ResultSet,不仅如此,为了访问不同的表,不同字段的数据,我们需要些很多雷同模板化的代码,闲的繁琐又枯燥。而使用了 MyBatis 之后,只需要提供 SQL 语句就好了。

基于SSM实现基础的CRUD功能
开发环境: IDEA 2019、Tomcat 7.0.1041、Mysql 5.5.5

1 新建SSM文件
新建一个Maven项目,按图所示步骤
在这里插入图片描述
输入GroupId等直到 finish
在这里插入图片描述
2 创建目录(后端逻辑处理方面)
(1)首先在main目录下,新建文件夹java和文件夹resources,并分别将java文件设置为SourcesRoot和resources文件设置为ResourcesRoot,设置方法如下:
在这里插入图片描述
在这里插入图片描述
新建xml文件可以直接新建一个file文件加上.xml后缀即可,新建properties配置文件如图:
在这里插入图片描述
3 后端逻辑部分代码
(1)数据库配置文件 db.properties
主要用来存放连接数据库的一些信息,在此之前需要现在本地mysql中新建相关的表,我是用的库名为ssm,表名字段机构如图:
在这里插入图片描述
db.properties配置如下(修改和自己数据库的信息相对应):

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?useSSL=false
jdbc.username=root
jdbc.password=

(1)spring和springMVC的配置文件 applicationContext.xml和spring-mvc.xml
这部分是ssm框架中spring和springMVC部分的配置文件(这部分代码是照搬加部分修改的,修改部分就根据注释改和自己匹配的一些内容)
applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>



<context:property-placeholder location=“classpath:db.properties”/>








<!-- 3.配置SqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!-- 注入数据库连接池 -->
    <property name="dataSource" ref="dataSource"/>
    <!-- 扫描bean包 使用别名 -->
    <property name="typeAliasesPackage" value="com.tengshan.bean"></property>

    <!--配置加载映射文件 UserMapper.xml-->
    <property name="mapperLocations" value="classpath:mapper/*.xml"/>

</bean>
<!-- 自动生成dao,mapper-->
<!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!-- 给出需要扫描Dao接口包 -->
    <property name="basePackage" value="com.tengshan.dao"/>
    <!-- 注入sqlSessionFactory -->
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>

<!--自动扫描-->
<context:component-scan base-package="com.tengshan"/>
<!-- 配置事务-->
<!-- 5.配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
<!-- 6.开启事务注解-->
<tx:annotation-driven></tx:annotation-driven>

spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- 1.注解扫描位置-->
<context:component-scan base-package="com.tengshan.controller" />

<!-- 2.配置映射处理和适配器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

<!-- 3.视图的解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/pages/" />
    <property name="suffix" value=".jsp" />
</bean>

(4)实体类User
在实体类中需要声明User的熟悉,和数据库中的信息一致
(tips:通过Ctrl+ins可以快捷插入getter and setter 以及toString)

private int id;
private String username;
private String password;

public User() {
}

public User(String username, String password) {
    this.username = username;
    this.password = password;
}

public User(int id, String username, String password) {
    this.id = id;
    this.username = username;
    this.password = password;
}


public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

(5)实现CRUD功能(实现的顺序是差不多的,这里几种操作一起实现)

首先在userDao写好接口,声明实现的几种方法

public interface UserDao {
//根据名字进行查找
User findByUserName(String username);
//查询
List findAll();
//新增
void add(User user);
//删除 根据id
void deleteById(int id);
//更新
User selectUserById(int id);
void update(User user);
}

在userMapper.xml 中写好需要执行的sql语句,其中更新内容部分,我们需要先在数据库中根据id查询到当先数据展示出来,进行修改之后再更新数据库,所以一共需要两个步骤,此处的id对应dao文件中的方法名。

<?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
select * from user_ssm where username = #{username} select * from user_ssm insert into user_ssm (username,password) values (#{username},#{password}) delete from user_ssm where id=#{id} select * from user_ssm where id = #{id} update user_ssm set username=#{username},password=#{password} where id=#{id}

修改好sql语句之后,需要在service业务处理层声明同样操作的接口方法,之后再在impl调用dao目录下的方法实现功能

public interface UserService {

int login(String username, String password);

List<User> findAll();

void add(User user);

void deleteById(int id);

User selectUserById(int id);

void update(User user);

}

UserServiceImpl.java

@Service
public class UserServiceImpl implements UserService {

@Autowired
private UserDao userDao;

@Override
public int login(String username, String password) {
    User user = userDao.findByUserName(username);
    if(user!=null && user.getPassword().equals(password)){  //用户存在 且 密码相同
        return user.getId();
    }
    return -1;
}

@Override
public List<User> findAll() {
    return userDao.findAll();
}

@Override
public void add(User user) {
    userDao.add(user);
}

@Override
public void deleteById(int id) {
    userDao.deleteById(id);
}

@Override
public User selectUserById(int id) {
    return userDao.selectUserById(id);
}

@Override
public void update(User user) {
    userDao.update(user);
}

}

最后在controller中进行逻辑处理,将得到的数据按功能进行处理和映射到jsp页面中。

@Controller
@RequestMapping("/user")
public class UserController {

@Autowired
private UserService userService;

@RequestMapping("/login.do")
//登陆
public ModelAndView login(User user){
    int id = userService.login(user.getUsername(),user.getPassword());
    ModelAndView mv = new ModelAndView();
    if(id != -1){
        mv.setViewName("main");
    }else{
        mv.setViewName("../failer");
    }
    return mv;
}

//查询
@RequestMapping("findAll.do")
public ModelAndView findAll(){
    List<User> users = userService.findAll();
    ModelAndView mv = new ModelAndView();
    mv.addObject("users",users);
    mv.setViewName("user-list");
    return mv;
}

//添加
@RequestMapping("add.do")
public String add(User user){
    userService.add(user);
    return "redirect:findAll.do";
}

//删除
@RequestMapping("deleteById.do")
public String deleteById(int id){
    userService.deleteById(id);
    return "redirect:findAll.do";
}

//更新
//带着id查询到的结果跳转到更新界面
@RequestMapping("/toUpdate.do")
public ModelAndView toUpdate(int id){
    User user = userService.selectUserById(id);
    ModelAndView mv = new ModelAndView();
    mv.setViewName("user-update");
    mv.addObject("user",user);
    return mv;
}
//点击保存 更新内容
@RequestMapping("/update.do")
public String update(User user){
    userService.update(user);
    return "redirect:findAll.do";
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值