spring整合mybatis

spring整合mybatis

maven依赖准备
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.17</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.4</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.6</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.18</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

大体配置:

img

可以看出spring_dao.xml为整个整合的核心

其中包含

  • 注入数据库的登录信息
<!--    DataSource:使用spring的数据源替换mybatis的配置-->
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url"
                  value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC&amp;useSSL=false"/>
        <property name="username" value="root"/>
        <property name="password" value=""/>
   </bean>
  • 注入mybatis的配置以及sql语句的映射文件

     <!--固定模式-->
        <!--    sqlSessionFactory就是sqlSession-->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <!--        绑定mybatis-->
            <property name="configLocation" value="classpath:sql_config.xml"/>
            <property name="mapperLocations" value="classpath:generator/*.xml"/>
            <!--        sqlSession-->
        </bean>
        <bean class="org.mybatis.spring.SqlSessionTemplate" id="sessionTemplate">
            <constructor-arg index="0" ref="sqlSessionFactory"/>
            <!--        只能用构造器注入,因为没有set方法-->
        </bean>
    
  • 注入实现类

        <!--注入实现类-->
        <bean id="student" class="generate.StudentImpl">
            <property name="sessionTemplate" ref="sessionTemplate"/>
        </bean>
        <bean class="generate.StudentImpl2" id="student2">
            <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
        </bean>
    

    整个spring_dao.xml

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop.xsd">
    
        <!--    DataSource:使用spring的数据源替换mybatis的配置-->
        <bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
            <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
            <property name="url"
                      value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC&amp;useSSL=false"/>
            <property name="username" value="root"/>
            <property name="password" value=""/>
        </bean>
    
    
        <!--固定模式-->
        <!--    sqlSessionFactory就是sqlSession-->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <!--        绑定mybatis-->
            <property name="configLocation" value="classpath:sql_config.xml"/>
            <property name="mapperLocations" value="classpath:generator/*.xml"/>
            <!--        sqlSession-->
        </bean>
        <bean class="org.mybatis.spring.SqlSessionTemplate" id="sessionTemplate">
            <constructor-arg index="0" ref="sqlSessionFactory"/>
            <!--        只能用构造器注入,因为没有set方法-->
        </bean>
    
        <!--注入实现类-->
        <bean id="student" class="generate.StudentImpl">
            <property name="sessionTemplate" ref="sessionTemplate"/>
        </bean>
        <bean class="generate.StudentImpl2" id="student2">
            <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
        </bean>
    
    
        <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
            <property name="dataSource" ref="dataSource"/>
        </bean>
    
        <tx:advice transaction-manager="transactionManager" id="interceptor">
            <tx:attributes>
                <tx:method name="*" propagation="REQUIRED"/>
            </tx:attributes>
        </tx:advice>
    
    
        <aop:config>
            <aop:pointcut id="txcount" expression="execution(* generate.StudentDao.*.* (..))"/>
            <aop:advisor advice-ref="interceptor" pointcut-ref="txcount"/>
        </aop:config>
    
    
    </beans>
    

    实现类分为两种:

    1.直接继承了StudentDao的接口

public class StudentImpl implements StudentDao {
    //    原来的操作都使用sqlSession来执行,现在使用SqlSessionTemplate来执行
    private SqlSessionTemplate sessionTemplate;

    public void setSessionTemplate(SqlSessionTemplate sessionTemplate) {
        this.sessionTemplate = sessionTemplate;
    }

    @Override
    public int insert(Student record) {
        return 0;
    }

    @Override
    public int insertSelective(Student record) {
        return 0;
    }

    @Override
    public List<Student> FindAll() {
        StudentDao mapper = sessionTemplate.getMapper(StudentDao.class);
        return mapper.FindAll();
    }

    @Override
    public int delete(String record) {
        return 0;
    }
}

另外一种就比较简单了,继承了SqlSessionDaoSupport和StudentDao

public class StudentImpl2 extends SqlSessionDaoSupport implements StudentDao {
    @Override
    public int insert(Student record) {
        return getSqlSession().getMapper(StudentDao.class).insert(record);
    }

    @Override
    public int insertSelective(Student record) {
        return getSqlSession().getMapper(StudentDao.class).insertSelective(record);
    }

    @Override
    public List<Student> FindAll() {
        Student student = new Student("aa", "aa", "aa", "aa");
        int insert = insert(student);
        System.out.println("添加" + insert);
        int delete = delete("aa");
        System.out.println("删除" + delete);
        return getSqlSession().getMapper(StudentDao.class).FindAll();
    }

    @Override
    public int delete(String record) {
        return getSqlSession().getMapper(StudentDao.class).delete(record);
    }
}

student类

这次使用了lombok的包

@Data
@AllArgsConstructor//生成有参构造
@NoArgsConstructor//生成无参构造
public class Student implements Serializable {
    private String id;

    private String name;

    private String age;

    private String card;

    private static final long serialVersionUID = 1L;

}

我认为好处就是无需构建get,set方法,以及有参构造和无参构造

@Data:代替了成员变量的get和set方法

@AllArgsConstructor:生成有参构造

@NoArgsConstructor:生成无参构造

测试类

    public static void main(String[] args) throws IOException {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring_dao.xml");
        StudentDao student = context.getBean("student2", StudentDao.class);
        List<Student> students = student.FindAll();
        for (Student student1 : students) {
            System.out.println(student1.toString());
        }
    }

这里students2使用的是继承了SqlSessionDaoSupport和StudentDao的方法,

如果使用之继承了StudentDao的方法只需要改成studnet1即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值