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容器中