spring整合mybatis和Junit

该项目使用spring纯注解方式开发,用配置类取代spring的配置文件

一、导入依赖

整合Junit需要导入spring-test

整合mybatis需要导入spring-jdbc、mybatis-spring

 
        
        
            org.springframework
            spring-context
            5.3.18
        

        
        
            com.alibaba
            druid
            1.2.8
        
        
        
            junit
            junit
            4.13.2
            test
        

        
        
            org.springframework
            spring-test
            5.3.19
            test
        

        
            mysql
            mysql-connector-java
            5.1.48
        
        
        
            org.mybatis
            mybatis-spring
            1.3.1
        
        
            org.mybatis
            mybatis
            3.5.7
        
        
            org.springframework
            spring-jdbc
            5.3.19
        
    

二、创建目录结构

  1. 配置类
  2. mapper接口
  3. service和serviceimpl
  4. pojo

    在这里插入图片描述5.在resource创建jdbc.properties

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatis01jdbc.username=rootjdbc.password=root

三、创建spring配置类、mybatis配置类、jdbc配置类

SpringConfig.java

该配置类需要在类上方添加注解@Configuration表名自己是spring的配置类,还需要扫描添加了注解的包,即扫描bean@ComponentScan,以及导入properties配置文件跟别的配置类

@Configuration
@ComponentScan({"com.xs.mapper","com.xs.service"})
@Import({JDBCConfig.class,MyBatisConfig.class})
@PropertySource("classpath:jdbc.properties")
public class SpringConfig {

}

MybatisConfig.java替代了mybatis的配置文件

导入第三方bean只需要在方法上方添加@Bean注解,这样就会将方法的返回值作为一个Bean。如果需要传别的bean的话,只需要在方法中写形参即可。

public class MyBatisConfig {
    /**
     * 配置sqlSessionFactory
     * 设置数据源
     * 设置别名
     * @param dataSource
     * @return
     */
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
        SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSource);
        sqlSessionFactory.setTypeAliasesPackage("com.xs.pojo");
        return sqlSessionFactory;
    }

    /**
     * 扫描mapper接口
     * @return
     */
    @Bean
    public MapperScannerConfigurer mapperScanner(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.xs.mapper");
        return msc;
    }

}

JdbcConfig.java

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 dataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName(driver);
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        return druidDataSource;
    }
}

四、创建pojo类和service、serviceimpl、mapper接口

其中需要注意的是serviceImpl中需要引入mapper接口。使用@AutoWire注解引入。这个注解是按类型匹配

Account.java类

public class Account {
    private Integer id;
    private String name;
    private Double money;
    get/set方法...
    有参无参构造函数...
    }

AccountMapper.java

注意:当传入多个参数时,需要添加@Param注解。该注解会用它的值作为传入mybatis’中的参数的值的名称。

@Repository
public interface AccountMapper {
    @Select("select * from t_account")
    public List accounts();

    @Select("select * from t_account where id=#{id}")
    public Account findById(Integer id);

    @Insert("insert into t_account(name,money) values(#{name},#{money})")
    public int addAccount(@Param("name") String name,@Param("money") double money);

    @Insert("insert into t_account(name,money) values(#{name},#{money})")
    public int addAccount2(Account account);

    @Update("update t_account set name=#{name},money=#{money} where id=#{id}")
    public int updateAccount(Account account);

    @Delete("delete from t_account where id=#{id}")
    public int delAccount(Integer id);
}

AccountService.java

public interface AccountService {
//    查询全部
    public List accounts();
//    按id查询
    public Account findById(Integer id);
//    增
    public int addAccount(String name,double money);
//    传入对象
    public int addAccount2(Account account);
//    改
    public int updateAccount(Account account);
//    删
    public int delAccount(Integer id);
}

AccountServiceImpl.java

该类继承了AccountService.java

@Service
public class AccountServiceImpl implements AccountService {
//    注入AccountMapper
    @Autowired
    public AccountMapper accountMapper;
    public List accounts() {
        return accountMapper.accounts();
    }

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

    public int addAccount(String name,double money) {
        return accountMapper.addAccount(name,money);
    }

    @Override
    public int addAccount2(Account account) {
        return accountMapper.addAccount2(account);
    }

    public int updateAccount(Account account) {
        return accountMapper.updateAccount(account);
    }

    public int delAccount(Integer id) {
        return accountMapper.delAccount(id);
    }
}

五、进行测试

//设置类运行器
@RunWith(SpringJUnit4ClassRunner.class)
// 设置spring环境对应的配置类
@ContextConfiguration(classes = SpringConfig.class)
public class springMybatisTest {

    @Autowired
    private AccountService accountService;
//    查询所有
    @Test
    public void accountsTest(){
        List accounts = accountService.accounts();
        accounts.forEach(account-> System.out.println(account));
    }
//    增加
    @Test
    public void addAccountTest(){
//        int i = accountService.addAccount("卫三",1000);
        int i = accountService.addAccount2(new Account(null, "应星决", 20000.0));
        System.out.println(i);
    }

//    修改
    @Test
    public void updatrAccountTest(){
        Account account = new Account(9,"花花",10000.0);
//        account.setMoney(10000.0);
//        account.setName("熊二");
        int i = accountService.updateAccount(account);
        System.out.println(i);
    }

//    根据id查询
    @Test
    public void selAccountTest(){
        Account i = accountService.findById(7);
        System.out.println(i);
    }
//    删
    @Test
    public void delAccount(){
        accountService.delAccount(8);
    }
}

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/bc652bc6d4.html