MyBatis独立开发
在之前的mybatis开发中,我们首先要配置mybatis xml文件,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <?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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///db1?useUnicode=true&characterEncoding=UTF-8&useSSL=false"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <package name="mapper"/> </mappers> </configuration>
|
然后通过xml文件得到SqlSessionFactoryBuilder对象,通过builder得到SqlSessionFactory对象,SqlSessionFactory对象开启Session,Session调用到数据层mapper里的方法,实现sql语句,调用数据库。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class mybatisDemo { public static void main(String[] args) throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession();
userMapper userMapper = sqlSession.getMapper(userMapper.class); List<user> userList = userMapper.selectAll();
System.out.println(userList);
sqlSession.close(); } }
|
Spring整合开发
为了干掉之前复杂的xml配置文件,我们直接创建通过Spring管理的Bean来实现之前xml文件实现的功能。
导包
这里,我将所有需要的包列入。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.22</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.10.RELEASE</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.10.RELEASE</version> </dependency> </dependencies>
|
创建数据库连接池Config
druid数据库连接池:
注意,其中的properties文件是通过最上层的SpringConfig调用的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| @Configuration 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; } }
|
上面用到的properties文件:
1 2 3 4
| jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql:///db1 jdbc.username=root jdbc.password=root
|
创建MybatisConfig并加入两个Bean
创建一个MybatisConfig来代替之前mybatis xml中所有的功能,例如创建SqlSessionFactory。
MyBatisConfig配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class MybatisConfig { @Bean public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){ SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); ssfb.setDataSource(dataSource); return ssfb; }
@Bean public MapperScannerConfigurer mapperScannerConfigurer(){ MapperScannerConfigurer msc = new MapperScannerConfigurer(); msc.setBasePackage("cola.dao"); return msc; } }
|
注意,其中的MapperScannerConfigurer可以使用mybatis的自动代理功能,也就是扫描包(cola.dao)中的类,里面的类被加入到Spring Bean后就可以直接使用sql注解来实现sql语句。
例如在cola.dao路径下有一个实现类:
1 2 3 4 5
| @Repository public interface BrandDao { @Select("select id, brand_name brandName, company_name companyName, ordered, description, status from tb_brand") List<brand> selectAll() ; }
|
配置SpringConfig
最后配置一下SpringConfig:
1 2 3 4 5 6
| @Configuration @ComponentScan("cola") @PropertySource("classpath:jdbc.properties") @Import({jdbcConfig.class, MybatisConfig.class}) public class SpringConfig { }
|
完成
这样我们就干掉了之前mybatis中复杂的过程,在app中直接拿到Bean就可以完成业务。
1 2 3 4 5 6 7 8
| public class App { public static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); BrandService brandService = ctx.getBean(BrandService.class); List<brand> brands = brandService.selectAll(); System.out.println(brands); } }
|
Spring整合JUnit测试
照着这种格式写就完了。
1 2 3 4 5 6 7 8 9 10 11 12
| @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SpringConfig.class) public class BrandServiceTest {
@Autowired private BrandService brandService;
@Test public void test(){ System.out.println(brandService.selectAll()); } }
|