MyBatis-Spring整合之方式1

  1. 导入相关包:Spring包:Spring架包 MyBatis包:MyBatis架包 整合包:Mybatis-Spring整合包

  2. 编写实体类User,实体类的sql映射文件,映射内容如下:

    <?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">
    <typeAliases>
        <package name="com.lxy.entity"/>
    </typeAliases>
    
    <mapper namespace="com.lxy.entity.UserMapper">
        <select id="selectUsers" resultType="com.lxy.entity.User">
            select * from users
        </select>
    </mapper>
    
  3. 创建实体类的dao接口UserDao和接口的实现类UserDaoImp,在实现类里创建一个sqlSessionTemplate类变量sqlSession,设置sqlSession的set方法。在实现接口的方法中调用sqlSession的selectList方法并返回代码如下:

    public class UserDaoImp implements UserDao {
    
        private SqlSessionTemplate sqlSession;
        @Override
        public List<User> selectUser() {
            //参数为映射文件的namespace+查询语句的id
            return sqlSession.selectList("com.lxy.entity.UserMapper.selectUsers");
        }
    
    
        public void setSqlSession(SqlSessionTemplate sqlSession) {
            this.sqlSession = sqlSession;
        }
    
    }
    

    Mybatis工具类要交由spring容器来处理和实例化,不再需要另外编写。此时的项目结构如图:
    img

  4. 在Spring的xml配置下编写数据库连接配置,例如:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           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/aop
           http://www.springframework.org/schema/aop/spring-aop.xsd">
    
        <!--配置数据源-->
        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/springExercise"/>
            <property name="username" value="root"/>
            <property name="password" value="myPassword"/>
        </bean>
    
        <!--配置sqlSessionFactory-->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="configLocation" value="classpath:mybatis-config.xml" />
        </bean>
    
        <!--sqlSessionFactory利用构造器引用了Factory-->
        <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
            <constructor-arg index="0" ref="sqlSessionFactory" />
        </bean>
    
        <bean id="userDao" class="com.lxy.dao.imp.UserDaoImp">
            <property name="sqlSession" ref="sqlSessionTemplate" />
        </bean>
    
  5. 编写测试主方法,如:

    public class test {
        public static void main(String[] args) throws IOException {
            ApplicationContext context=new ClassPathXmlApplicationContext("Beans.xml");
            UserDao userDao= (UserDao) context.getBean("userDao");
            System.out.println(userDao.selectUser().size());
        }
    }
    
  6. 配置声明式事务,为了使用事务,先修改mapper文件的映射,添加不同的操作:

    <mapper namespace="com.lxy.entity.UserMapper">
        <select id="selectUsers" resultType="com.lxy.entity.User">
            select * from users
        </select>
        <insert id="add" parameterType="User" useGeneratedKeys="true">
            insert into users(name,pwd) values(#{name},#{pwd})
        </insert>
        <delete id="remove">
            deletes from users where id=#{id}
        </delete>
    </mapper>
    

    需要修改Beans.xml的头部beans配置:

    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx.xsd">
    

    再添加事务的和aop的配置:

    <!--声明式事务-->
      <!--配置事务管理器-->
      <bean id="txManger" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
          <property name="dataSource" ref="dataSource"/>
      </bean>
      <!--配置事务的通知-->
      <tx:advice id="txAdvice" transaction-manager="txManger">
          <tx:attributes>
              <!--配置哪些方法使用什么样的事务,配置事务的传播特性-->
              <!--REQUIRED表示如果没有当前事务就开启一个事务-->
              <tx:method name="add" propagation="REQUIRED"/>
              <!--带*号匹配所有以remove为开头的方法名字-->
              <tx:method name="remove*" propagation="REQUIRED"/>
              <!--使用read-only为true,只读就不会提交事务-->
              <tx:method name="selectUsers" read-only="true"/>
              <tx:method name="*" propagation="REQUIRED"/>
          </tx:attributes>
      </tx:advice>
    
      <aop:config>
          <!--这里的表达式中实际运用时应该配置在service层,这里是因为没有写出service所以就使用dao层-->
          <aop:pointcut id="pointCut" expression="execution(* com.lxy.dao.imp.*.*(..))"/>
          <aop:advisor pointcut-ref="pointCut" advice-ref="txAdvice"/>
      </aop:config>
    
posted @ 2020-02-16 12:19  小七闲  阅读(154)  评论(0编辑  收藏  举报