Spring整合MyBatis——超详细

Spring整合MyBatis——超详细Spring整合MyBatis——超详细一、Spring整合MyBatis的三个关键点二、整合步骤1、创建一个Maven项目2、在pom.xml文件中添加jar包的依赖2、配置MyBatis文件(1)新建一个实体类的包和User实体类(2)编写实体类(3)新建Mapper接口包和UserMapper接口(3)新建jdbc资源文件jdbc-config.properties(4)新建mybatis配置文件mybatis.xml(5)新建logj4j的日志配置文件log4j.properties

大家好,又见面了,我是你们的朋友全栈君。

一、Spring整合MyBatis的三个关键点

(1)将MyBatis的DataSource交给Spring IoC容器创建并管理,使用第三方数据库连接池(Druid,C3P0等)代替MyBatis内置的数据库连接池

(2)将MyBatis的SqlSessionFactory交给Spring IoC容器创建并管理,使用spring-mybatis整合jar包中提供的SqlSessionFactoryBean类代替项目中的MyBatisUtil工具类

(3)将MyBatis的接口代理方式生成的实现类,交给Spring IoC容器创建并管理

二、整合步骤

1、创建一个Maven项目

在这里插入图片描述在这里插入图片描述
在这里插入图片描述选择自动导入jar包
在这里插入图片描述

2、在pom.xml文件中添加jar包的依赖

Spring核心
MyBatis核心
MySQL JDBC驱动
log4j日志
JUnit单元测试
Lombok插件
Druid数据库连接池
Spring和的MyBatis整合包
Spring和ORM框架的整合包—此依赖项会自动导入spring-orm,spring-jdbc,spring-tx三个jar包
Spring和JUnit的整合包

<dependencies>
<!-- Junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- MyBatis核心Jar包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- MySql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- Lombok工具 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<!-- Spring核心 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.3</version>
</dependency>
<!-- Spring-test测试 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.3</version>
<scope>test</scope>
</dependency>
<!-- slf4j日志包 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<!-- druid阿里的数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!-- Spring整合ORM -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.3.3</version>
</dependency>
<!-- Spring整合MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>

2、配置MyBatis文件

(1) 新建一个实体类的包和User实体类

在这里插入图片描述
在这里插入图片描述

(2) 编写实体类

我的users表
在这里插入图片描述
User的实体类
在这里插入图片描述

(3) 新建Mapper接口包和UserMapper接口

在这里插入图片描述在这里插入图片描述

(3) 新建jdbc资源文件 jdbc-config.properties

在这里插入图片描述 jdbc-config.properties文件内容为连接本地MySQL的基本信息,每个人数据库信息不一样,以自己的为准
在这里插入图片描述

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8
jdbc.username=root
jdbc.password=wxc666888

(4) 新建mybatis配置文件 mybatis.xml

在这里插入图片描述
配置文件内容只有一个空壳,里面有一个settings的属性,其他的基本信息都有可以通过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>
<!-- 开启延迟加载 该项默认为false,即所有关联属性都会在初始化时加载 true表示延迟按需加载 -->
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true"/>
</settings>
</configuration>

(5) 新建logj4j的日志配置文件log4j.properties

在这里插入图片描述
内容为日志的输出类型和其他配置信息
在这里插入图片描述

log4j.rootLogger=DEBUG, stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

(6) 新建User的映射mapper文件

先新建一个包,包名和上方的mapper接口的包名要一致
注:新建directory
在这里插入图片描述其次新建UserMapper映射文件UserMapper.xml
在这里插入图片描述映射文件内容为:

<?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">
<!-- namespace属性相当于映射文件的名称 属性值任意 接口代理方式,属性值要写成接口的完整类名-->
<mapper namespace="com.tjise.mapper.UserMapper">
<!-- 开启二级缓存 -->
<!-- <cache size="1024" //缓存对象的最大个数,默认是1024个 eviction="LRU" //缓存对象的回收策略,默认是LRU算法 //LRU Least Recently Used 最近最少使用,移除最长时间不被使用的对象 //FIFO First In First Out 先进先出,按对象进入缓存的顺序来移除它们 //SOFT 软引用,移除基于垃圾回收器状态和软引用规则的对象 //WEAK 弱引用,更积极地移除基于垃圾收集器和弱引用规则的对象 flushInterval="60000" //自动清空缓存的间隔时间,单位为毫秒,默认是0,表示无穷大 readOnly="true" //缓存对象是否只读,默认为false //true 从缓存中获取的数据都是只读的,为了加快查询速度,直接返回数据在缓存中的引用,缺点是不安全 //false 从缓存中获取的数据可能会被修改,为了安全起见,利用序列化和反序列的技术克隆一份新的数据返回,缺点是速度慢 /> -->
<!-- 开启MyBatis自带的二级缓存 -->
<cache size="1024" eviction="LRU" flushInterval="60000" readOnly="true" />
<!-- resultType属性指定结果的类型的完整包名 目前写的是user是因为后期会起一个别名, 默认的别名就是类名的首字母小写 -->
<select id="findUserList" resultType="user">
select * from users
</select>
</mapper>

(7) 在UserMapper接口中编写映射文件对应的方法

映射文件中的select 的id为findUserList,因此接口文件中的方法名就为findUserList,出现红线也不用着急,运行的时候不影响
在这里插入图片描述

3、配置Spring文件

(1) 新建spring配置文件spring.xml

在这里插入图片描述

(2) 编写spring.xml配置文件

i:修改spring.xml—加载数据库连接信息的属性文件
加载上方的jabc-config.properties数据库连接的基础信息
ii:配置Druid数据源的Bean
利用阿里巴巴的数据库连接池,根据上方的jabc-config.properties的文件创建一个dataSource连接信息
iii:配置SqlSessionFactory的Bean,并注入DataSource
把数据库连接存放在工厂中
iiii:配置自动扫描mapper的Bean—MapperScannerConfigurer
把上方的mapper接口文件都自动注入到IoC容器中,实现类Bean的名称默认为接口类名的首字母小写

<?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:component-scan base-package="com.tjise.bean"/>-->
<!-- 加载数据库连接信息的属性文件 -->
<context:property-placeholder location="classpath:jdbc-config.properties"/>
<!-- 配置Druid数据源的Bean -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<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>
<!-- 配置SessionFactory的Bean -->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- 指定MyBatis配置文件的位置 -->
<property name="configLocation" value="classpath:mybatis.xml"/>
<!-- 给实体类起别名 -->
<property name="typeAliasesPackage" value="com.tjise.entity"/>
</bean>
<!-- 配置mapper接口的扫描器,将Mapper接口的实现类自动注入到IoC容器中 实现类Bean的名称默认为接口类名的首字母小写 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- basePackage属性指定自动扫描mapper接口所在的包 -->
<property name="basePackage" value="com.tjise.mapper"/>
</bean>
</beans>

(3) 新建测试包和测试类

在这里插入图片描述在这里插入图片描述

(4) 编写测试类

package com.tjise.test;
import com.tjise.entity.User;
import com.tjise.mapper.UserMapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring.xml")
public class Test_SpringMyBatis { 

@Autowired
private UserMapper userMapper;
@Test
public void testFindUserList(){ 

List<User> userList = userMapper.findUserList();
System.out.println(userList);
}
}

(5) 运行测试方法

测试成功
在这里插入图片描述

三、实现其他功能

以上只是用了一个查询数据库users表全部信息的操作,剩下的自己根据自己的需要实现
只需要进行如下步骤:

1、在UserMapper.xml映射文件中,编写其他SQL语句

在这里插入图片描述

2、在UserMapper.java接口文件中,实现映射文件中编写的SQL语句的id

在这里插入图片描述

3、 进行测试,在测试文件中对编写的接口方法进行测试

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/135409.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Java架构师尼恩_java的面试宝典

    Java架构师尼恩_java的面试宝典加架构师尼恩免费领!专题01:JVM面试题(卷王专供+史上最全+2022面试必备)-V2专题02:Java算法面试题(卷王专供+史上最全+2022面试必备)-V2专题03:Java基础面试题(卷王专供+史上最全+2022面试必备)-V2专题04:架构设计面试题(卷王专供+史上最全+2022面试必备)-V2专题05:Spring面试题__专题06:SpringMVC__专题07:Tomcat面试题(卷王专供+史上最全+2022面试必备)-V2专题0

  • VS2013 百度云资源以及密钥[通俗易懂]

    VS2013 百度云资源以及密钥[通俗易懂]https://pan.baidu.com/s/1eu3XycWO8fWItmkFeYNv9w提取码:dy9r密钥:BWG7X-J98B3-W34RT-33B3R-JVYW9

  • Scalar_scala yield

    Scalar_scala yield掌握implicit的用法是阅读spark源码的基础,也是学习scala其它的开源框架的关键,implicit可分为:隐式参数隐式转换类型隐式调用函数1.隐式参数当我们在定义方法时,可以把最后一个参数列表标记为implicit,表示该组参数是隐式参数。一个方法只会有一个隐式参数列表,置于方法的最后一个参数列表。如果方法有多个隐式参数,只需一个implicit修饰即可。当调用包含隐式参数的方法是…

    2022年10月23日
  • Python中单引号、双引号和三双引号的区别:

    Python中单引号、双引号和三双引号的区别:Python中单引号、双引号和三双引号的区别先说1双引号与3个双引号的区别,双引号所表示的字符串通常要写成一行如:s1="hello,world"如果要写成多行,那么就要使用\

  • java解析json转Map

    java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapimportjava.util.ArrayList;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;i

  • java 4种 布局方法_JAVA布局模式:GridBagConstraints终极技巧

    java 4种 布局方法_JAVA布局模式:GridBagConstraints终极技巧JAVA布局模式:GridBagConstraints终极技巧(2006-11-1421:07:33)最近正在修改《公交线路查询系统》,做系统的时候都是用NULL布局,由于NULL布局调用windows系统的API,所以生成的程序无法在其他平台上应用,而且如果控件的数量很多,管理起来也比较麻烦,最近我发现一个非常强大的布局模式:GridBagConstraints布局,先发一个实例:gridx…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号