第一步:在pom.xml中导入依赖
1.mysql依赖
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency>
2.mybatis依赖
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> </dependency>
3.log4j依赖(打印日志)
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
4.lombok依赖
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.34</version> </dependency>
5.spring-context依赖
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.9</version> </dependency>
6.aspectjweaver依赖
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.19</version> </dependency>
7.mybatis-spring依赖
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.1.2</version> </dependency>
8.spring-jdbc依赖(引入外部的数据源参数)
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.9</version> </dependency>
9.druid依赖(druid连接池对象)
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.23</version> </dependency>
10.spring-test依赖 (spring测试支持的依赖)
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.3.9</version> </dependency>
11.junit依赖
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
第二步:在resources目录下创建config目录、log4j.properties文件和mapper目录;在config目录下创建spring-config文件、spring-mybatis文件、mybatis-config.xml文件和jdbc.properties文件(我相信你们都有设置长用的一些文件的配置);在mapper目录下创建与在Java目录下mapper中类名相同的xml文件
spring-config文件和spring-mybatis文件的创建需要用到导入spring依赖后一些东西看图:
再创建好的spring-config.xml中添加 包扫描-->ioc
<context:component-scan base-package="cn.kgc.spring.day05"></context:component-scan> <!-- base-package位置的包名根据自己的来修改-->
第三步:在Java包中建好需要用到的一些基础结构(entity、mapper、service、servlet)里面改创建的创建
entity:需要用到的注解有:@Data
mapper:不需要注解,后续会在配置文件中写
service:需要用到注解有:@Service ;在service中不需要用new创建mapper层中的对象但需要用到@Autowired 注解;还有实现接口的重写接口中方法的注解 @Override(基本不需要自己去写)
servlet:需要用到的注解有:@Controller ;在servlet中不需要用new创建service层中的对象但需要用到 @Autowired 注解;
第四步:整合spring框架和mybatis框架
点开已经创建好的spring-mybatis.xml文件
1.引入外部的数据源参数
<context:property-placeholder location="classpath:config/jdbc.properties"></context:property-placeholder><!-- 这玩意也需要导包-->
2.托管druid连接池对象
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource"> <!-- id中的名字可以随意取,最好是见名知意--> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> <property name="driverClassName" value="${jdbc.driver}"></property> <property name="url" value="${jdbc.url}"></property> </bean>
3.sqlSessionFactory对象:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据源参数配置-->
<property name="dataSource" ref="druidDataSource"></property>
<!-- mapper文件位置-->
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
<!-- 实体类起别名设置-->
<property name="typeAliasesPackage" value="cn.kgc.spring.day05.entity"></property>
<!-- 其中value的位置每个人都不一样,换成自己entity包的位置,需要全限定包名-->
<!-- 指定mybatis的配置文件-->
<property name="configLocation" value="classpath:config/mybatis-config.xml"></property>
</bean>
<!-- 这一步mybatis-config.xml文件中还有一些配置没有引入spring-mybatis中可以直接把mybatis-config.xml引入-->
4.mapper接口的扫描 将接口生成的代理对象托管到spring容器中
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="org.example.day05.mapper"/>
<!-- value中的路径名得改成自己的-->
</bean>
没有这一步的话
1.无法自动注入Mapper:由于Mapper接口没有被Spring容器管理,因此你无法在其他Spring Bean中通过@Autowired
或其他注入方式自动注入这些Mapper接口。这会导致编译错误或运行时异常,因为Spring容器无法找到对应的Bean来注入。
2.MyBatis无法找到Mapper:MyBatis本身依赖于Spring容器来查找Mapper接口,以便在运行时动态创建它们的实现。如果没有这个配置,MyBatis将无法找到这些Mapper接口,从而无法执行任何数据库操作。
5.把mybtis-config.xml文件中已引入spring-mybatis文件中的一些东西可以删除了,看图:
6.点开spring-config.xml将spring-mybatis.xml导入进来通过代码
<import resource="spring-mybatis.xml"></import>
第五步:以上做完基本上就配置好了,还有就是和测试类创建关系了
创建servlet的测试类在测试类上添加注解@ContextConfiguration("classpath:config/spring-config.xml") @RunWith(SpringJUnit4ClassRunner.class)
注解添加后就是测试了,就不像以前需要创建代理对象了,全都省略了,真不错以下代码就不需要了
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("config/spring-config.xml"); UserServlet userServlet = ac.getBean("userServlet", UserServlet.class);
就可以直接通过这两步直接测试了
补充:添加了一个事务的管理
在pom.xml中添加spring-tx依赖(spring事务支持的依赖)
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.3.9</version> </dependency>
在spring-mybatis中添加事务的管理对象
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="druidDataSource"></property> </bean>
在开启开启事务注解的支持
xmlns:tx="http://www.springframework.org/schema/tx" 需要导这个包中的结尾为/tx <tx:annotation-driven></tx:annotation-driven>
在点到service的实现类添加Transactional注解有两种注解方式
1.添加在类名上,这就是整个类都会对事务管理
2.添加在方法上,就是对那个方法的事务的管理