Data Access 之 MyBatis(六)- Spring、Spring MVC、MyBatis整合(下)

简介: Data Access 之 MyBatis(六)- Spring、Spring MVC、MyBatis整合(下)

db.properties配置了数据库连接的相关信息

jdbc_driver=com.mysql.cj.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai
jdbc_username=root
jdbc_password=root
jdbc_initialSize=10
jdbc_maxActive=20
复制代码

2.4 MyBatis的配置

配置MyBatis全局配置文件mybatis-config.xml,只配置settings标签就可以,数据源、mapper等配置在Spring配置文件application.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>
    <settings>
        <!--开启驼峰命名-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--开启懒加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="aggressiveLazyLoading" value="false"/>
        <!--开启二级缓存-->
        <setting name="cacheEnabled" value="true"/>
    </settings>
</configuration>
复制代码

在Spring配置文件application.xml中将Myabtis整合到Spring中,需要先导入Mybatis-Spring的依赖

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.7</version>
</dependency>
复制代码

在application.xml中增加SqlSessionFactoryBean配置

<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="configLocation" value="mybatis-config.xml"></property>
    <property name="dataSource" ref="dataSource"></property>
    <property name="mapperLocations" value="classpath:/mappers/*.xml"></property>
</bean>
复制代码

将mapper包下的Mapper接口全部加入到Spring容器中

<!--持久层接口加入到Spring容器-->
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!--指定接口所在的包-->
    <property name="basePackage" value="com.citi.mapper"></property>
</bean>
复制代码

2.5 其他配置

mybatis日志配置logback.xml,放在resource目录下。可以在控制台打印出SQL

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
   <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
       <encoder>
           <pattern>[%thread] %d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
       </encoder>
   </appender>
    <root level="debug">
        <appender-ref ref="console"/>
    </root>
</configuration>
复制代码

至此Spring、Spring MVC、MyBatis三个框架整合完成

3.测试

持久层Mapper接口测试

数据库表与上一篇QA 由浅入深持久层框架(七)- MyBatis Cache用到的是同一张表,即t_teacher,这里不再重复

新建entity包,增加Teacher实体类

@Data
public class Teacher implements Serializable {
    private Integer id;
    private String teacherName;
    private String className;
    private String address;
    private Date birthDate;
}
复制代码

新建mapper包,增加TeacherMapper接口,并增加一个根据id查询Teahcer的方法

public interface TeacherMapper {
    Teacher getTeacherById(Integer id);
}
复制代码

在resources目录下新增mappers文件夹,用来存放Mapper接口的SQL映射文件,新建TeacherMapper接口的SQL映射文件TeacherMapper.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">
<mapper namespace="com.citi.mapper.TeacherMapper">
    <!--开启二级缓存-->
    <cache></cache>
    <select id="getTeacherById" resultType="com.citi.entity.Teacher">
        select * from t_teacher where id = #{id}
    </select>
</mapper>
复制代码

在test包下新增TeacherMapper接口的测试类TeacherMapperTest,新增getTeacherById方法的测试方法

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:application.xml")
public class TeacherMapperTest {
    @Autowired
    private TeacherMapper teacherMapper;
    @Test
    public void getTeacherById() {
        teacherMapper.getTeacherById(1);
    }
}
复制代码

测试类中用到了Spring Test,主要不要忘记类上的两个注解

执行测试方法

a802da69669d48ea9080040dbe723876_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

成功查询到了id为2的Teacher对象

Service层测试

新建service包,在该包下新增TeacherService接口,新增一个根据id查找Teacher的方法

public interface TeacherService {
    Teacher findTeacherById(Integer id);
}
复制代码

在service包下新增impl包,用来保存接口的实现类,在impl包中新增TeacherService接口的实现类TeacherServiceImpl

@Service
public class TeacherServiceImpl implements TeacherService {
    @Autowired
    private TeacherMapper teacherMapper;
    @Override
    public Teacher findTeacherById(Integer id) {
        return teacherMapper.getTeacherById(id);
    }
}
复制代码

增加TeacherService的测试类TeacherServiceTest

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:application.xml")
public class TeacherServiceTest {
    @Autowired
    private TeacherService teacherService;
    @Test
    public void findTeacherById() {
        Teacher teacher = teacherService.findTeacherById(1);
        System.out.println(teacher);
    }
}
复制代码

执行测试

image.png

控制台成功输出id为1的Teacher对象,说明service层调用mapper层成功

Controller层测试

配置Tomcat前,首先选中项目,点击IDEA菜单的File选项,点击Project Structure,左边选择Artifacts,在WEB-INF下新建一个lib目录,将右侧的jar包全部选中并导入lib文件夹中

image.png

配置Tomcat,点击IDEA的DEIT Configurations,配置一个本地的Tomcat

image.png

并将项目部署到Tomcat中

image.png

编写Controller层代码,新建controller包,增加TeacherController类

@Controller
@RequestMapping("/teacher")
public class TeacherController {
    @Resource
    public TeacherService teacherService;
    @RequestMapping("/{id}")
    public ModelAndView findTeacher(@PathVariable("id") Integer id){
        Teacher teacher = teacherService.findTeacherById(id);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("teacher",teacher);
        modelAndView.setViewName("success");
        return modelAndView;
    }
}
复制代码

视图解析器已经配置了WEB-INF下的pages目录,所以在WEB-INF下新增pages目录并新增一个jsp文件success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <h2>SUCCESS</h2>
    <h3>${teacher}</h3>
</body>
</html>
复制代码

启动Tomcat,浏览器输入地址http://localhost:8080/teacher/1, 查询id为1的Teacher的信息

image.png

Spring、Spring MVC、MyBatis整合成功!


相关文章
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
277 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
2月前
|
Java 数据库连接 数据库
spring复习05,spring整合mybatis,声明式事务
这篇文章详细介绍了如何在Spring框架中整合MyBatis以及如何配置声明式事务。主要内容包括:在Maven项目中添加依赖、创建实体类和Mapper接口、配置MyBatis核心配置文件和映射文件、配置数据源、创建sqlSessionFactory和sqlSessionTemplate、实现Mapper接口、配置声明式事务以及测试使用。此外,还解释了声明式事务的传播行为、隔离级别、只读提示和事务超时期间等概念。
spring复习05,spring整合mybatis,声明式事务
|
1月前
|
存储 Java API
如何使用 Java 记录简化 Spring Data 中的数据实体
如何使用 Java 记录简化 Spring Data 中的数据实体
34 9
|
2月前
|
Java 数据库连接 数据库
SpringBoot 整合jdbc和mybatis
本文详细介绍了如何在SpringBoot项目中整合JDBC与MyBatis,并提供了具体的配置步骤和示例代码。首先,通过创建用户实体类和数据库表来准备基础环境;接着,配置Maven依赖、数据库连接及属性;最后,分别展示了JDBC与MyBatis的集成方法及其基本操作,包括增删查改等功能的实现。适合初学者快速入门。
SpringBoot 整合jdbc和mybatis
|
1月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
57 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
1月前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
|
1月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
53 2
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
1月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
39 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
1月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
108 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习