配置环境
建立好整个层级关系
maven导包
<dependencies>
<!--spring框架包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<!--德鲁伊数据库连接池包-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
<!--mybatis包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!--mysql数据库连接jdbc包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--spring操作jdbc包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<!--spring与mybatis整合的包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- 测试包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
新建,并编写xml配置文档
编写各层
sql建表
Domain(pojo层)
我们需要编写实体类
package cn.calendo.domain;
import java.io.Serializable;
public class Account implements Serializable {
private Integer id;
private String username;
private String password;
private String gender;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Account{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", gender='" + gender + '\'' +
", address='" + address + '\'' +
'}';
}
}
配置xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties"/>
<typeAliases>
<package name="cn.calendo.domain"/>
</typeAliases>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="cn.calendo.dao"/>
</mappers>
</configuration>
<!--这些都是mybatis官网上的信息,抄下来自己改一改即可-->
jdbc.properties
Dao层
dao层也是注解开发
Service层
接口
实现类
主函数
public class App {
public static void main(String[] args) throws IOException {
// 1. 创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2. 加载SqlMapConfig.xml配置文件(getResourceAsStream会抛出异常)
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 3. 创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 4. 获取SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 5. 执行SqlSession对象执行查询,获取结果User
AccountDao accountDao = sqlSession.getMapper(AccountDao.class);
Account ac = accountDao.findById(2);
System.out.println(ac);
sqlSession.close();
}
}
测验
我们试了一下运行app
,是可以获取到数据了已经
开始整合
从此得出,我们应该让spring管理sqlsessionfactory
1 使用注解开发,抛弃xml
我们在config里面新建一个配置类,并添加@Compnent
与@ComponentScan("cn.calendo")
编写配置类
然后写一个jdbc的class(第三方bean管理格式)让我们的配置类去扫描它
package cn.calendo.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource dataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(driver);
druidDataSource.setUrl(url);
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
return druidDataSource;
}
}
再写一个mybatis的配置类,并在springConfig里面注册一下即可
然后我们把sqlsessionfactory给bean化
由于我们要创建sqlsessionfactory的代码量大,所以我们可以使用一个新的类来快速创建sqlsessionfactory
然后配置映射
注意service层的自动装配与注解注册
但是这样的话我们原来的xml和app主函数类就不能用了所以需要新建一个主函数类
public class App2 {
public static void main(String[] args) {
//获取核心配置类,然后核心配置类会去自己扫描其它配置类
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
//获取bean,我们选用service的,因为service里面可以去调用dao的
AccountService accountService = ctx.getBean(AccountService.class);
//写service的方法即可
Account accountServiceById = accountService.findById(2);
//输出
System.out.println(accountServiceById);
}
}
然后运行我们可以发现查询成功
总体的流程是这样的:
总结
1 pom.xml
导坐标
<dependencies>
<!--spring框架包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<!--德鲁伊数据库连接池包-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
<!--mybatis包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!--mysql数据库连接jdbc包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--spring操作jdbc包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<!--spring与mybatis整合的包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- 测试包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
2 SpringConfig
的配置
@Configuration
@ComponentScan("cn.calendo")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class, MybatisConfig.class})
3 JdbcConfig
替代原xml来获取连接池信息
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource dataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(driver);
druidDataSource.setUrl(url);
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
return druidDataSource;
}
4 MybatisConfig
获取类型别名bean与映射bean
@Bean
// 引用类型注入的话在()内添加引用类型来传递值
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) {
// 获取工厂bean对象
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
// 设置实体类区域
factoryBean.setTypeAliasesPackage("cn.calendo.domain");
// 这一段就是获取到引用类型内的数据
factoryBean.setDataSource(dataSource);
// 默认事务处理
return factoryBean;
}
//映射位置的bean
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setBasePackage("cn.calendo.dao");
return msc;
}
5 service层添加自动装配@Autowired
与注解注册@Service
6 主函数类里编写
public static void main(String[] args) {
//获取核心配置类,然后核心配置类会去自己扫描其它配置类
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
//获取bean,我们选用service的,因为service里面可以去调用dao的
AccountService accountService = ctx.getBean(AccountService.class);
//写service的方法即可
Account accountServiceById = accountService.findById(1);
//输出
System.out.println(accountServiceById);
}
spring整合junit(测试)
我们先来测试业务层(更常见)下的包
先保证相关包已经导入pom
<!--测试包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!--spring整合junit测试包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
测试通过即可