美文网首页
Spring-整合MyBatis

Spring-整合MyBatis

作者: 石头耳东 | 来源:发表于2022-05-12 16:08 被阅读0次

    零、本文纲要

    • 一、JDBC & MyBatis相关内容
    1. JDBC-手动编写SQL
    2. MyBatis-手动编写SQL
    3. 数据库连接池
    • 二、Spring整合MyBatis
    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包)

    • ① 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的基础内容,感谢阅读。

    相关文章

      网友评论

          本文标题:Spring-整合MyBatis

          本文链接:https://www.haomeiwen.com/subject/llujurtx.html