zoukankan      html  css  js  c++  java
  • 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>
      
  • 相关阅读:
    Java 泛型学习四 自动擦除
    Java 泛型学习三 通配符
    ava的动态性支持学习七 方法句柄调用的性能对比
    Java 泛型学习一 泛型概念
    Java中正则Matcher类的matches()、lookAt()和find()的区别
    Java 泛型学习五 泛型擦除带来的不自然
    Java I/O 流的简单介绍及示例
    Java 泛型学习二 泛型的限制
    Java 泛型学习六 泛型类型系统
    字节存储机制:bigedian 和 littleendian
  • 原文地址:https://www.cnblogs.com/inkqx/p/12316280.html
Copyright © 2011-2022 走看看