spring集合mybatis(动态代理)

刚学ssm,一直使用spring和mybatis集合就是用传统的方法,昨天看到别人写的代码dao层竟然没有实现,都没有使用sqlsession,纳闷了半天,到处查阅才知道原来mybatis和spring整合可以使用动态管理,将底层的逻辑代码交给spring框架来做,简短的记录一下用法

1.导包

这一步真的非常非常重要,因为对spring各种包的不了解导致我莫名其妙报错半天,记录一下我因为导包遇到的问题

这一步就是 MapperScannerConfigurer创建失败,需要spring-tx或者spring-jdbc的包,但是只导入spring-tx问题会变成这个

 同时,不导入mysql-connector-java也是这个问题,这个应该早点想到的,问题就是数据源的dataSource属性抛出异常,没这个包是找不到驱动的,附上一下所需要的的所有包,导包真的很重要

<dependencies>
    <!--dependency>
      <groupId>org.example</groupId>
      <artifactId>[the artifact id of the block to be mounted]</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.3.22</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.10</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.3.22</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.6</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
    </dependency>
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.3</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.3.22</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.29</version>
    </dependency>
  </dependencies>

2.编写pojo

package com.example.pojo;

public class User {
    private int id;
    private String username;
    private String password;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

3.编写dao接口和service类

service接口就是和dao接口一样的,这里省略

package com.example.dao;

import com.example.pojo.User;

public interface userMapper {
    public User findbyid(int id);
}
package com.example.service.impl;

import com.example.dao.userMapper;
import com.example.pojo.User;
import com.example.service.userservice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class userserviceimpl implements userservice {
    @Autowired
    private userMapper usermapper;
    public User findbyid(int id) {
        return usermapper.findbyid(id);
    }
}

4.编写userMapper文件

有几个需要注意的地方:

1.namespace需要是dao接口的全路径名,不止到包

2.id等于dao接口中的方法名称

3.resultType和返回值一致

4.parameterType和参数一致

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.dao.userMapper">
    <select id="findbyid" resultType="com.example.pojo.User" parameterType="int">
        select * from user where id=#{id}
    </select>
</mapper>

5.编写applicationContext和sqlMapperConfig配置

sqlMapperConfig不重要,这里的代码都扔在spring配置文件中

<?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="./userMapper.xml"/>
    </mappers>
</configuration>

主要看spring的配置,这里把重要的东西注释在代码中

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!--导入jdbc配置文件-->
    <context:property-placeholder location="jdbc.properties"/>
    <!--配置数据源-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <!--配置mybatis与spring的集成-->
    <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="sqlMapperConfig.xml"/>
    </bean>
    <!--动态代理主要靠这个,扫描包里的类,将他们配置成MapperFactoryBean-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.example.dao"/>
    </bean>
    <!--扫描注释-->
    <context:component-scan base-package="com.example.service"/>
</beans>

6.测试

import com.example.pojo.User;
import com.example.service.impl.userserviceimpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    @org.junit.Test
    public void test1(){
        ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
        userserviceimpl service=app.getBean(userserviceimpl.class);
        User user1=service.findbyid(2);
        System.out.println(user1);
    }
}

运行成功。 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值