Spring 整合Mybatis开发

目录

导入相关依赖

实体类

1.在学生信息表中完成查询操作

2 .根据学生名称查询学生信息

1.配置文件beans.xml文件

2.接口及其实现类

 3.映射文件以及mybatis-config.xml配置

4.测试

 5.注解开发

 部分我无法自动导入依赖jar在百度网盘中,自取

链接:https://pan.baidu.com/s/1A4xh8JqBDuZ9paOffA1aPg?pwd=7rpv 
提取码:7rpv

导入相关依赖

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.5.RELEASE</version>
        </dependency>
        <!--        <dependency>-->
        <!--            <groupId>org.springframework</groupId>-->
        <!--            <artifactId>spring-context-support</artifactId>-->
        <!--            <version>4.0.3.RELEASE</version>-->
        <!--        </dependency>-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.3.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.3.5.RELEASE</version>
        </dependency>
        <!--        <dependency>-->
        <!--            <groupId>org.springframework</groupId>-->
        <!--            <artifactId>spring-aspects</artifactId>-->
        <!--            <version>4.0.3.RELEASE</version>-->
        <!--        </dependency>-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>4.3.5.RELEASE</version>
        </dependency>
        <!--        <dependency>-->
        <!--            <groupId>org.springframework</groupId>-->
        <!--            <artifactId>spring-jdbc</artifactId>-->
        <!--            <version>6.0.8</version>-->
        <!--        </dependency>-->
        <!--        <dependency>-->
        <!--            <groupId>org.springframework</groupId>-->
        <!--            <artifactId>spring-tx</artifactId>-->
        <!--            <version>6.0.8</version>-->
        <!--        </dependency>-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>
        <!--        <dependency>-->
        <!--            <groupId>org.mybatis</groupId>-->
        <!--            <artifactId>mybatis-spring</artifactId>-->
        <!--            <version>1.2.2</version>-->
        <!--        </dependency>-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        <!--        <dependency>-->
        <!--            <groupId>com.mchange</groupId>-->
        <!--            <artifactId>c3p0</artifactId>-->
        <!--            <version>0.9.5-pre10</version>-->
        <!--        </dependency>-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.3.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.9</version>
        </dependency>
    </dependencies>

我这里是有一部分依赖自动导入不了的,所有我就手动加了,而且依赖的版本要mybatis-spring的版本对应,否则会出现以下错误,类文件使用版本不一致的意思,

(1条消息) 类文件具有错误的版本 61.0, 应为 52.0的解决方法_追逐梦想永不停的博客-CSDN博客

: org/springframework/dao/support/DaoSupport has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0

实体类

public class Student {
    private String sno;
    private String sname;
    private String ssex;
    private Integer sage;
    private String sdept;
    public Student() {
    }
    public String getSno() {
        return sno;
    }

    public void setSno(String sno) {
        this.sno = sno;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getSsex() {
        return ssex;
    }

    public void setSsex(String ssex) {
        this.ssex = ssex;
    }

    public Integer getSage() {
        return sage;
    }

    public void setSage(Integer sage) {
        this.sage = sage;
    }

    public String getSdept() {
        return sdept;
    }

    public void setSdept(String sdept) {
        this.sdept = sdept;
    }

    @Override
    public String toString() {
        return "Student{" +
                "sno='" + sno + '\'' +
                ", sname='" + sname + '\'' +
                ", ssex='" + ssex + '\'' +
                ", sage=" + sage +
                ", sdept='" + sdept + '\'' +
                '}';
    }
}

1.在学生信息中完成查询操作

需求说明:

(1)根据整合步骤实现Spring和MyBatis的整合。

(2)查询出全部学生信息数据。

(3)直接注入 SqlSessionTemplate(或通过 SqlSessionDaoSupport)实现。

(4)使用C3P0数据库连接池完成上述操作。

2 .根据学生名称查询学生信息

需求说明:

(1)在1的基础上增加功能。

(2)增加按照学生名称模糊查询学生信息的功能。

(3)直接注入 SqlSessionTemplate(或通过 SqlSessionDaoSupport)实现。

(4) 使用Druid数据库连接池实现上述操作。

1.配置文件beans.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       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">
    <!-- 引入属性文件 -->
<!--    <context:property-placeholder location="classpath:db.properties" ignore-unresolvable="true" />-->
<!--    &lt;!&ndash;配置数据源:数据源有非常多,可以使用第三方的,也可使使用Spring的&ndash;&gt;-->
<!--    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">-->
<!--        <property name="driverClassName" value="${jdbc.driver}"/>-->
<!--        <property name="url" value="${jdbc.url}"/>-->
<!--        <property name="username" value="${jdbc.username}"/>-->
<!--        <property name="password" value="${jdbc.password}"/>-->
<!--    </bean>-->
    <import resource="c3p0.xml"/>
<!--    <import resource="druid.xml"/>-->
<!--    <import resource="dbpc.xml"/>-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--关联Mybatis-->
        <property name="configLocation" value="classpath:MybatisConfig.xml"/>
        <property name="mapperLocations" value="classpath:Mapper/*.xml"/>
    </bean>

    <!--注册sqlSessionTemplate , 关联sqlSessionFactory-->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <!--利用构造器注入-->
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>
    <bean id="studentMapper" class="DAO.StudentMapperImpl">
        <property name="sqlSession" ref="sqlSession"/>
    </bean>
<!--    采用MapperFactoryBean注册映射器-->
<!--    <bean id="studentMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">-->
<!--        <property name="mapperInterface" value="DAO.StudentMapper"/>-->
<!--        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>-->
<!--    </bean>-->
    <!--     注册接口类的bean,使得程序中可以用注解方式获取 -->
<!--    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">-->
<!--        <property name="basePackage" value="DAO" />-->
<!--    </bean>-->

</beans>

这里可以自己配置数据源信息替换mybaits的数据源信息,也可以用c3p0,druid,配置好后引用即可

 c3p0.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
       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">
    <context:property-placeholder location="classpath:db.properties" ignore-unresolvable="true" />
    <!-- 一、使用c3p0连接池注册数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!-- 基础配置 -->
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="driverClass" value="${jdbc.driver}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>

        <!-- 关键配置 -->
        <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
        <property name="initialPoolSize" value="3"></property>
        <!--连接池中保留的最小连接数。Default: 2 -->
        <property name="minPoolSize" value="2"></property>
        <!--连接池中保留的最大连接数。Default: 15 -->
        <property name="maxPoolSize" value="15"></property>
        <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
        <property name="acquireIncrement" value="3"></property>

        <!-- 性能配置 -->
        <!-- 控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->
        <property name="maxStatements" value="8"></property>
        <!-- maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
        <property name="maxStatementsPerConnection" value="5"></property>
        <!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
        <property name="maxIdleTime" value="1800"></property>
    </bean>
</beans>

druid.xml 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
       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">
    <context:property-placeholder location="classpath:db.properties" ignore-unresolvable="true" />
    <!-- 一、使用druid数据库连接池注册数据源 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <!-- 基础配置 -->
        <property name="url" value="${jdbc.url}"></property>
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>

        <!-- 关键配置 -->
        <!-- 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时 -->
        <property name="initialSize" value="3" />
        <!-- 最小连接池数量 -->
        <property name="minIdle" value="2" />
        <!-- 最大连接池数量 -->
        <property name="maxActive" value="15" />
        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="10000" />

        <!-- 性能配置 -->
        <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
        <property name="poolPreparedStatements" value="true" />
        <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />

        <!-- 其他配置 -->
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000" />
        <!--   建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,
                  执行validationQuery检测连接是否有效。 -->
        <property name="testWhileIdle" value="true" />
        <!-- 这里建议配置为TRUE,防止取到的连接不可用 ,申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。-->
        <property name="testOnBorrow" value="true" />
        <!-- 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 -->
        <property name="testOnReturn" value="false" />
    </bean>

</beans>

2.接口及其实现类

public interface StudentMapper {
    List<Student> selectAll();
    List<Student> selectNames(@Param("sname")String sname);
    Student selectNameAndAge(@Param("sname")String sname, @Param("sage")int sage);
}

 增加Dao接口的实现类;私有化sqlSessionTemplate

public class StudentMapperImpl implements StudentMapper{
    private SqlSessionTemplate sqlSession;
    public void setSqlSession(SqlSessionTemplate sqlSession) {
        this.sqlSession = sqlSession;
    }
    @Override
    public List<Student> selectAll() {
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        return mapper.selectAll();
    }

    @Override
    public List<Student> selectNames(String sname) {
        return sqlSession.getMapper(StudentMapper.class).selectNames(sname);
    }

    @Override
    public Student selectNameAndAge(String sname, int sage) {
        return sqlSession.getMapper(StudentMapper.class).selectNameAndAge(sname,sage);
    }
}

 3.映射文件以及mybatis-config.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="db.properties"/>
    <typeAliases>
        <!--自动给pojo包下的实体类以首字母小写的类名作别名-->
        <package name="pojo"/>
    </typeAliases>
<!--    <environments default="development">-->
<!--        <environment id="development">-->
<!--            <transactionManager type="JDBC"/>-->
<!--            &lt;!&ndash;数据库连接相关配置,db.properties文件中的内容&ndash;&gt;-->
<!--            <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>-->
<!--        &lt;!&ndash;引入映射文件&ndash;&gt;-->
<!--        <mapper resource="Mapper/StudentMapper.xml"/>-->
<!--    </mappers>-->
</configuration>

注意,这里由于beans.xml配置了数据源信息,所有就不用在配置环境的内容了,否则会报以下错误

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'MyTest.StudentTest': Unsatisfied dependency expressed through field 'studentMapper'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'DAO.StudentMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org.//DTD mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="DAO.StudentMapper">
    <select id="selectAll" resultType="pojo.Student">
        select * from student
    </select>
    <select id="selectNames" resultType="pojo.Student">
        select * from student where sname like concat("%",#{sname},"%")
    </select>
    <select id="selectNameAndAge" resultMap="SNameAndAge">
        select * from student where sname like concat("%",#{sname},"%") and sage=#{sage}
    </select>
    <resultMap id="SNameAndAge" type="pojo.Student">
        <id property="sname" column="sname" />
        <result property="ssex" column="ssex" />
        <result property="sage" column="sage" />
    </resultMap>
</mapper>

4.测试

    @Test
    public void test1(){
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        StudentMapper studentMapper = (StudentMapper) context.getBean("studentMapper");
        List<Student> students = studentMapper.selectAll();
        for (Student student : students) {
            System.out.println(student.toString());
        }
    }
    @Test
    public void test2(){
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        StudentMapper studentMapper = (StudentMapper) context.getBean("studentMapper");
        List<Student> students = studentMapper.selectNames("李");
        for (Student student : students) {
            System.out.println(student.toString());
        }
    }

    @Test
    public void test3(){
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        StudentMapper studentMapper = (StudentMapper) context.getBean("studentMapper");
        Student students = studentMapper.selectNameAndAge("李",34);
//        for (Student student : students) {
            System.out.println(students.toString());
//        }
    }

 5.注解开发

改变beans.xml文件内容

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       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">

    <import resource="c3p0.xml"/>
<!--    <import resource="druid.xml"/>-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--关联Mybatis-->
        <property name="configLocation" value="classpath:MybatisConfig.xml"/>
        <property name="mapperLocations" value="classpath:Mapper/*.xml"/>
    </bean>

    <!--     注册接口类的bean,使得程序中可以用注解方式获取 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="DAO" />
    </bean>
    <!-- 自动扫描(自动注入) -->
    <context:component-scan base-package="DAO"/>
    <!-- 开启注解 -->
    <context:annotation-config />
</beans>

测试

@RunWith(SpringRunner.class)
@ContextConfiguration("classpath:beans.xml")
public class StudentTest {
    @Autowired
    StudentMapper mapper;
    @Test
    public void selectAll() {
        List<Student> students = mapper.selectAll();
        for (Student student : students) {
            System.out.println(student);
        }
    }
}

附上学习链接

(1条消息) Spring学习笔记(十一)。Spring整合MyBatis,applicationContext.xml,sqlSessionTemplate,SqlSessionDaoSupport_傻啦猫@_@的博客-CSDN博客

(1条消息) springMVC +mybites 中SqlSessionDaoSupport 的使用_山峰-飘雨的博客-CSDN博客

(1条消息) 超详细的JDBC基础,内含 C3P0 和 Druid 等 工具类 JAR 包下载_druidjar包_一直在进步的派大星的博客-CSDN博客

(1条消息) 超详细的JDBC基础,内含 C3P0 和 Druid 等 工具类 JAR 包下载_druidjar包_一直在进步的派大星的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值