Spring整合MyBatis

server/2024/12/22 20:01:19/

准备数据表

create database spring_db character set utf8;
use spring_db;
create table tbl_account(id int primary key auto_increment,name varchar(35),money double
);

maven导入项目中需要的jar包

  <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.20</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.2.8</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency></dependencies>

创建jdbc.properties外部配置文件

jdbc.name=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_db?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
jdbc.username=root
jdbc.password=123456

创建数据源的配置类JdbcConfig

package com.example.config;import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;import javax.sql.DataSource;public class JdbcConfig {@Value("${jdbc.name}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String username;@Value("${jdbc.password}")private String password;@Beanpublic DataSource dataSource(){DruidDataSource ds=new DruidDataSource();ds.setDriverClassName(driver);ds.setUrl(url);ds.setUsername(username);ds.setPassword(password);return ds;}
}

创建MyBatis配置类MyBatisConfig

package com.example.config;import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;import javax.sql.DataSource;public class MyBatisConfig {@Beanpublic SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){SqlSessionFactoryBean sb=new SqlSessionFactoryBean();//设置模型类的别名扫描sb.setTypeAliasesPackage("com.example.domain");//设置数据源sb.setDataSource(dataSource);return sb;}//定义bean,返回MapperScannerConfigurer对象//相当于MyBatis配置文件中的<package>扫描包路径@Beanpublic MapperScannerConfigurer mapperScannerConfigurer(){MapperScannerConfigurer msc = new MapperScannerConfigurer();msc.setBasePackage("com.example.dao");return msc;}
}

创建Spring的配置类

package com.example.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.example")
//加载外部配置文件
@PropertySource("classpath:jdbc.properties")
//导入数据源配置类和MyBatis配置类
@Import({JdbcConfig.class,MyBatisConfig.class})
public class SpringConfig {
}

创建实体类POJO层

package com.example.damain;public class Account {private Integer id;private String name;private Double money;//省略了getter方法和setter方法//省略了toString方法

创建数据接口层dao层

package com.example.dao;import com.example.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 tbl_account(name,money)values(#{name},#{money})")void save(Account account);@Delete("delete from tbl_account where id = #{id} ")void delete(Integer id);@Update("update tbl_account set name = #{name} , money = #{money} where id = #{id} ")void update(Account account);@Select("select * from tbl_account")List<Account> findAll();@Select("select * from tbl_account where id = #{id} ")Account findById(Integer id);
}

创建Service接口和实现类

package com.example.service;import com.example.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);
}
package com.example.service.impl;import com.example.dao.AccountDao;
import com.example.domain.Account;
import com.example.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class AccountServiceImpl implements AccountService {@Autowiredprivate AccountDao dao;@Overridepublic void save(Account account) {dao.save(account);}@Overridepublic void delete(Integer id) {dao.delete(id);}@Overridepublic void update(Account account) {dao.update(account);}@Overridepublic List<Account> findAll() {return dao.findAll();}@Overridepublic Account findById(Integer id) {return dao.findById(id);}
}

创建运行类

import com.example.config.SpringConfig;
import com.example.domain.Account;
import com.example.service.AccountService;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Test01 {@Testpublic void test01(){AnnotationConfigApplicationContext app = new AnnotationConfigApplicationContext(SpringConfig.class);AccountService bean = app.getBean(AccountService.class);Account account = bean.findById(1);System.out.println(account);}
}

在这里插入图片描述


http://www.ppmy.cn/server/6668.html

相关文章

十大排序——5.选择排序

这篇文章我们来介绍一下选择排序 目录 1.介绍 2.代码实现 3.小结与思考 1.介绍 选择排序&#xff1a;选择排序&#xff08; Selection sort&#xff09;是一种简单直观的排序算法。它的工作原理是每一趟从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个…

OpenHarmony实战开发-如何实现防盗链应用功能。

介绍 目前许多网络图片资源有防盗链功能&#xff0c;需要在请求头中设置正确的Referer。本模块使用了第三方库imageknife&#xff0c;通过在请求头中添加Referer来获取防盗链图片功能。同时我们可以设置请求头中的其他参数&#xff0c;比如User-Agent来设置客户端&#xff0c;…

Day08React——第八天

useEffect 概念&#xff1a;useEffect 是一个 React Hook 函数&#xff0c;用于在React组件中创建不是由事件引起而是由渲染本身引起的操作&#xff0c;比如发送AJAx请求&#xff0c;更改daom等等 需求&#xff1a;在组件渲染完毕后&#xff0c;立刻从服务器获取频道列表数据…

【QT教程】QT6物联网应用

QT6物联网应用 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费Q…

.NET 发布,部署和运行应用程序

.NET应用发布 发布.Net应用有很多种方式&#xff0c;下面列举三种发布方式&#xff1a; 单文件发布跨平台发布Docker发布 单文件发布 右键工程&#xff0c;选择“发布”&#xff0c;部署模式选择“独立”&#xff0c;目标运行时选择自己想要部署到的系统&#xff0c;我这里用…

C++_特殊类的设计和单例模式

文章目录 学习目标&#xff1a;1.请设计一个类&#xff0c;不能被拷贝2. 请设计一个类&#xff0c;只能在堆上创建对象3. 请设计一个类&#xff0c;只能在栈上创建对象4. 请设计一个类&#xff0c;不能被继承5. 请设计一个类&#xff0c;只能创建一个对象(单例模式) 特殊类的设…

Maven多模块管理

Maven多模块管理 在了解怎么进行Maven多模块管理之前&#xff0c;先聊聊为什么要进行Maven多模块管理 为什么要Maven多模块管理&#xff1f; 在传统的单体架构开发下&#xff0c;一个项目中的依赖只需要使用一个pom.xml文件管理即可。但是随着微服务的流行&#xff0c;将原有…

HCIP——HCIA回顾(笔记)

OSI OSI -- 开放式系统互联参考模型&#xff08;7层参考模型&#xff09; 应用层 抽象语言 -》编码 表示层 编码-》二进制 会话层 提供应用程序的会话地址 传输层 分段 数据包容量不易过大&#xff0c;否则影响传输效率及共享宽带&#xff1b;分段大小由MTU决定&…