✨✨个人主页:沫洺的主页
📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏
📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专栏
📖Docker专栏📖Reids专栏📖MQ专栏📖SpringCloud专栏
💖💖如果文章对你有所帮助请留下三连✨✨
🎯Spring整合MyBatis
🥏环境搭建
🎫使用到的相关依赖
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.10.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.2</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.6</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> <scope>compile</scope> </dependency>
🎫数据库
🎫实体类(domain通常就代表了与数据库表一一对应的javaBean)
🎈com/moming/domain/Account
🎫准备service和dao层基础代码
🎈dao/AccountDao
package com.moming.dao; import com.moming.domain.Account; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import java.util.List; public interface AccountDao { @Insert("insert into tb_money(name,money)values(#{name},#{money})") void save(Account account); @Delete("delete from tb_money where id = #{id} ") void delete(Integer id); @Update("update tb_money set name = #{name} , money = #{money} where id = #{id} ") void update(Account account); @Select("select * from tb_money") List<Account> findAll(); @Select("select * from tb_money where id = #{id} ") Account findById(Integer id); }
🎈service/AccountService
package com.moming.service; import com.moming.domain.Account; import java.util.List; public interface AccountService { void save(Account account); void delete(Integer id); void update(Account account); List<Account> findAll(); Account findById(Integer id); }
🎈service/impl/AccountServiceImpl
package com.moming.service.impl; import com.moming.dao.AccountDao; import com.moming.domain.Account; import com.moming.service.AccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class AccountServiceImpl implements AccountService { @Autowired private AccountDao accountDao; public void save(Account account) { accountDao.save(account); } public void update(Account account){ accountDao.update(account); } public void delete(Integer id) { accountDao.delete(id); } public Account findById(Integer id) { return accountDao.findById(id); } public List<Account> findAll() { return accountDao.findAll(); } }
🎈resources/jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql:///db5?useSSL=false&useServerPrepStmts=true jdbc.username=root jdbc.password=123456
🥏普通使用mybatis方法
🎫创建resources/mybatis.xml核心配置文件
<?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> <!--扫描配置文件--> <properties resource="jdbc.properties"></properties> <!--起别名--> <typeAliases> <package name="com.moming.domain"/> </typeAliases> <environments default="mysql"> <environment id="mysql"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <!--扫描mapper--> <package name="com.moming.dao"/> </mappers> </configuration>
🎫创建SpringConfig主配置类进行包扫描
package com.moming.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan("com.moming") public class SpringConfig { }
🎫定义测试类App1进行测试
package com.moming; import com.moming.dao.AccountDao; import com.moming.domain.Account; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class App1 { public static void main(String[] args) throws IOException { //加载mybatis的核心配置文件,获取SqlSessionFactory //定义配置文件的路径 String resource = "mybatis.xml"; //资源加载返回字节输入流 InputStream inputStream = Resources.getResourceAsStream(resource); //获取工厂 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //获取SqlSession对象,用它来执行sql SqlSession sqlSession = sqlSessionFactory.openSession(); //执行sql //参数就是sql语句的唯一标识 //自动封装结果集 //3.1使用代理接口,先拿对象,再调方法 AccountDao accountDao = sqlSession.getMapper(AccountDao.class); Account byId = accountDao.findById(2); System.out.println(byId); //释放资源 sqlSession.close(); } }
🎫运行结果
🥏Spring整合MyBatis
🎫首先要知道mybatis进行数据层操作的核心对象是SqlSessionFactory
🎫使用SqlSessionFactoryBean封装SqlSessionFactory需要的环境信息
🎫 使用MapperScannerConfigurer加载Dao接口,创建代理对象保存到IOC容器中
🥏整合案例
🎫创建JdbcConfig配置DataSource数据源
package com.moming.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; //1.定义一个方法获得要管理的对象 //2.添加@Bean 表示当前方法的返回值是一个bena @Bean public DataSource dataSource(){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(userName); ds.setPassword(password); return ds; } }
🎫创建MybatisConfig整合mybatis
package com.moming.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 { //定义bean,SqlSessionFactoryBean,用于产生SqlSessionFactory对象 @Bean public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){ SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); ssfb.setTypeAliasesPackage("com.moming.domain"); ssfb.setDataSource(dataSource); return ssfb; } //定义bean,返回MapperScannerConfigurer对象 @Bean public MapperScannerConfigurer mapperScannerConfigurer(){ MapperScannerConfigurer msc = new MapperScannerConfigurer(); msc.setBasePackage("com.moming.dao"); return msc; } }
🎫创建SpringConfig主配置类进行包扫描和加载其他配置类
package com.moming.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.moming") @PropertySource("classpath:jdbc.properties") @Import({JdbcConfig.class,MybatisConfig.class}) public class SpringConfig { }
🎫定义测试类App进行测试
package com.moming; import com.moming.config.SpringConfig; import com.moming.domain.Account; import com.moming.service.AccountService; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class App { public static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); AccountService accountService = ctx.getBean(AccountService.class); Account byId = accountService.findById(2); System.out.println(byId); } }
🎫运行成功
🎯Spring整合Junit单元测试
🎫导入整合的依赖坐标spring-test
<!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!--spring整合junit--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.1.9.RELEASE</version> </dependency>
🎫使用Spring整合Junit专用的类加载器
🎫 加载配置文件或者配置类
🎫测试运行成功
🎫注意:junit的依赖至少要是4.12版本,可以是4.13等版本,否则出现如下异常: