天天看點

Spring整合Mybatis(Druid資料源)

這裡寫自定義目錄标題

    • 1.依賴導入
    • 2.建立db.properties檔案
    • 3.建立Spring配置檔案,引入db.properties
    • 4.配置資料源
    • 5.配置SqlSession工廠
    • 6.配置mapper掃描
    • 7.事務(以下二選一)
    • 8.測試

1.依賴導入

<!--1.版本統一:-->

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>5.0.2.RELEASE</spring.version>
    <java.version>1.8</java.version>
    <jdbc.driver.version>8.0.21</jdbc.driver.version>
    <aspectj.version>1.7.4</aspectj.version>
    <javax.servlet-api.version>3.1.0</javax.servlet-api.version>
    <jsp-api.version>2.2</jsp-api.version>
    <jstl.version>1.2</jstl.version>
    <mybatis.version>3.2.5</mybatis.version>
    <mybatis-spring.version>1.2.2</mybatis-spring.version>
    <slf4j.version>1.7.30</slf4j.version>
    <logback.version>1.1.7</logback.version>
  </properties>

<!--依賴導入-->
<dependencies>
<!--Spring依賴-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--mybatis依賴-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>
    <!--mybatis和Spring整合包-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>${mybatis-spring.version}</version>
    </dependency>
    <!--mysql驅動-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${jdbc.driver.version}</version>
    </dependency>
  </dependencies>
           

2.建立db.properties檔案

druid.driverClassName=com.mysql.cj.jdbc.Driver
druid.url=jdbc:mysql://217.0.0.1/springstudy?useSSL=false&characterEnding=utf8&serverTimezone=Asia/Shanghai
druid.username=root
druid.password=123
druid.initialSize=10
druid.minIdle=6
druid.maxActive=50
druid.maxWait=60000
druid.timeBetweenEvictionRunsMillis=60000
druid.minEvictableIdleTimeMillis=300000
druid.validationQuery=SELECT 'x'
druid.testWhileIdle=true
druid.testOnBorrow=false
druid.testOnReturn=false
druid.poolPreparedStatements=false
druid.maxPoolPreparedStatementPerConnectionSize=20
druid.filters=wall,stat
           

3.建立Spring配置檔案,引入db.properties

<!--引入druid配置檔案  db.properties檔案在resources下-->
    <context:property-placeholder location="classpath:db.properties" />
           

4.配置資料源

<!--配置資料源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <!--高版本的Driver可以自動識别資料庫  而不再需要指定具體是哪一個Driver了-->
        <property name="driverClassName" value="${druid.driverClassName}"/>
        <property name="url" value="${druid.url}"/>
        <property name="username" value="${druid.username}"/>
        <property name="password" value="${druid.password}"/>

        <!-- 初始化連接配接數量 -->
        <property name="initialSize" value="${druid.initialSize}" />
        <!-- 最小空閑連接配接數 -->
        <property name="minIdle" value="${druid.minIdle}" />
        <!-- 最大并發連接配接數 -->
        <property name="maxActive" value="${druid.maxActive}" />
        <!-- 配置擷取連接配接等待逾時的時間 -->
        <property name="maxWait" value="${druid.maxWait}" />

        <!--以下暫時可以不需要配置-->
        <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接配接,機關是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="${druid.timeBetweenEvictionRunsMillis}" />

        <!-- 配置一個連接配接在池中最小生存的時間,機關是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="${druid.minEvictableIdleTimeMillis}" />
        <property name="validationQuery" value="${druid.validationQuery}" />
        <property name="testWhileIdle" value="${druid.testWhileIdle}" />
        <property name="testOnBorrow" value="${druid.testOnBorrow}" />
        <property name="testOnReturn" value="${druid.testOnReturn}" />

        <!-- 打開PSCache,并且指定每個連接配接上PSCache的大小 如果用Oracle,則把poolPreparedStatements配置為true,mysql可以配置為false。 -->
        <property name="poolPreparedStatements" value="${druid.poolPreparedStatements}" />
        <property name="maxPoolPreparedStatementPerConnectionSize"
                  value="${druid.maxPoolPreparedStatementPerConnectionSize}" />

        <!-- 配置監控統計攔截的filters -->
        <property name="filters" value="${druid.filters}" />
    </bean>
           

5.配置SqlSession工廠

<!--配置SqlSession工廠-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>
           

6.配置mapper掃描

<!--Mapper掃描配置-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!--這裡是你的掃描包   存放的是Mapper(DAO)接口-->
        <property name="basePackage" value="dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
           

7.事務(以下二選一)

1.基于xml方式配置事務

<!--事務管理-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

<!--配置事務增強-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="insert*" propagation="REQUIRED"/>
            <tx:method name="find*" read-only="true"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>

<!--配置事務切面-->
    <aop:config>
        <aop:pointcut id="serviceOperation" expression="(execution(* service..*.*(..)))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation"/>
    </aop:config>
           

2.基于注解配置事務

<!--事務管理-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!--啟用注解式事務 在類上的Transactional生效-->
    <tx:annotation-driven transaction-manager="transactionManager"/>
           

在業務層添加@Transactional添加注解

@Service("userService")
@Transactional
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao dao;
    @Transactional(readOnly = true)
    @Override
    public List<User> findAllUsers() {
        return dao.findAllUsers();
    }

    @Override
    public User findUserById(int id) {
        return dao.findUserById(id);
    }
    @Override
    public User findUserByUserName(String username) {
        User user = dao.findUserByUserName(username);
        System.out.println("dao查詢到的user"+user);
        return user;
    }
}
           

8.測試

public class TestTranscation {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-*.xml");
        UserService service  = context.getBean("userService",UserService.class);
        User user = new User();
        user.setUsername("333");
        user.setPassword("333");
        Address address = new Address();
        address.setAddress("四川省");
        user.setAddress(address);
        boolean result = service.addUser(user);
        System.out.println(result);
    }
}