這裡寫自定義目錄标題
-
- 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);
}
}