首页 > 其他分享 >spring整合mybatis解析(黑马SSM-26)

spring整合mybatis解析(黑马SSM-26)

时间:2024-11-09 18:15:27浏览次数:3  
标签:26 spring id SSM org import com public itheima

spring整合mybatis

文章目录


前言

当我们在spring里面执行数据库操作的时候,发现原始的方法来操作数据库非常麻烦,而且影响代码的美观,所以我们的spring整合mybatis横空出世,就是为了来解决我们的麻烦。

一、核心对象分析

1.环境准备

数据库的创建

我们在旁边找到数据库,找到对话框的左上方的加号,添加我们是数据源mysql
在这里插入图片描述
然后输入用户名和密码,在确认一下数据库是否连接到,如果连接成功我们就可以创建数据库表了
在这里插入图片描述
然后我们添加我们的架构
注意:我们这个架构的名字要与后面要创建的 jdbc.properties文件的jdbc.url相同
在这里插入图片描述
然后我们开始创建我们表结构
在这里插入图片描述
注意:如果我们d的IDEA没有这个创建旧表的按键可以参考创建旧表创建方法
然后进行表内容创建
在这里插入图片描述
最后进行数据插入
我们先创建查询控制台
在这里插入图片描述
然后进行数据插入
代码:

insert into table_name(id, name, money) VALUES (1, 'tom', 100),(2, 'jerry', 200)

结果:
在这里插入图片描述

项目创建

我们在左上方找到文件,在文件里面找到新模块
在这里插入图片描述
然后在新建模块里面创建
注意:我们的模块没有父项,并且我们模块的位置不能被其他模块包含,模块管理我们选择maven进行模块管理
在这里插入图片描述

(1)配置文件的创建及配置

pom.xml文件的配置

我们找到pom.xml文件,将下面的代码复制到pom.xml文件里面,引入我们所需要的依赖
代码:

<dependencies>
        <!--引入spring的依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.1.12</version>
        </dependency>
        <!--引入第三方数据库连接池的依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.16</version>
        </dependency>
        <!--引入操作数据库mybatis的依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>                
            <version>3.5.6</version>
        </dependency>
        <!--引入数据库驱动的依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
    </dependencies>
    </dependencies>
SqlMapConfig.xml文件的配置

配置mybatis框架的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="jdbc.properties"></properties>            
    <typeAliases>
        <package name="com.itheima.domain"/>
    </typeAliases>
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"></property>
                <property name="url" value="${jdbc.url}"></property>
                <property name="username" value="${jdbc.username}"></property>
                <property name="password" value="${jdbc.password}"></property>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <package name="com.itheima.dao"></package>
    </mappers>
</configuration>
jdbc.properties文件的配置

配置连接数据库的相关信息
代码:
driverClassName:数据库连接池驱动类

url:数据库的地址

username:用户名

password:密码

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/tlias
jdbc.username=root
jdbc.password=123456

(2)相关类的创建

模块目录:

在这里插入图片描述

dao接口的创建

dao这个接口作用是操作数据库的类
注意:我们这个的数据库表因为不同所以需要更改
代码:

package com.itheima.dao;

import com.itheima.domain.Account;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;    
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

public interface AccountDao {

    @Insert("insert into account.table_name(name,money)values(#{name},#{money})")
    void save(Account account);

    @Delete("delete from account.table_name where id = #{id} ")
    void delete(Integer id);

    @Update("update account.table_name set name = #{name} , money = #{money} where id = #{id} ")
    void update(Account account);

    @Select("select * from account.table_name")
    List<Account> findAll();

    @Select("select * from account.table_name where id = #{id} ")
    Account findById(Integer id);
}
domain类的创建

domain这个类作用是存储操作数据库后获得的信息
代码:

package com.itheima.domain;

import java.io.Serializable;

public class Account implements Serializable {
    private Integer id;
    private String name;
    private Double money;

    /**
     * 获取
     * @return id
     */
    public Integer getId() {
        return id;
    }

    /**
     * 设置
     * @param id
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return money
     */
    public Double getMoney() {
        return money;
    }

    /**
     * 设置
     * @param money
     */
    public void setMoney(Double money) {
        this.money = money;
    }
    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", money=" + money +
                '}';
    }


}

service类的创建

service这个类作用是调用dao的各个方法来操作数据库,将得到的数据进行处理

service接口创建

代码:

package com.itheima.service;

import com.itheima.domain.Account;

import java.util.List;

public interface AccountService {

    void save(Account account);

    void delete(Integer id);

    void update(Account account);

    List<Account> findAll();

    Account findById(Integer id);

}

service实现类创建

在我们继承我们的service接口之后,想自动重写接口方法,我们快捷键是Alt+Enter
代码:

package com.itheima.service.impl;

import com.itheima.dao.AccountDao;
import com.itheima.domain.Account;
import com.itheima.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;    
import org.springframework.stereotype.Service;

import java.util.List;
@Service
public class AccountServiceImpl implements AccountService {

    @Autowired
    private AccountDao accountDao;

    public void save(Account account) {
        accountDao.save(account);
    }

    public void update(Account account){
        accountDao.update(account);
    }

    public void delete(Integer id) {
        accountDao.delete(id);
    }

    public Account findById(Integer id) {
        return accountDao.findById(id);
    }

    public List<Account> findAll() {
        return accountDao.findAll();
    }
}

主函数App的创建

代码:

package com.itheima;

import com.itheima.dao.AccountDao;
import com.itheima.domain.Account;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class App {
    public static void main(String[] args) throws IOException {
        // 1. 创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        // 2. 加载SqlMapConfig.xml配置文件
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 3. 创建SqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        // 4. 得到具体的连接SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 5. 获取到操作数据库的接口
        AccountDao accountDao = sqlSession.getMapper(AccountDao.class);
        //执行数据库的操作
        Account ac = accountDao.findById(1);
        System.out.println(ac);

        // 6. 释放资源
        sqlSession.close();
    }
}

结果:
在这里插入图片描述

2.spring要管理的核心对象

(1)mybatis核心对象分析

在主函数当中我们可以把我们的代码分成四部分
在这里插入图片描述
第一部分:
该部分为当中类为factory对象,就是用来造对象的,这是早期spring进行bean管理的方法,所以我们知道该类就是我们mybatis的核心对象
第二部分:
该部分只是从数据连接池中获取一个连接对象,从而进行后面的操作,所以也不可能是核心对象
第三部分:
该部分只是从连接对象获取要操作数据库的对象,来进行数据操作,所以不会是核心对象
第四部分:
该部分只是关闭数据库的连接,所以不可能是核心东西

(2)整合mybatis

在这里插入图片描述
第一部分:
该部分只是在读取配置文件的信息,即我们要连接数据库的哪个架构
第二部分:
该部分只是在当我们在mapper操作完数据库之后,我们的数据由哪个类型进行封装(存储)
第三部分:
该部分就是我们sqlsessionfactory在连接数据库的时候,配置的信息进行注入,所以更加肯定了,sqlsessionfactory就是我们mybatis的核心对象,如果数据库都没有连接,我们后来的方法怎么操作数据库呢?
第四部分:
该部分就是sqlSession.getMapper(AccountDao.class)所需要返回要操作数据库的类,sqlsessionfactory并不负责生成这个类,而是sqlSession负责

二、spring整合mybatis方法

目录:
在这里插入图片描述

1.pom.xml相关依赖的引入

代码:

<!--引入spring对jdbc的支持的依赖-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.10.RELEASE</version>
</dependency>
<!--引入mybatis-spring的依赖-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.0</version>
</dependency>

2.配置类的实现

实现SpringConfig类
代码:

package com.itheima.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;

@Configuration
@ComponentScan("com.itheima")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class, MybatisConfig.class})
public class SpringConfig {
}

实现JdbcConfig类
代码:

package com.itheima.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;
public class JdbcConfig {
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;
    @Bean
    public DataSource getDataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(username);
        ds.setPassword(password);
        return null;
    }


}

实现MybatisConfig类
代码:

package com.itheima.config;

import com.itheima.dao.AccountDao;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;

public class MybatisConfig {



    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
        SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
        ssfb.setTypeAliasesPackage("com.itheima.domain");
        ssfb.setDataSource(dataSource);
        return ssfb;
    }

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.itheima.dao");
        return msc;
    }

}

对比
在这里插入图片描述

3.测试函数的创建

代码:

package com.itheima;

import com.itheima.config.MybatisConfig;
import com.itheima.domain.Account;
import com.itheima.service.AccountService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class App2 {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MybatisConfig.class);
        AccountService service = applicationContext.getBean(AccountService.class);
        Account byId = service.findById(1);
        System.out.println(byId);
    }
}

结果:
在这里插入图片描述

标签:26,spring,id,SSM,org,import,com,public,itheima
From: https://blog.csdn.net/2302_80446546/article/details/143645652

相关文章

  • 对于spring的核心容器的理解(黑马SSM)
    对于spring的核心容器的理解(黑马SSM)文章目录对于spring的核心容器的理解(黑马SSM)对于我们spring的核心容器主要分三个部分:容器相关:BeanFactory:ApplicationContext:FileSystemXmlApplicationContext:ClassPathXmlApplicationContext:Bean相关:Bean的创建:Bean的属性依赖注......
  • 基于SpringBoot动物之家平台的设计与实现
    博主主页:一点源码博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容:毕业设计,SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Python、Nodejs、小程序、安卓app、大数据等设计与开发......
  • 基于SpringBoot高校宿舍管理系统小程序的设计与实现
    博主主页:一点源码博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容:毕业设计,SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Python、Nodejs、小程序、安卓app、大数据等设计与开发......
  • 基于SpringBoot高校教研室教学日历管理系统的设计与实现
    博主主页:一点源码博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容:毕业设计,SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Python、Nodejs、小程序、安卓app、大数据等设计与开发......
  • 基于SpringBoot+Vue茶文化传播平台的设计与实现
    博主主页:一点素材博主简介:专注Java技术领域和毕业设计项目实战、Java微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容:毕业设计,SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Python、Nodejs、小程序、安卓app、大数据等设计与开发感兴趣......
  • 基于SpringBoot高等院校床位自选系统的设计与实现
    博主主页:一点素材博主简介:专注Java技术领域和毕业设计项目实战、Java微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容:毕业设计,SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Python、Nodejs、小程序、安卓app、大数据等设计与开发感兴趣......
  • 基于SpringBoot国医大师医案推荐网站的设计与实现
    博主主页:一点素材博主简介:专注Java技术领域和毕业设计项目实战、Java微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容:毕业设计,SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Python、Nodejs、小程序、安卓app、大数据等设计与开发感兴趣......
  • 基于SpringBoot飞天外卖配送系统的设计与实现
    博主主页:一点教程博主简介:专注Java技术领域和毕业设计项目实战、Java微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容:毕业设计,SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Python、Nodejs、小程序、安卓app、大数据等设计与开发感兴趣......
  • Webrtc播放H265的技术探索(datachannel+wasm)
    通过这个帖子把我对通过webrtc方式播放H265视频的技术探索过程记录下来。虽然最终不一定能够形成产品进行实现,但觉得也是一个有意义的过程。很多事情不就是这样吗?也希望将来能够有同道中人看到这个帖子,一起分享交流~-----------------------------一。背景1)由于Webrtc......
  • 【含文档】基于ssm+jsp的客户管理系统(含源码+数据库+lw)
    1.开发环境开发系统:Windows10/11架构模式:MVC/前后端分离JDK版本:JavaJDK1.8开发工具:IDEA数据库版本:mysql5.7或8.0数据库可视化工具:navicat服务器:apachetomcat主要技术:Java,Spring,SpringMvc,mybatis,mysql,vue2.视频演示地址3.功能管理员登录进入......