Spring整合Mybatis注解方式


Spring整合Mybatis(注解方式)

環境准備

jar包:

  • Spring所需依賴:spring-context、spring-aspects、aspectjrt、aspectjweaver、spring-tx、spring-jdbc
  • mybatis所需要:mybatis、mybatis-spring、mysql-connector-java、(druid、c3p0、HikariCP)
  • 輔助性依賴:logback-classic、lombok、spring-test、junit、mapper(可選)、pagehelper(可選)

數據庫:mysql

服務層代碼

@Service
public class UserService implements IUserService {

    @Autowired
    private UserMapper mapper;

    @Override
    public List<User> getAll() {
        return mapper.getAll();
    }
}

mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hello.mapper.UserMapper">

    <select id="getAll" resultType="user">
        select * from user
    </select>

</mapper>

純注解方式

純注解方式需要一個配置類來代替xml配置文件的作用,需在配置文件上注

//注解掃描
@ComponentScan(basePackages = "com.hello")
//聲明當前類為配置類
@Configuration
//掃描mapper接口
@MapperScan("com.hello.mapper")

配置類中@Bean相當於xml的 標簽

通過@Bean將類放入spring容器,也可以通過注解掃描

配置類具體內容

//掃描mapper接口
@MapperScan("com.hello.mapper")
//spring組件的掃描
@ComponentScan(basePackages = "com.hello")
@Configuration
public class Config {

    //配置數據庫連接池
    @Bean
    public DataSource dataSource(){
    	//使用HikariCP連接池
        HikariDataSource hikariDataSource = new HikariDataSource();
        //配置連接池的jdbcUrl屬性
        hikariDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/ssm?servexrTimezone=GMT%2B8");
        //賬號
        hikariDataSource.setUsername("root");
        //密碼
        hikariDataSource.setPassword("root");
        //驅動Driver
        hikariDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        return hikariDataSource;
    }

    //配置sqlSessionFactory
    @Bean
    public SqlSessionFactory sqlSessionFactoryBean() throws Exception {
    	//在spring和Mybatis整合中采用mybatis提供的SQLSessionFactoryBean對象
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        //為sqlSessionFatoryBean設置連接池屬性
        sqlSessionFactoryBean.setDataSource(dataSource());
        //獲取PathMatchingResourcePatternResolver對象為掃描mapper文件做准備
        PathMatchingResourcePatternResolver path = new PathMatchingResourcePatternResolver();
		//設置mapper文件位置        
 sqlSessionFactoryBean.setMapperLocations(path.getResources("classpath*:com/hello/mapper/**/*.xml"));
 		//為javaBean對象設置別名
        sqlSessionFactoryBean.setTypeAliasesPackage("com.hello.bean");
        //返回SqlSessionFactory對象
       return  sqlSessionFactoryBean.getObject();
    }
}

測試類具體內容

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {Config.class})
public class AppTest 
{
    @Autowired
    public UserService userService;
    @Test
    public void getALL(){
        List<User> users = userService.getAll();
        for (User user:users) {
            System.out.println(user);
        }
    }
}

注:如要引入db.properties數據庫連接屬性文件

新建一個連接池配置類上注@PropertySource("classpath:db.properties")

在配置類中聲明成員變量注Value(“${名稱}”)

@PropertySource("classpath:db.properties")
@Component
@Data
public class DataSourcesConfig {
    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.driverName}")
    private String driverNmae;
}

創建連接池時,只需要加入一個DataSourcesConfig對象即可

注:不能和pring的@Configuration配置文件放在一個類中,會因為執行的順序導致參數無法放入 spring容器中


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM