Spring-整合MyBatis

2022-05-12  本文已影响0人  石头耳东

零、本文纲要

  1. JDBC-手动编写SQL
  2. MyBatis-手动编写SQL
  3. 数据库连接池
  1. 基础依赖
  2. 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包)

Ⅰ 整合前

<!--读取外部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)

Ⅰ 整合前

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;
}

Ⅰ 整合前

<!--映射文件扫描包路径-->
<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的基础内容,感谢阅读。

上一篇下一篇

猜你喜欢

热点阅读