Spring-整合MyBatis
零、本文纲要
- 一、JDBC & MyBatis相关内容
- JDBC-手动编写SQL
- MyBatis-手动编写SQL
- 数据库连接池
- 二、Spring整合MyBatis
- 基础依赖
- Spring整合
一、JDBC & MyBatis相关内容
1. JDBC-手动编写SQL
- ① 相关依赖
mysql-connector-java
- ② 重要的类
DriverManager
Connection(事务管理)
Statement(executeUpdate、executeQuery)
ResultSet(getXxx)
PreparedStatement
2. MyBatis-手动编写SQL
- ① 相关依赖
mybatis
- ② 重要的类
SqlSessionFactory
SqlSession
XXXMapper(代理映射)
3. 数据库连接池
- ① 相关依赖
druid
c3p0
- ② 重要的类
Druid/C3P0
DruidDataSourceFactory(druid)
ComboPooledDataSource(c3p0)
DataSource
二、Spring整合MyBatis
1. 基础依赖
Ⅰ mysql-connector-java(JDBC)
Ⅱ mybatis(Mapper)
Ⅲ druid(数据库连接池)
Ⅳ spring-context(IOC、DI)
2. Spring整合
补充:整合需要的依赖
Ⅰ spring-jdbc(Spring操作数据库需要该jar包:JdbcTemplate)
Ⅱ mybatis-spring(Spring与Mybatis整合的jar包)
- ① jdbc.properties配置文件管理
Ⅰ 整合前
<!--读取外部properties配置文件-->
<properties resource="jdbc.properties"></properties>
Ⅱ 整合后
交由@PropertySource管理
@PropertySource("classpath:jdbc.properties")
- ② 别名包扫描
Ⅰ 整合前
<!--别名扫描的包路径-->
<typeAliases>
<package name="com.stone.domain"/>
</typeAliases>
Ⅱ 整合后
详见SqlSessionFactoryBean的配置,简单的如下:
ssfb.setTypeAliasesPackage("com.stone.domain");
- ③ 连接池配置
Ⅰ 整合前
此处整合druid
<!--数据源-->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</dataSource>
</environment>
</environments>
Ⅱ 整合后
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 ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(userName);
ds.setPassword(password);
return ds;
}
}
@Import(JdbcConfig.class)
- ④ SqlSessionFactory
Ⅰ 整合前
public class App {
public static void main(String[] args) throws IOException {
// 1. 创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2. 加载SqlMapConfig.xml配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 3. 创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 4. 获取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 5. 执行SqlSession对象执行查询,获取结果User
AccountDao accountDao = sqlSession.getMapper(AccountDao.class);
Account ac = accountDao.findById(1);
System.out.println(ac);
// 6. 释放资源
sqlSession.close();
}
}
Ⅱ 整合后
把MyBatis配置类交由Spring管理
@Import({JdbcConfig.class, MybatisConfig.class})
MybatisConfig配置类中添加第三方Bean(SqlSessionFactoryBean)
//定义bean,SqlSessionFactoryBean,用于产生SqlSessionFactory对象
@Bean
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
//设置模型类的别名扫描
ssfb.setTypeAliasesPackage("com.stone.domain");
//设置数据源
ssfb.setDataSource(dataSource);
return ssfb;
}
- ⑤ Mapper接口和映射
Ⅰ 整合前
<!--映射文件扫描包路径-->
<mappers>
<package name="com.stone.dao"></package>
</mappers>
Ⅱ 整合后
//定义bean,返回MapperScannerConfigurer对象
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(){
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setBasePackage("com.stone.dao");
return msc;
}
注意:其余比如XXXMapper接口或者XXXMapper.xml的相关内容无需调整。
public interface AccountDao {
@Insert("insert into tbl_account(name,money)values(#{name},#{money})")
void save(Account account);
@Delete("delete from tbl_account where id = #{id} ")
void delete(Integer id);
@Update("update tbl_account set name = #{name} , money = #{money} where id = #{id} ")
void update(Account account);
@Select("select * from tbl_account")
List<Account> findAll();
@Select("select * from tbl_account where id = #{id} ")
Account findById(Integer id);
}
三、结尾
以上即为Spring-整合MyBatis的基础内容,感谢阅读。