整合Spring和Mybatis(在整合DBCP基础上修改)

整合DBCP请参考主页文章spring整合DBCP

前期准备工作

删除dao层的实现类,只留下接口即可。

在resource文件夹下导入dao层对应的xml文件以及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>
//只写映射文件的代码
    <mappers>
        <mapper resource="dao/userMapper.xml"></mapper>
    </mappers>

</configuration>

第一步

导入所需jar包

XML 复制代码
 <!--mybatis项目所需jar包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>

        <!--整合mybatis与spring需要的jar包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>

第二步

书写核心配置文件beans.xml

XML 复制代码
<!--开启注解-->
    <context:annotation-config/>
    <!--组件扫描-->
    <context:component-scan base-package="com.xszx"></context:component-scan>
    <!--  配置数据源  -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql:///sjt2405"></property>
        <property name="username" value="root"></property>
        <property name="password" value="123456"></property>
    </bean>
    <!--创建sqlSessionFactory对象-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入数据源对象-->
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="mybatis-config.xml"></property>
    </bean>
    <!--创建sqlSessionTemplate对象-->
	<!--需要配置Spring专属的SqlSession,以便与当作参数传递给其他的类使用-->
	<!--sqlSessionTemplate没有无参构造,所以注入时需要使用构造方法注入-->
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
    </bean>

第三步

将原本创建userDao的代码改成创建sqlSessionTemplate并且去读取userDao.class

java 复制代码
@Service // 控制反转的个性化注解 还有@controller、@Repository
public class UserServiceImpl implements UserService {

    private SqlSessionTemplate sqlSessionTemplate;
    @Autowired //依赖注入的注解,默认是byType,可以使用@Qualifier注解来指定名称
    public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
        this.sqlSessionTemplate = sqlSessionTemplate;
    }
 
    @Override
    public void addUser(User user) {
        System.out.println("完成业务");
        UserDao userDao = sqlSessionTemplate.getMapper(UserDao.class);
        userDao.add(user);
    }
}

第四步

测试

java 复制代码
//测试层
public class test {
    public static void main(String[] args) throws Exception {
        //读取核心配置文件
        BeanFactory beanFactory =  new ClassPathXmlApplicationContext("beans.xml");
        //获取bean(注解)
        UserController userController =(UserController) beanFactory.getBean("userController");
        //执行
        userController.addUser();
    }
}



//controller层
@Controller  //controller控制反转的个性化注解,通用的是@Component
public class UserController {
    User user = new User();
    UserService userServiceImpl;
    @Resource
    public void setUserServiceImpl(UserService userServiceImpl) {
        this.userServiceImpl = userServiceImpl;
    }
    
    public void addUser() throws Exception {
        user.setRole(1);
        user.setName("DBCP");
        user.setPwd("123");
        //执行
        userService.addUser(user);
    }
}
相关推荐
算.子9 小时前
【Spring AI 实战】八、完整 RAG 问答实战:检索 + 重排序 + 生成全链路
java·人工智能·spring
2601_9498166810 小时前
springcloud springboot nacos版本对应
spring boot·spring·spring cloud
geNE GENT10 小时前
SQL 中UPDATE 和 DELETE 语句的深入理解与应用
数据库·sql
blxr_10 小时前
深入Spring AI RAG:揭秘RetrievalAugmentationAdvisor的过滤器机制
人工智能·spring
番茄去哪了10 小时前
JeecgBoot框架集成spring ai并进行同步调用异步调用模板
java·人工智能·spring
DavidSoCool11 小时前
Springboot AI 创建MCP Server
java·spring·ai·大模型·springboot·mcp
notfound404311 小时前
解决SpringCloudGateway用户请求超时导致日志未记录情况
java·spring boot·spring·gateway·springcloud
dLYG DUMS11 小时前
如何在docker中的mysql容器内执行命令与执行SQL文件
sql·mysql·docker
以神为界11 小时前
PHP与数据库交互实操:连接方法+SQL注入防范+系统数据库解析
数据库·sql·网络安全·php·web
auspicious航11 小时前
PostgreSQL性能优化实战——索引、SQL与参数调优
sql·postgresql·性能优化