一、术语解释
1、junit:单元测试框架,主要是白盒测试,用于在程序开发过程中测试某个功能
2、mybatis:简单理解就是,就是对连接数据的库一个封装,是一个持久层框架。可以简化连接数据库的步骤和加快开发
3、spring:Java轻量级的开发框架,以IOC和AOP为内核,可整合很多第三方框架,可快速开发
3.1、IOC:控制反转,将创建对象的控制权转移到spring提供的IOC容器中
3.2、AOP:面向切面编程,通过声明式方式灵活的进行事务的管理,提高开发效率和质量
二、注解解释
1、@Autowide:自动装配,IOC容器依据bean所依赖的资源在容器中查找并注入到bean中
2、@Bean:创建对象,在spring创建一个对象
3、@Component:就是实现bean的注入,并衍生出三个
3.1、@Repository(实现dao访问) 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件
3.2、@Service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理
3.3、@Controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层
4、@Configuration :开启纯注解模式
5、 @ComponentScan({"dao","service"}) //扫描组件
6、 @PropertySource(value = {"classpath:jdbc.properties"},encoding = "utf-8") //引入数据源
7、 @Import({JdbcConfig.class,MybatisConfig.class}) //导入jdbcConfig
8、@Value("${jdbc.driver}"):注解从配置文件读取值的用法,也就是从jdbc.properties文件中获取值
9、@Select("select * from book") : 这是整合mybatis的效果,查询功能
10、@RunWith(value = SpringJUnit4ClassRunner.class):设定类运行器
11、 @ContextConfiguration(classes = SpringConfig.class):spring的配置类
12、@Test:测试,使用相应的方法可不放在main方法中直接运行,起到代码的测试作用
三、具体步骤
本部分内容由创建数据库到测试运行
1、创建数据库
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for book
-- ----------------------------
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (
`isbn` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`bookName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`price` float(10, 2) NULL DEFAULT NULL,
PRIMARY KEY (`isbn`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of book
-- ----------------------------
INSERT INTO `book` VALUES ('1', '1', 1.00);
SET FOREIGN_KEY_CHECKS = 1;
2、创建实体类和数据库的数据保持一致
package entity; public class Book { private String isbn; private String bookName; private float price; @Override public String toString() { return "Book{" + "isbn='" + isbn + '\'' + ", bookName='" + bookName + '\'' + ", price=" + price + '}'; } public Book(String isbn, String bookName, float price) { this.isbn = isbn; this.bookName = bookName; this.price = price; } public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } }
3、配置连接数据库源 jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/books?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true jdbc.username=root jdbc.password=123456
4、配置spring类
package 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({"dao","service"}) //引入数据源 @PropertySource(value = {"classpath:jdbc.properties"},encoding = "utf-8") //导入jdbcConfig @Import({JdbcConfig.class,MybatisConfig.class}) public class SpringConfig { }
5、配置jdbc类
package 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 ds = new DruidDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(username); ds.setPassword(password); return ds; } }
6、配置mybatis类
package 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 { // 配置mybatis @Bean public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource) { SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); // 获取到数据源 ssfb.setDataSource(dataSource); // 与实体映射 ssfb.setTypeAliasesPackage("entity"); return ssfb; } @Bean public MapperScannerConfigurer mapperScannerConfigurer() { MapperScannerConfigurer maper = new MapperScannerConfigurer(); // 这里映射连接数据据的接口 maper.setBasePackage("dao"); return maper; } }
7、基础性工作已经完成了,接下来就是常规操作了,就是在dao层定义连接数据库的接口,在service层定义逻辑运算,目前主要做中转,然后在test包测试结果
7.1、dao层
package dao; import entity.Book; import org.apache.ibatis.annotations.Select; import java.util.List; public interface BookDao { // 查询 @Select("select * from book") ListqueryAll(); }
7.2、service层
package service; import entity.Book; import java.util.List; public interface BookService { ListqueryAll(); }
package service.Impl; import dao.BookDao; import entity.Book; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import service.BookService; import java.util.List; @Service public class BookServiceImpl implements BookService { @Autowired private BookDao bookDao; public ListqueryAll() { return bookDao.queryAll(); } }
7.3、test包
import config.SpringConfig; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import service.BookService; //设定类运行器 @RunWith(value = SpringJUnit4ClassRunner.class) //spring的配置类 @ContextConfiguration(classes = SpringConfig.class) public class BookTest { @Autowired private BookService bookService; @Test public void book() { System.out.println(bookService.queryAll()); } }
8、测试截图