1.Parent引入及pom配置
? ? ? ??首先晴玖,如果要支持mybatis呕屎,那么我們就應(yīng)該引入mybatis的starter秀睛。同時莲祸,由于連接本身還需要用jdbc的connetor和連接池,所以一并需要引入這些依賴畜号。如下是一個完整的的最簡pom允瞧,
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
? <modelVersion>4.0.0</modelVersion>
? <packaging>war</packaging>
? <parent>
? ? <groupId>org.springframework.boot</groupId>
? ? <artifactId>spring-boot-starter-parent</artifactId>
? ? <version>2.1.3.RELEASE</version>
? </parent>
? <name>testboot01</name>
? <groupId>com.zuikc</groupId>
? <artifactId>testboot01</artifactId>
? <version>1.0-SNAPSHOT</version>
? <dependencies>
? ? ? <!--jsp支持, servlet 依賴. -->
? ? ? <dependency>
? ? ? ? ? <groupId>javax.servlet</groupId>
? ? ? ? ? <artifactId>javax.servlet-api</artifactId>
? ? ? ? ? <scope>provided</scope>
? ? ? </dependency>
? ? ? <dependency>
? ? ? ? ? <groupId>javax.servlet</groupId>
? ? ? ? ? <artifactId>jstl</artifactId>
? ? ? </dependency>
? ? ? <!-- tomcat 的支持.-->
? ? ? <dependency>
? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? <artifactId>spring-boot-starter-tomcat</artifactId>
? ? ? </dependency>
? ? ? <dependency>
? ? ? ? ? <groupId>org.apache.tomcat.embed</groupId>
? ? ? ? ? <artifactId>tomcat-embed-jasper</artifactId>
? ? ? ? ? <scope>provided</scope>
? ? ? </dependency>
? ? ? <dependency>
? ? ? ? ? <groupId>mysql</groupId>
? ? ? ? ? <artifactId>mysql-connector-java</artifactId>
? ? ? </dependency>
? ? ? <dependency>
? ? ? ? ? <groupId>org.apache.tomcat</groupId>
? ? ? ? ? <artifactId>tomcat-dbcp</artifactId>
? ? ? ? ? <version>7.0.47</version>
? ? ? </dependency>
? ? ? <dependency>
? ? ? ? ? <groupId>org.apache.tomcat</groupId>
? ? ? ? ? <artifactId>tomcat-dbcp</artifactId>
? ? ? ? ? <version>7.0.47</version>
? ? ? </dependency>
? ? ? <dependency>
? ? ? ? ? <groupId>org.mybatis.spring.boot</groupId>
? ? ? ? ? <artifactId>mybatis-spring-boot-starter</artifactId>
? ? ? ? ? <version>1.3.2</version>
? ? ? </dependency>
? ? <dependency>
? ? ? <groupId>org.springframework.boot</groupId>
? ? ? <artifactId>spring-boot-starter-web</artifactId>
? ? </dependency>
? </dependencies>
? <build>
? ? <plugins>
? ? ? <plugin>
? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? <artifactId>spring-boot-maven-plugin</artifactId>
? ? ? </plugin>
? ? </plugins>
? </build>
</project>
2.配置初始化
? ? ? ??首先我們需要將數(shù)據(jù)庫連接配置到文件中,比如prop.properties畦韭,
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root
jdbc.maxActive=2335
jdbc.maxIdel=120
jdbc.maxWait=100
? ? ? ??然后,用java配置的方式將其引入到代碼中据过,創(chuàng)建DataSourceConfiguration绳锅,
package com.zuikc.config;
import org.apache.tomcat.dbcp.dbcp.BasicDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
//這個注解導(dǎo)入剛才增加的jdbc配置文件
@PropertySource("classpath:prop.properties")
public class DataSourceConfiguration {
? ? @Value("${jdbc.driver}")
? ? private String driver;
? ? @Value("${jdbc.url}")
? ? private String url;
? ? @Value("${jdbc.username}")
? ? private String username;
? ? @Value("${jdbc.password}")
? ? private String password;
? ? @Value("${jdbc.maxActive}")
? ? private int maxActive;
? ? @Value("${jdbc.maxIdel}")
? ? private int maxIdel;
? ? @Value("${jdbc.maxWait}")
? ? private long maxWait;
? ? @Bean
? ? public BasicDataSource dataSource(){
? ? ? ? BasicDataSource dataSource = new BasicDataSource();
? ? ? ? dataSource.setDriverClassName(driver);
? ? ? ? dataSource.setUrl(url);
? ? ? ? dataSource.setUsername(username);
? ? ? ? dataSource.setPassword(password);
? ? ? ? dataSource.setMaxActive(maxActive);
? ? ? ? dataSource.setMaxIdle(maxIdel);
? ? ? ? dataSource.setMaxWait(maxWait);
? ? ? ? dataSource.setValidationQuery("SELECT 1");
? ? ? ? dataSource.setTestOnBorrow(true);
? ? ? ? return dataSource;
? ? }
}
? ? ? ??接著鳞芙,增加mybatis配置原朝,
package com.zuikc.config;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;
@Configuration
//加上這個注解喳坠,使得支持事務(wù)
@EnableTransactionManagement
public class MyBatisConfig implements TransactionManagementConfigurer {
? ? @Autowired
? ? private DataSource dataSource;
? ? @Override
? ? public PlatformTransactionManager annotationDrivenTransactionManager() {
? ? ? ? return new DataSourceTransactionManager(dataSource);
? ? }
? ? @Bean(name = "sqlSessionFactory")
? ? public SqlSessionFactory sqlSessionFactoryBean() {
? ? ? ? SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
? ? ? ? bean.setDataSource(dataSource);
? ? ? ? try {
? ? ? ? ? ? return bean.getObject();
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? throw new RuntimeException(e);
? ? ? ? }
? ? }
? ? @Bean
? ? public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
? ? ? ? return new SqlSessionTemplate(sqlSessionFactory);
? ? }
}
? ? ? ??注意上面的sqlSessionFactory這個bean壕鹉。
? ? ? ??然后需要配置MyBatis配置文件的路徑聋涨,這個配置需要與上面的配置分開來寫,因為它們有著一個先后順序脊凰,
package com.zuikc.config;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
// 因為這個對象的掃描茂腥,需要在MyBatisConfig的后面注入切省,所以加上下面的注解
@AutoConfigureAfter(MyBatisConfig.class)
public class MyBatisMapperScannerConfig {
? ? @Bean
? ? public MapperScannerConfigurer mapperScannerConfigurer() {
? ? ? ? MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
? ? ? ? //獲取之前注入的beanName為sqlSessionFactory的對象
? ? ? ? mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
? ? ? ? //指定xml配置文件的路徑
? ? ? ? mapperScannerConfigurer.setBasePackage("com.zuikc.dao");
? ? ? ? return mapperScannerConfigurer;
? ? }
}
3.三層架構(gòu)
? ? ? ??先創(chuàng)建最底層的dao接口数尿,如下:
package com.zuikc.dao;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface TestDao {
? ? @Select("SELECT * FROM tbl_user;")
? ? public List<Map<String,Object>> find();
}
? ? ? ??接著創(chuàng)建service,
package com.zuikc.service;
import com.zuikc.dao.TestDao;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Service
public class TestService {
? ? @Resource
? ? TestDao dao;
? ? public List<Map<String,Object>> find(){
? ? ? ? List<Map<String,Object>> users = dao.find();
? ? ? ? return users;
? ? }
}
? ? ? ??然后是controller诊杆,
package com.zuikc.controller;
import com.zuikc.dao.TestDao;
import com.zuikc.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Controller
public class StudentController {
? ? @Autowired
? ? TestService service;
? ? @RequestMapping(value = {"test01"})
? ? public String view(Map<String, Object> map) {
? ? ? ? List<Map<String,Object>> users = service.find();
? ? ? ? for (Map<String, Object> user : users) {
? ? ? ? ? ? for (Map.Entry<String, Object> entry : user.entrySet()) {
? ? ? ? ? ? ? ? System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? System.out.println(users.size());
? ? ? ? map.put("name", "zuikc.com");
? ? ? ? map.put("date", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
? ? ? ? return "views/test01";
? ? }
}
? ? ? ??經(jīng)過上面的創(chuàng)建之后豹储,我們的代碼結(jié)構(gòu)是這樣的剥扣,
? ? ? ??執(zhí)行之铝穷,
? ? ? ??注意了曙聂,如果你已經(jīng)忘記了如何啟動MySQL,那么断国,下面就是命令哦:
? ? ? ??sudo bin/mysqld_safe --user=mysql &
4.事務(wù)支持
? ? ? ??第一步稳衬,導(dǎo)入JDBC依賴薄疚,
? ? ? <dependency>
? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? <artifactId>spring-boot-starter-jdbc</artifactId>
? ? ? </dependency>
? ? ? ??注意输涕,有了這個依賴慨畸,SpringBoot會自動注入DataSourceTransactionManager。
? ? ? ??接著檐什,直接在Service中添加@Transactional注解就能支持事務(wù)啦。本文不再贅述乃正,大家自己嘗試一下吧。
? ? ? ??感謝關(guān)注“碼農(nóng)星球”荧飞。本文版權(quán)屬于“碼農(nóng)星球”名党。我們提供咨詢和培訓(xùn)服務(wù)叹阔,關(guān)于本文有任何困惑耳幢,請關(guān)注并聯(lián)系我們欧啤。