项目结构:
serdao: 作为数据层接口,规定执行SQL语句的具体方法,本质上实现SQL语句和SQL方法的映射关系
POJO: POJO实体类,用来封装数据(要提供set和get方法),有的习惯命名domain
USerService : 业务层接口,规定业务逻辑标准,提供SQL方法
USerServiceImpl :作为业务层接口AccountService的接口实现类,在这个类中要实例化继承业务层接口并且实现抽象方法的实例化。
Spring整合MyBatis
在POM文件中导入相关依赖:
1.Spring-JDBC
<!--Spring 操作数据库所需依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
2.mybatis-spring
<!--Spring 整合MyBatis所需接口标准-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
3.Druid
<!--Druid 数据源管理-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
4.MySQl
<!--MySQl 连接器-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
POJO:
package com.practice.pojo;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;
public class User {
private int id;
private String type;
private String description;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", type='" + type + '\'' +
", description='" + description + '\'' +
", name='" + name + '\'' +
'}';
}
}
配置类:
//1.JDBCConfig.class
//数据库驱动类
package com.practice.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Repository;
import javax.sql.DataSource;
public class jdbcConfig {
@Value("${username}")
private String username;
@Value("${password}")
private String password;
@Value("${DriverClassName}")
private String DriverClassName;
@Value("${url}")
private String url;
/*
* 配置Druid数据源对象(使用注解,让spring容器管理第三方bean)
* */
@Bean
public DataSource dataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUrl(url);
druidDataSource.setUsername("root");
druidDataSource.setDriverClassName(DriverClassName);
druidDataSource.setPassword(password);
return druidDataSource;
}
}
//2.Mybaits.class
//Mybatis核心配置类,使用配置类的方式代替原生开发使用的核心配置文件
package com.practice.config;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
public class MybatisConfig {
/*
* 配置Mapper的扫描路径,结果作为一个Bean返回
* */
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(){
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setBasePackage("com.practice");
return mapperScannerConfigurer;
}
/*
* 配置SQLsession对象,返回一个bean
* */
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setTypeAliasesPackage("com.practice");
return sqlSessionFactoryBean;
}
}
//3.SpringConfig.class
//Spring核心配置类
package com.practice.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
@Configuration //声明配置类
@ComponentScan("com.practice") //配置bean扫描包的位置
@PropertySource("classpath:jdbc.properties") //加载配置文件
@Import({jdbcConfig.class, MybatisConfig.class}) //导入其他配置类,如果不导入其他配置类,所有的配置类都要声明
public class SpringConfig {
}
UserService:
package com.practice.service;
import com.practice.pojo.User;
import java.util.List;
//规定接口标准
public interface UserService {
List<User> selectAll();
}
UserServiceImpl:
package com.practice.service.Impl;
import com.practice.dao.UserDao;
import com.practice.pojo.User;
import com.practice.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("userservice") //通过id的方式标识bean
public class UserServiceImpl implements UserService {
@Autowired //使用自动装配,注入bean
private UserDao userDao;
public List<User> selectAll() {
return userDao.selectAll();
}
}
Application.class
package com.practice;
import com.practice.config.SpringConfig;
import com.practice.pojo.User;
import com.practice.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.util.List;
public class Application {
public static void main(String[] args) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
UserService userService = (UserService) applicationContext.getBean("userservice");
List<User> userList = userService.selectAll();
System.out.println(userList);
}
}