在进行配置之前首先要了解springboot是如何使用纯java代码方式初始化一个bean的
以前的版本是在xml中使用beans标签,在其里面配置bean,那么纯Java代码怎么实现呢?
答案就是使用@Configuration
注解和@Bean
,代码如下:当然搜资料过程中你会学习到其他的知识,并尝试使用
1.mybatis-spring-boot-stater的Maven依赖
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> </dependency>
2.配置数据源,这里使用的dbcp的数据源,具体大家可以看自己的情况来使用
在src/main/resource中,添加一个application.properties配置文件,这里面添加了一些数据库连接的信息
########################################################
###datasource
########################################################
spring.datasource.url = jdbc:mysql://123.206.228.200:3306/test
spring.datasource.username = shijunjie
spring.datasource.password = ******
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.max-maxWait=100
spring.datasource.min-idle=8
spring.datasource.initial-size=10
2.1注入数据源
package me.shijunjie.config; import org.apache.commons.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 @PropertySource("classpath:application.properties") public class DataSourceConfiguration { @Value("${spring.datasource.driverClassName}") private String driver; @Value("${spring.datasource.url}") private String url; @Value("${spring.datasource.username}") private String username; @Value("${spring.datasource.password}") private String password; @Value("${spring.datasource.max-active}") private int maxActive; @Value("${spring.datasource.max-idle}") private int maxIdel; @Value("${spring.datasource.max-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; } }
2.2MyBatis的配置
package me.shijunjie.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 //加上这个注解,使得支持事务 @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); } }
2.3配置MyBatis配置文件的路径,这个配置需要与上面的配置分开来写,因为它们有着一个先后顺序
package me.shijunjie.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 @AutoConfigureAfter(MybatisConfig.class) public class MyBatisMapperScannerConfig { @Bean public MapperScannerConfigurer mapperScannerConfigurer() { MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); //获取之前注入的beanName为sqlSessionFactory的对象 mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); //指定xml配置文件的路径 mapperScannerConfigurer.setBasePackage("me.shijunjie.dao"); return mapperScannerConfigurer; } }
2.4使用@Mapper注解来标识一个接口为MyBatis的接口,MyBatis会自动寻找这个接口
package me.shijunjie.dao; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import me.shijunjie.entity.Demo2; @Mapper public interface DemoDao2{ @Insert("insert into t_demo(tname) "+ "values(#{name})") int save(Demo2 demo); }
3.编写Controller 和 Service 以及实体类
编写实体类:
package me.shijunjie.entity; public class Demo2 { public Demo2() { } public Demo2(long id, String name) { this.id = id; this.name = name; } private long id; private String name; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
编写service和实现类:
package me.shijunjie.service; import me.shijunjie.entity.Demo2; public interface DemoService { public void save(Demo2 demo); }
package me.shijunjie.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import me.shijunjie.dao.DemoDao2; import me.shijunjie.entity.Demo2; import me.shijunjie.service.DemoService; @Service public class DemoServiceImpl implements DemoService { @Autowired private DemoDao2 demoDao; public void save(Demo2 demo){ demoDao.save(demo); } }
编写Controller
package me.shijunjie.controller; import javax.annotation.Resource; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import me.shijunjie.entity.Demo2; import me.shijunjie.service.DemoService; @RestController @RequestMapping("/demo") public class DemoController { @Resource private DemoService demoService; /** * 测试保存数据方法. * @return */ @RequestMapping("/save") public String save(){ Demo2 d = new Demo2(); d.setName("Angel2"); demoService.save(d);//保存数据. return "ok.DemoController.save"; } }
编写入口类
package me.shijunjie.controller; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.web.SpringBootServletInitializer; import org.springframework.context.annotation.ComponentScan; import org.springframework.scheduling.annotation.EnableScheduling; @ComponentScan(basePackages={"me.shijunjie"}) // 扫描该包路径下的所有spring组件 /*@EnableJpaRepositories("me.shijunjie.dao") // JPA扫描该包路径下的Repositorie *//*@EntityScan("me.shijunjie.entity") // 扫描实体类 */@SpringBootApplication @EnableScheduling public class App extends SpringBootServletInitializer{ public static void main(String[] args) { SpringApplication.run(App.class, args); } }
测试
打开浏览器输入http://localhost:8080/demo/save
成功