整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)

SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)整合Mybatis和Spring框架进行注解开发

今天我们要实现Spring和Mybatis的整合,实现对数据库进行增删改查的操作,首先使用XML的方式

一、对数据库表Users进行新增处理

①先导入我们准备好的数据库文件mybatisandspring.sql,创建出数据库mybatisandspring

在这里插入图片描述

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传]整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)_第1张图片


②使用idea的Maven构建工具,新建一个java项目为samTest。

整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)_第2张图片


③编写pom.xml引入我们所需要的依赖


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>org.examplegroupId>
    <artifactId>samTestartifactId>
    <version>1.0-SNAPSHOTversion>
    <build>
        <resources>
            <resource>
                <directory>src/main/javadirectory>
                <includes>
                    <include>**/*.propertiesinclude>
                    <include>**/*.xmlinclude>
                includes>
                <filtering>truefiltering>
            resource>
        resources>
    build>

    <dependencies>
        
        <dependency>
            <groupId>aopalliancegroupId>
            <artifactId>aopallianceartifactId>
            <version>1.0version>
        dependency>

        
        <dependency>
            <groupId>org.aspectjgroupId>
            <artifactId>aspectjweaverartifactId>
            <version>1.6.9version>
        dependency>

        
        <dependency>
            <groupId>commons-dbcpgroupId>
            <artifactId>commons-dbcpartifactId>
            <version>1.4version>
        dependency>

        
        <dependency>
            <groupId>commons-logginggroupId>
            <artifactId>commons-loggingartifactId>
            <version>1.1.1version>
        dependency>

        
        <dependency>
            <groupId>commons-logginggroupId>
            <artifactId>commons-loggingartifactId>
            <version>1.2version>
        dependency>

        
        <dependency>
            <groupId>commons-poolgroupId>
            <artifactId>commons-poolartifactId>
            <version>1.6version>
        dependency>

        
        <dependency>
            <groupId>org.hamcrestgroupId>
            <artifactId>hamcrest-coreartifactId>
            <version>1.3version>
        dependency>

        
        <dependency>
            <groupId>javaxgroupId>
            <artifactId>javaee-apiartifactId>
            <version>7.0version>
        dependency>

        
        <dependency>
            <groupId>javax.servletgroupId>
            <artifactId>jstlartifactId>
            <version>1.2version>
        dependency>

        
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.12version>
        dependency>

        
        <dependency>
            <groupId>log4jgroupId>
            <artifactId>log4jartifactId>
            <version>1.2.17version>
        dependency>

        
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatisartifactId>
            <version>3.2.2version>
        dependency>

        
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatis-springartifactId>
            <version>1.3.0version>
        dependency>

        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>8.0.26version>
        dependency>

        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-aopartifactId>
            <version>4.3.6.RELEASEversion>
        dependency>

        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-aspectsartifactId>
            <version>4.3.6.RELEASEversion>
        dependency>

        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-beansartifactId>
            <version>4.3.6.RELEASEversion>
        dependency>

        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-contextartifactId>
            <version>4.3.6.RELEASEversion>
        dependency>

        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-coreartifactId>
            <version>4.3.6.RELEASEversion>
        dependency>

        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-expressionartifactId>
            <version>4.3.6.RELEASEversion>
        dependency>

        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-jdbcartifactId>
            <version>4.3.6.RELEASEversion>
        dependency>

        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-txartifactId>
            <version>4.3.6.RELEASEversion>
        dependency>

        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webartifactId>
            <version>4.3.6.RELEASEversion>
        dependency>

        
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webmvcartifactId>
            <version>4.3.6.RELEASEversion>
        dependency>
    dependencies>


project>

编写完成后要点击右上角的maven进行刷新,记得要联网才能下载导入依赖

整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)_第3张图片

进度条在下面的终端查看

整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)_第4张图片

状态栏变成绿色✔,然后下面的进度条没有了,就说明引入成功了

若是有爆红就根据报错来进行修改

整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)_第5张图片


④在resources资源文件夹下编写我们的配置文件,spring-config.xml和mybatis-config.xml文件还有db.properties、以及log4j.properties

1.spring-config.xml:这是Spring框架的配置文件。它包含了Spring容器的配置信息,用于定义和配置Spring的bean、数据源、事务管理等。通常也会在这里配置扫描注解、AOP等Spring相关的功能。

2.mybatis-config.xml:这是MyBatis框架的配置文件。它包含了MyBatis的全局配置信息,如数据库连接池、映射器(Mapper)的位置、类型别名等。在这个文件中,可以用来配置MyBatis的全局属性,以及指定映射器接口的位置。

3.db.properties:这是一个属性文件,通常用于存储数据库连接的配置信息,如数据库URL、用户名、密码等。这些配置可以在spring-config.xmlmybatis-config.xml中通过占位符的方式引用,以便在不同环境下进行配置切换

4.log4j.properties(log4j日志框架配置文件):这是用于配置日志框架(例如Log4j)的文件。它定义了日志的输出方式、日志级别、日志文件的位置等。在应用程序中,我们可以使用日志框架来记录应用的运行日志,以便排查问题和监控应用状态。

这里就不附上代码了,配置文件可以在文章附带的资源包中下载

⑤创建pojo包,包下创建于数据库表结构相同一 一对应的实体类User

​ 这里可以使用前面我们讲的,链接database自动生成pojo类

整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)_第6张图片

整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)_第7张图片

可以看到自动生成的pojo类如上,记得生成后要自己检查一下是否出错,映射关系是否正确无误。

⑥创建dao层,包内再创建user包,user包中新建一个UserMapper.xml的映射文件


DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.steveDash.dao.user.UserMapper">

    
    <insert id="saveUser" parameterType="Userss">
        insert into users(uname,uage)values(#{uname},#{uage})
    insert>
mapper>

这里的参数类型可以填User,是因为我们在mybatis-config中填入了别名包pojo

整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)_第8张图片

⑦再在dao.user中创建出该映射文件的接口文件UserMapper,这里要跟我们的映射文件同名用来绑定

UserMapper接口文件中编写saveUser(),以及对User表的其他方法。

接口中的方法必须与SQL映射文件(就是mapper文件)中的SQL语句的ID 一 一 对应

整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)_第9张图片

因此上面的UserMapper.xml的映射文件我已经修改好了,写代码就是这样,要边写,便检查自己是否有写错,不要等到最后再进行检查,这样很容易找不到问题。

⑧新建Service层,因为我们已经学过了三层架构的思想,那么在com.steveDash下创建service包

这里的com.steveDash是公司域名的倒序写法,也可以用个人名等,这样不容易报错,也容易定位出问题。

包内新建一个user包,user包下新建一个UserService的接口,用于定义添加用户的方法

package com.steveDash.service.user;

import com.steveDash.pojo.Users;

public interface UserService {
    public int addUser(Users users);
}

然后创建该接口的实例UserServiceImpl

package com.steveDash.service.user;

import com.steveDash.dao.user.UserMapper;
import com.steveDash.pojo.Users;
import org.apache.log4j.Logger;

public class UserServiceImpl implements UserService {
    private Logger logger = Logger.getLogger(UserServiceImpl.class);
    private UserMapper userMapper;

    public UserMapper getUserMapper() {
        return userMapper;
    }

    public void setUserMapper(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    public int addUser(Users users) {
        if(!users.equals("")&&!users.equals("null")) {
            int result=userMapper.saveUser(users);
            if(result>0) {
                logger.info("输出插入成功");
                return result;
            }
        }
        logger.info("输出插入失败");
       return 0;
    }
}

⑨创建测试类:在test-jave下创建test包,用于创建测试类供我们测试程序是否正常运行

package test;

import com.steveDash.pojo.Users;
import com.steveDash.service.user.UserService;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserTest {
    private Logger logger=Logger.getLogger(UserTest.class);

    @Test
    public void test() {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        UserService userService = (UserService) context.getBean("userService");
        Users user = new Users();
        user.setUname("steveDash");
        user.setUage(22);
        userService.addUser(user);
    }
}

整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)_第10张图片

前面bean id 说明的是实体类的唯一id,autowire="byName"的意思是根据Name来进行自动装配

也可以看出程序提示,插入成功,我们会过去数据库进行查看

整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)_第11张图片

可以看到数据库中插入了数据,但是存在同名的情况,我们查看一下数据库表设计

整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)_第12张图片

如下图:

整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)_第13张图片

那就很明显了,但是同个班也是有可能会出现学生同名的这种情况,所以就不做限制了,具体需求具体分析。


二、对数据库表Users进行模糊查询处理

就是输入根据姓名进行查询,这里涉及到一个精准匹配和模糊查询。

一般来说都是模糊查询更为受用。因为用户输入姓名时可能会有误差,出现拼写错误等不一致情况,使用精准查询没办法搜索到用户。或者用户重名的情况下,在全栈开发的情况下还要考虑一手网络安全,防止注入攻击等。

因此对比起来,模糊查询姓名可以提供更灵活的搜索体验

①在UserMapper.xml映射文件中,添加好查询的SQL语句

<select id="findUsersByName" parameterType="String" resultType="Users">
    select * from users where uname like concat('%',#{uanem},'%')
select>
②在dao.user.UserMapper接口中添加我们刚刚写入的查询方法
package com.steveDash.dao.user;

import com.steveDash.pojo.Users;

import java.util.List;

public interface UserMapper {
    public int saveUser(Users users);
    public List<Users> findUsersByName(String uname);

}

③在Service层中的UserService中同样也添加方法,这里命名为getUsersList,也可以采用都保持一致的写法,都是没有问题的
package com.steveDash.service.user;

import com.steveDash.pojo.Users;

import java.util.List;

public interface UserService {
    public int addUser(Users users);
    public List<Users> getUsersList(String uname);
}

④在UserServicelImpl也就是UserService的实现类中实现getUsersList方法
package com.steveDash.service.user;

import com.steveDash.dao.user.UserMapper;
import com.steveDash.pojo.Users;
import org.apache.log4j.Logger;

import java.util.List;

public class UserServiceImpl implements UserService {
    private Logger logger = Logger.getLogger(UserServiceImpl.class);
    private UserMapper userMapper;

    public UserMapper getUserMapper() {
        return userMapper;
    }

    public void setUserMapper(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    public int addUser(Users users) {
        if(!users.equals("")&&!users.equals("null")) {
            int result=userMapper.saveUser(users);
            if(result>0) {
                logger.info("输出插入成功");
                return result;
            }
        }
        logger.info("输出插入失败");
       return 0;
    }

    public List<Users> getUsersList(String uname){
        try {
            return userMapper.findUsersByName(uname);
        }catch (RuntimeException e){
            e.printStackTrace();
            throw e;
        }
    }
}

⑤编写测试类查看方法是否满足需求?新增test1()进行测试
package test;

import com.steveDash.pojo.Users;
import com.steveDash.service.user.UserService;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.List;

public class UserTest {
    private Logger logger=Logger.getLogger(UserTest.class);

    @Test
    public void test() {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        UserService userService = (UserService) context.getBean("userService");
        Users user = new Users();
        user.setUname("steveDash");
        user.setUage(22);
        userService.addUser(user);
    }


    @Test
    public void test1() {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        UserService userService = (UserService) context.getBean("userService");
        String uname="王";
        List<Users> list=userService.getUsersList(uname);
        for(Users user:list){
            logger.info("id:"+user.getUid()+", 姓名:"+user.getUname()+", 年龄:"+user.getUage());
        }
    }


}

输出结果如下:与数据库中记录的完全一致,![外链图片转存失败,源站可能有

整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)_第14张图片


三、若想使用注解方式运行

①在SPring-config.xml中添加头部份


②再在我们的配置文件中spring-config.xml中的配置业务Bean这部分注释掉

整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)_第15张图片

修改为如下代码:记得这里的包路径需要根据自己的实际项目进行修改

<context:component-scan base-package="com.steveDash.service"/>

整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)_第16张图片

③打开UserServicelmpl类,添加上我们的注解

整合Mybatis和Spring框架进行注解开发SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录(第十天)_第17张图片

@Service标明是一个service层的组件Bean。若是不声明的的话 那么测试类中的bean获取名就得修改为userServiceImpl

@Resource是依赖的自动注入,默认是按照名称注入,也就是对应我们dao包下的UserMapper接口,这里也可以用@Autowried,不过是默认按类型注入。

相比于@Autowired,@Resource自动注入主要有以下特点:
  • @Autowired默认按类型注入,@Resource默认按名称注入。
  • @Resource支持JDK自带版本和Spring版本,功能一致但使用略有不同。
  • @Resource可以自定义探查策略,如优先byName然后byType。
  • @Autowired要配合@Qualifier使用来指定注入Bean。
  • @Resource直接在name属性指定要注入的Bean名称。

总结

​ 今天初步学习了Spring和Mybatis的整合方法,并且对数据库表Users进行了链接操作。整个项目的架构采用的是三层架构,是为了熟悉后面引入的SpringMVC做铺垫,也温习了前面文章讲解到的Mybatis核心内容和Spring的核心内容,分别使用了XML方式和注解方式进行开发,不过只完成了新增用户和模糊搜索用户俩个功能,其他的删除和更新功能

PS:测试题,可以下载后通过对tb_person进行如下增删改查操作,来巩固完善知识点,学会SPring与mybatis整合的方法

1.添加新的人员数据:对tb_person新增一条记录

2.查询:请查询并显示所有sex是“男“或者”女“的记录

3.修改:请把jack的性别修改为”女“

4.在完成上面的几步之后,可以尝试使用SpringAOP方法,添加一个功能,在添加tb_person表记录的时候,向日志中写入新增人员信息成功,在修改tb_person表数据成功是,向日志中写入”修改人员信息成功“

各位读者想要跟着学习的,数据库文件也会在文章的资源附件中携带,各位可以自行下载学习使用。另外我的md文件也会发上去,项目文件会上传可以自己跟着学习一下

作者:Stevedash

发表于:2023年9月11日 15点17分

注:本文内容基于个人学习理解,如有错误或疏漏,欢迎指正。感谢阅读!如果觉得有帮助,请点赞和分享。

你可能感兴趣的:(SSM框架的学习,JAVA企业级应用开发必学框架,mybatis,spring,学习)