JAVA Spring学习笔记------Spring整合Mybatis
Spring整合Mybatis
首先看一下项目目录
因为以前所有的知识点都在一个模块里,而且目录比较混乱
所以对模块重构了一下
首先我们要在pom.xml文件中声明所需要的依赖
新增这两个依赖
<!-- 利用spring操作数据库依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.23</version> </dependency> <!--mybaties 与spring整合的依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.6</version> </dependency>
然后介绍一下各个类的作用
Domain是对应数据库的类实体,这个类不需要声明为Bean
package com.demo.Domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {
private int id;
private String Password;
}
然后是config文件,里边是各种配置类
SpringConfig配置类
package com.demo.config;
import org.springframework.context.annotation.*;
//声明这是一个配置类
@Configuration
//扫描所有的Bean文件
@ComponentScan("com.demo")
//@PropertySource("Jdbc.property")
//引用其他的配置类,各个配置类分开
@Import({JdbcConfig.class, MybatisConfig.class})
public class SpringConfig {
}
JdbcConfig配置类
package com.demo.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
//@Configuration
public class JdbcConfig {
//首先我们定义一个方法来获得要管理的对象
//然后我们通过@Bean来表示当前方法是的返回值是一个Bean
@Bean
public DataSource getDataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/mp");
dataSource.setUsername("root");
dataSource.setPassword("root");
return dataSource;
}
}
为什么要提供一个DataSource的Bean
因为利用Spring链接数据库是我们要创建一个SqlSeesionFactoy对象
原来是通过xml文件来配置相关的信息
现在我们直接通过DataSource就能创建SqlSeesionFactoy对象
package com.demo.config;
import com.demo.Dao.UserDao;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import javax.sql.DataSource;
public class MybatisConfig {
//在spring中 如果想要动用第三方类形成的Bean
//我们直接利用形参传入即可
//因为spring会自动扫描所需的依赖
//前提是已经把第三方类声明为bean类型
//mybitas通过sqlSessionFactor来创建sqlsession对象
//sqlSession是操作数据库的类
//Spring提供了SqlSessionFactoryBean来简化这个过程
//我们只需要传入一个DataSource对象就可完成创建
//同时还要说明数据库查询方法对应的接口
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setTypeAliases(User.class);
sessionFactoryBean.setDataSource(dataSource);
return sessionFactoryBean;
}
//设置Mapper对应的类
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(){
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setBasePackage("com.demo.Dao");
return mapperScannerConfigurer;
}
}
Config各个类介绍完毕
然后Dao是我们实现数据库查询的接口
也是利用注解开发的
UserDao
package com.demo.Dao;
import com.demo.Domain.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;
import java.util.List;
@Mapper
public interface UserDao {
@Select("select * from user")
public List<User> getAll();
}
@Mapper 也是把这个接口声明为一个Bean 同时也说明这是一个Mapper类
然后就是服务层Service
首先是接口
package com.demo.Service;
import com.demo.Dao.UserDao;
import com.demo.Domain.User;
import java.util.List;
public interface UserService {
public List<User> getAll();
}
然后是实现类
@Service说明这也是一个Bean
@Autowired 自动装填
因为我们已经把UserDao声明为一个Bean了
package com.demo.Service.impl;
import com.demo.Dao.UserDao;
import com.demo.Domain.User;
import com.demo.Service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
public List<User> getAll() {
return userDao.getAll();
}
}
最后是测试类
package com.testDemo;
import com.demo.Domain.User;
import com.demo.Service.UserService;
import com.demo.Service.impl.UserServiceImpl;
import com.demo.config.SpringConfig;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.util.List;
public class Test {
@org.junit.Test
public void test(){
ApplicationContext applicationContext =
new AnnotationConfigApplicationContext(SpringConfig.class);
UserService userService = (UserService) applicationContext.getBean(UserServiceImpl.class);
List<User> userList = userService.getAll();
for(User user:userList){
System.out.println(user.getId()+" "+user.getPassword());
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!