Spring框架集成Mybatis

news/2024/9/22 5:34:13

本例演示转账操作

  • 准备数据库表t_act(账户表)
  • 创建maven模块,引入依赖
  <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>6.1.8</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.16</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>3.0.3</version><!--Mybatis-spring如果使用2.*版本会报错.--></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.17</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.1.7</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.7</version></dependency></dependencies>
  • pojo实体类
package com.powernode.bank.pojo;public class Account {private String actno;private Double balance;/*public Account() {}*/public String getActno() {return actno;}public void setActno(String actno) {this.actno = actno;}public Double getBalance() {return balance;}public void setBalance(Double balance) {this.balance = balance;}public Account(String actno, Double balance) {this.actno = actno;this.balance = balance;}@Overridepublic String toString() {return "Account{" +"actno='" + actno + '\'' +", balance=" + balance +'}';}
}
  • 编写mapper接口
package com.powernode.bank.mapper;import com.powernode.bank.pojo.Account;import java.util.List;public interface AccountMapper {//这就是Daoint insert(Account account);int deleteByActno(String  actno);int update(Account account);Account selectByActno(String actno);List<Account> selectAll();
}
  • 编写Mapper配置文件,该配置文件需要和Mapper接口在同一个目录或在resource目录下创建和Mapper接口相同目录结构
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.powernode.bank.mapper.AccountMapper"><insert id="insert">insert into t_act values(#{actno}, #{balance})</insert><delete id="deleteByActno">delete from t_act where actno = #{actno}</delete><update id="update">update t_act set balance = #{balance} where actno = #{actno}</update><select id="selectByActno" resultType="com.powernode.bank.pojo.Account">select * from t_act where actno = #{actno}</select><select id="selectAll" resultType="com.powernode.bank.pojo.Account">select * from t_act</select>
</mapper>
  • 编写service接口和service接口实现类
package com.powernode.bank.service;import com.powernode.bank.pojo.Account;import java.util.List;public interface AccountService {//开户int save(Account act);//销户int deleteByActno(String actno);//修改账户int modify(Account account);//查询账户Account getByActno(String actno);//获取所有账户List<Account> getAll();//转账void transfer(String fromActno, String toActno, double money);
}
package com.powernode.bank.service.impl;import com.powernode.bank.mapper.AccountMapper;
import com.powernode.bank.pojo.Account;
import com.powernode.bank.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;import java.util.List;@Transactional
@Service
public class AccountServiceImpl implements AccountService {@Autowiredprivate AccountMapper accountMapper;@Overridepublic int save(Account act) {return accountMapper.insert(act);}@Overridepublic int deleteByActno(String actno) {return accountMapper.deleteByActno(actno);}@Overridepublic int modify(Account account) {return accountMapper.update(account);}@Overridepublic Account getByActno(String actno) {return accountMapper.selectByActno(actno);}@Overridepublic List<Account> getAll() {return accountMapper.selectAll();}@Overridepublic void transfer(String fromActno, String toActno, double money) {Account fromAccount = accountMapper.selectByActno(fromActno);if (fromAccount.getBalance()< money){throw new RuntimeException("余额不足");};Account toAct = accountMapper.selectByActno(toActno);fromAccount.setBalance(fromAccount.getBalance()-money);toAct.setBalance(toAct.getBalance()+money);int count = accountMapper.update(fromAccount);count += accountMapper.update(toAct);if (count != 2){throw new RuntimeException("转账失败");}}
}
  • 编写jdbc.properties配置文件
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.1.41:3306/test
jdbc.username=root
jdbc.password=*********
  • 编写mybatis-config.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><setting name="logImpl" value="STDOUT_LOGGING"/></settings>
</configuration>
  • 编写spring.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!--组件扫描--><context:component-scan base-package="com.powernode.bank"/><!--引入外部数据源--><context:property-placeholder location="jdbc.properties"/><!--数据源--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean><!--SqlSessionFactoryBean--><bean class="org.mybatis.spring.SqlSessionFactoryBean"><!--注入数据源--><property name="dataSource" ref="dataSource"/><!--指定mybatis核心配置文件--><property name="configLocation" value="mybatis-config.xml"/><!--指定别名--><property name="typeAliasesPackage" value="com.powernode.bank.pojo"/></bean><!--Mapper扫描配置器,主要扫描Mapper接口,生成代理类--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.powernode.bank.mapper"/></bean><!--事务管理器--><bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!--启用事务注解--><tx:annotation-driven transaction-manager="txManager"/>
</beans>
  • 测试
public class SMTest {@Testpublic void testSM(){ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("spring.xml");AccountService accountServiceImpl = classPathXmlApplicationContext.getBean("accountServiceImpl", AccountService.class);try{accountServiceImpl.transfer("act-001","act-002", 10000);System.out.println("转账成功");}catch(Exception e){e.printStackTrace();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/47153.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

《UML基础、案例与应用》习题记录-第21章

部分习题,使用visio或plantuml,非正确答案,仅供参考,欢迎评论,谢绝转载。 第21章 设计外观、感觉和部署 21.10.2习题 1. 2. 3. 欢迎大家评论交流,发现博文中存在的问题一定要留言哦

中台框架模块开发实践-代码生成器的添加及使用

前言之前已经分享过几篇关于中台项目框架的文章,相关介绍就不再赘述 所谓工欲善其事必先利其器,一个项目拥有一个代码生成器是很有必要的,能够大大的节省时间,减少手误,提供开发效率(ps:特别小团队搞微服务但是没有代码生成器,简直要了老命) 本文将分享如何在中台框架项目…

众所周知,配置即代码≠基础设置即代码

配置即代码是什么?怎么都是基础设施即代码?前段时间翻到几条留言,问: “配置即代码和基础设施即代码一样吗?” “配置即代码是什么?怎么都是基础设施即代码?” 我们都是知道,DevOp的快速发展,让服务器管理与配置的时间大大减少,配置即代码和基础设施即代码作为DevOps…

WPF 做一个超级简单的 1024 数字接龙游戏

这是一个我给自己做着玩的游戏,没有什么复杂的界面,就一些简单的逻辑游戏的规则十分简单,那就是有多个列表。程序会给出一个数字,玩家决定数字放在哪个列表里面。如果放入列表里面的数字和列表里面最后一个数字相同,那两个数字将会叠加进行合并,合并两个 1024 将会自动清…

SqlSugar操作Sqlite数据库

SqlSugar操作Sqlite数据库 SqlSugar官网 .net core和.net5/.net6/.net7/.net8/.net9/.net10安装SqlSugarCore。 net framework4.6+ 安装SqlSugar。 以下代码都在一个SqlSugarMethod类中。 获得数据库对象:这里要注意的是FilePath路径为生成程序的目录\bin\Debug\net8.0内,而不…

呼吁 《上海市卫生健康信息技术应用创新白皮书》改正 C# 被认定为A 组件是错误认知

近日,《上海市卫生健康“信息技术应用创新”白皮书》(以下简称《白皮书》)正式发布,介绍了“医疗信创核心应用适配方法、公立医院信息系统及全民健康信息平台信创设计思路”, 其中发现了一个错误的认知,C#/.NET 被认定为A 组件, 具体详见下图:C#/.NET 平台需要被区分为两…

【译】VisualStudio.Extensibility 17.10:用 Diagnostics Explorer 调试您的扩展

VisualStudio. Extensibility 帮助您构建在主 IDE 进程之外运行的扩展,以提高性能和可靠性。它还提供了一个时尚而直观的基于 .NET 8 的 API 和全面且维护良好的文档,可以帮助您开发出色的扩展。想象一下,创建的扩展比以往任何时候都运行得更快、更流畅!如果您最近还没有跟…

一个非侵入式跟踪分析程序

otel-profiling-agent为elastic开源项目,用于对生产环境中的应用程序进行性能分析,帮助开发者理解程序的运行情况,识别瓶颈,优化性能。用于包括CPU和内存使用情况的分析、调用跟踪、性能指标收集等功能。它是一个用于Linux的全系统、跨语言的性能分析器,通过eBPF(Extende…