视频素材网站建设,职业生涯规划大赛成长赛道,国外网站模板,推广营销方案文章目录一、实现步骤1、准备数据库表2、在IDEA中创建一个模块#xff0c;并引入依赖3、基于三层架构实现4、编写pojo5、编写mapper接口6、编写mapper配置文件7、编写service接口和service接口的实现类8、编写jdbc.properties配置文件9、编写mybatis-config.xml配置文件10、编…
文章目录一、实现步骤1、准备数据库表2、在IDEA中创建一个模块并引入依赖3、基于三层架构实现4、编写pojo5、编写mapper接口6、编写mapper配置文件7、编写service接口和service接口的实现类8、编写jdbc.properties配置文件9、编写mybatis-config.xml配置文件10、编写spring.xml配置文件【配置地狱】11、编写测试程序添加事务进行测试一、实现步骤
1、准备数据库表
t_act银行账户
2、在IDEA中创建一个模块并引入依赖
spring-contextspring-jdbcmysql驱动mybatismybatis-spring mybatis提供的与spring框架集成的依赖德鲁伊连接池junit
为什么有了mybatis驱动还需要jdbc 因为事务tx在jdbc包里 dependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.11/versionscopetest/scope/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.32/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.2.5.RELEASE/version/dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion5.2.5.RELEASE/version/dependencydependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.6/version/dependencydependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion1.3.1/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.0.20/version/dependency/dependencies3、基于三层架构实现
创建所有的包 com.powernode.bank.pojo com.powernode.bank.mapper com.powernode.bank.service com.powernode.bank.service.impl 4、编写pojo
Account:属性私有化提供公开的setter getter toString
public class Account {private String actno;private double balance;public Account(String actno, double balance) {this.actno actno;this.balance 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;}Overridepublic String toString() {return Account{ actno actno \ , balance balance };}
}5、编写mapper接口
AccountMapper接口定义方法
public interface AccountMapper {//该接口的实现类不需要写是mybatis通过动态代理机制生成的实现类//查询所有的账户ListAccount seleteAllAccount();//根据actno查询指定账户Account selectByActno(String actno);//增加账户int insertAccount(Account account);//删除账户int deleteByActno(String actno);//修改账户int update(Account account);
}6、编写mapper配置文件
在配置文件中配置命名空间以及每一个方法对应的SQL mapper namespace“com.powernode.bank.mapper.AccountMapper” ?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttps://mybatis.org/dtd/mybatis-3-mapper.dtdmapper namespacecom.powernode.bank.mapper.AccountMapperselect idselectAllAccount resultTypeaccountselect * from t_act/selectselect idselectByActno resultTypeaccountselect * from t_actwhere actno#{actno};/selectinsert idinsertAccountinsert into t_actvalues(#{actno},#{balance})/insertdelete iddeleteByActnodelete from t_actwhere actno#{actno}/deleteupdate idupdateupdate t_actset balance#{balance} where actno#{actno}/update/mapper7、编写service接口和service接口的实现类
AccountService
public interface AccountService {//业务接口int save(Account account);int deleteByActno(String actno);int modify(Account account);Account getByActno(String actno);ListAccount getAll();void transfer(String fromActno,String toActno,double money);
}AccountServiceImpl 注意一定要进行AccountServiceImpl Bean实例化Service(“accountService”)
以及一定要注入AccountMapper Bean注入 Autowired
Service(accountService)
public class AccountServiceImpl implements AccountService {Autowiredprivate AccountMapper mapper;Overridepublic int save(Account account) {int i mapper.insertAccount(account);return i;}Overridepublic int deleteByActno(String actno) {int i mapper.deleteByActno(actno);return i;}Overridepublic int modify(Account account) {mapper.update(account);return 0;}Overridepublic Account getByActno(String actno) {return mapper.selectByActno(actno);}Overridepublic ListAccount getAll() {return mapper.seleteAllAccount();}Overridepublic void transfer(String fromActno, String toActno, double money) {Account fromAct mapper.selectByActno(fromActno);Account toAct mapper.selectByActno(toActno);if(fromAct.getBalance()money){throw new RuntimeException(余额不足);}fromAct.setBalance(fromAct.getBalance()-money);toAct.setBalance(toAct.getBalance()money);int count mapper.update(fromAct);count mapper.update(toAct);if(count2){System.out.println(转账成功);}else{throw new RuntimeException(转账失败);}}
}8、编写jdbc.properties配置文件
jdbc.drivercom.mysql.jdbc.Driver
jdbc.urljdbc:mysql://localhost:3306/dududu?useSSLfalse
jdbc.usernameroot
jdbc.password1234569、编写mybatis-config.xml配置文件
这个文件可以没有大部分的配置可以转移到spring配置文件中
如果遇到mybatis相关的系统级配置还是需要这个文件?xml version1.0 encodingUTF-8 ? !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configuration!--设置日志输出语句,显示相应操作的sql语名--settingssetting namelogImpl valueSTDOUT_LOGGING//settings
/configuration10、编写spring.xml配置文件【配置地狱】
1、组件扫描 2、引入外部的属性文件 3、数据源 4、SqlSessionFactoryBean配置 注入mybatis核心配置文件 指定别名包 注入数据源 5、Mapper扫描配置器主要扫描mapper接口生成代理类 扫描指定的包 6、事务管理器 DataSourceTransactionManager 注入数据源 7、启用事务注解【启用之后在业务实现类当中添加注解Transactional 事务才会起作用】 注入事务管理器 ?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/context xmlns:txhttp://www.springframework.org/schema/txxsi:schemaLocationhttp://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-packagecom.powernode.bank/--!--在spring的核心配置文件中引入其他的子spring配置文件--context:component-scan base-packagecom.powernode.bank/context:component-scancontext:property-placeholder locationjdbc.properties/context:property-placeholder!--数据源--bean iddataSource classcom.alibaba.druid.pool.DruidDataSourceproperty namedriverClassName value${jdbc.driver}/property nameurl value${jdbc.url}/property nameusername value${jdbc.username}/property namepassword value${jdbc.password}//bean!--配置SqlSessionFactoryBean--bean classorg.mybatis.spring.SqlSessionFactoryBean!--注入数据源--property namedataSource refdataSource/!--指定mybatis核心配置文件--property nameconfigLocation valuemybatis-config.xml/!--指定别名--property nametypeAliasesPackage valuecom.powernode.bank.pojo//bean!--Mapper扫描配置器主要扫描Mapper接口生成代理类--bean classorg.mybatis.spring.mapper.MapperScannerConfigurerproperty namebasePackage valuecom.powernode.bank.mapper//bean!--事务管理器--bean idtxManager classorg.springframework.jdbc.datasource.DataSourceTransactionManagerproperty namedataSource refdataSource//bean!--启用事务注解--tx:annotation-driven transaction-managertxManager//beans11、编写测试程序添加事务进行测试 Testpublic void testSM(){ApplicationContext ac new ClassPathXmlApplicationContext(spring.xml);AccountService accountService ac.getBean(accountService,AccountService.class);//accountService.transfer(act_001,act_002,2000);accountService.save(new Account(act_005,20));ListAccount AccountList accountService.getAll();AccountList.forEach(list-{System.out.println(账号为list.getActno(),账户余额为list.getBalance());});}