IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> mybatis-spring(注解版) -> 正文阅读

[Java知识库]mybatis-spring(注解版)

整合mybatis-spring

  1. SqlSessionFactoryBean
  2. 包扫描接口 MapperScannerConfigurer 或 @MapperScan
  3. 事务管理器 DataSourceTransactionManager

用到的注解
@Transactional 需要开事务的 annotation-driver。。@Transaction在方法上表示该方法开启事务,,标注在类上,表示类中所有方法都开启事务
@Aspect
@Mapper 感觉@Mapper没什么用??????
@MapperScan mybatis扫描接口。
@EnableAspectJAutoProxy
@RunWith
@ContxtConfiguration

实体类

@Component
public class Account {
    private String name;
    private Double money;

    @Override
    public String toString() {
        return "com.com.cj.bean.Account{" +
                "name='" + name + '\'' +
                ", money=" + money +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getMoney() {
        return money;
    }

    public void setMoney(Double money) {
        this.money = money;
    }
}

配置文件

package com.cj.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.mapper.MapperScannerConfigurer;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration
@ComponentScan("com.cj")
@MapperScan("com.cj.mapper")//必须在mapper包第一层目录下。。改为com.cj扫不到
@PropertySource("classpath:db.properties")
@ImportResource("classpath:spring.xml")
@EnableAspectJAutoProxy
public class ConfigApp {
    @Value("jdbc:mysql:///test01")
    private String url;
    @Value("com.mysql.jdbc.Driver")
    private String driver;
    @Value("root")
    private String username;
    @Value("root")
    private String password;

    @Bean
    public  DataSource dataSource() {
        DruidDataSource ds = new DruidDataSource();
        System.out.println("url:"+url);
        ds.setUrl(url);

        ds.setUsername(username);
        ds.setPassword(password);
        ds.setDriverClassName(driver);
        return ds;
    }


    @Bean  // SqlSessionFactory
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource());


        //设置 Mapper 映射文件的位置:* 表示获取 mapper 文件夹下的所有 xml 配置文件
//        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
//                .getResources("classpath:com/cj/mapper/*.xml"));

        return sqlSessionFactoryBean.getObject();
    }

    @Bean
    public DataSourceTransactionManager transactionManager(){
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
        dataSourceTransactionManager.setDataSource(dataSource());
        return dataSourceTransactionManager;
    }

//    @Bean  // mapper的扫描器
//    MapperScannerConfigurer mapperScannerConfigurer(){
//        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
//        mapperScannerConfigurer.setBasePackage("com.cj.mapper");
//        return mapperScannerConfigurer;
//    }
}

mapper

@Repository
//@Mapper
public interface AccountMapper1 {
    Account findAccountByName(String name);
    int  update(Account account);
}
<mapper namespace="com.cj.mapper.AccountMapper1">
    <select id="findAccountByName" resultType="com.cj.bean.Account" parameterType="java.lang.String">
        select * from account where name= #{name}
    </select>
    <update id="update">
        update account set money=#{money} where name=#{name}
    </update>
</mapper>

service

@Component
@Transactional
public class AccountServiceImpl implements AccountService {
    @Autowired
    private AccountMapper1 accountMapper;

    @Override
    public void transfer(String send, String recieve, Double money) {
        Account sendA = accountMapper.findAccountByName(send);
        Account recieveA = accountMapper.findAccountByName(recieve);
        sendA.setMoney(sendA.getMoney()-money);
        recieveA.setMoney(recieveA.getMoney()+money);

        accountMapper.update(sendA);
        accountMapper.update(recieveA);
    }
}
@Aspect
@Component
public class AccountTransaction {
    @Pointcut("execution(* com.cj.service.*.*(..))")
    public void pointcut(){}
    @Before("pointcut()")
    public void before(JoinPoint joinPoint){
        Signature signature = joinPoint.getSignature();
        System.out.println(signature.getName()+"执行了");
    }
}

xml配置事务扫描器

<tx:annotation-driven transaction-manager="transactionManager"/>

测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ConfigApp.class)
public class Main {
    @Autowired
    AccountMapper1 accountMapper;

 @Test
 public void test0(){
     System.out.println(accountMapper);
     System.out.println(accountMapper.findAccountByName("aaa"));
    /* Account account = new Account();
     account.setMoney(100D);
     account.setName("aaa");
     accountMapper.update(account);*/
 }

 @Autowired
    AccountService accountService;
  @Test
  public void test1(){
      accountService.transfer("aaa","bbb",500D);
  }
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:19:02  更:2021-08-31 15:20:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:06:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码