Spring和Mybatis整合的过程(详细的很)
程序员文章站
2022-05-18 17:35:09
一、准备工作IDEA 2019.3,创建一个maven项目,目录结构如下:...
一、准备工作
1. IDEA 2019.3,创建一个maven项目,目录结构如下:
2.pom文件依赖
<dependencies>
<!-- Spring依赖1:spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<!-- Spring依赖2:spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<!-- Spring依赖3:spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<!--mybatis整合spring-->
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<!--mysql依赖,不加的话会报错驱动异常-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<!--事务的依赖,如果是更新数据库表操作是涉及到它的-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
<!--mybatis与spring整合的依赖依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.1</version>
</dependency>
<!-- Spring依赖4:spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
</dependencies>
3.其它一些配置文件信息db.properties、mybatis-config.xml、springAndMybatis.xml
//db.properties这是数据库连接的一些信息
#配置连接数据的参数信息,注意这是版本高的mysql有的驱动的写法,加上cj
driver_class=com.mysql.cj.jdbc.Driver
jdbc_url=jdbc:mysql://localhost/spring_task_test?useSSL=false&serverTimezone=GMT%2B8
db_username=自己的数据库用户名
db_password=自己数据库的登录密码
//mybatis-config.xml这是mybatis的配置文件
<?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文件 -->
<properties resource="db.properties" />
<!-- MyBatis框架运行规则配置 -->
<settings>
<!-- 开启日志
<setting name="logImpl" value="STDOUT_LOGGING" />
-->
<!-- 整体开启mybatis的二级缓存-->
<setting name="cacheEnabled" value="true" />
</settings>
<!-- 设置别名(为实体类设置别名) Aliases单词是别名的意思-->
<typeAliases>
<!-- 为每一个实体设置别名 -->
<!-- 设置实体类包,为该package中的每个实体类自动设置别名,别名就是实体类名字 -->
<package name="com.my.entity" />
</typeAliases>
<!-- 环境列表 -->
<!-- default:设置当前使用的环境environment id -->
<environments default="development">
<!-- 环境1(开发) -->
<environment id="development">
<!-- 事务管理器:采用JDBC事务 -->
<transactionManager type="JDBC" />
<!-- 数据源(数据库连接池) -->
<!-- type设置为pooled,启动数据库连接池 -->
<dataSource type="POOLED">
<!-- 数据库连接参数 -->
<property name="driver" value="${driver_class}" />
<property name="url" value="${jdbc_url}" />
<property name="username" value="${db_username}" />
<property name="password" value="${db_password}" />
</dataSource>
</environment>
</environments>
<!-- 映射器列表 ,也就是将Mapper接口文件与Mapper.xml文件对应起来的-->
<mappers>
<!-- 自动访问此包下面的所有映射文件.xml文件 -->
<package name="com.my.dao.mapper" />
</mappers>
</configuration>
//springAndMybatis.xml关于一些spring和Mybatis的配置
<?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">
<!--指的是扫描com.my这个包下面的所有注解,我们这里的话是使用一个配置类完成注解的扫描
<context:component-scan base-package="com.my"/>
-->
<!--1.准备数据源,因为SQLSessionFactory在被创建时是SQLsessionfactoryBuilder创建的,
而它需要读取配置文件(包含数据库的连接信息),和读取xxxmapper.xml文件
-->
<!--读取外部的db.properties文件
location表示的是数据库连接信息的properties文件的位置
-->
<context:property-placeholder location="db.properties" />
<bean id="dataSourceBean" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!--方式一
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/web_epidemic_prevention_materials_record_system?useSSL=false&serverTimezone=GMT%2B8"/>
<prope类rty name="username" value="root"/>
<property name="password" value="xxxxx"/>
-->
<!--方式二,使用${里面是properties文件里面的键的名字}-->
<property name="driverClassName" value="${driver_class}"/>
<property name="url" value="${jdbc_url}"/>
<property name="username" value="${db_username}"/>
<property name="password" value="${db_password}"/>
</bean>
<!--2.准备SQLSessionFactory
因为要用SQLSessionFactory创建SqlSession对象,用SqlSession对象调用方法UserMapper mapper=SqlSession.getMapper("UserMapper.class");
它实际上是一个接口的代理对象,(充当接口的实现类),所以我们要让spring容器来管理这个bean
-->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--数据源,这个是必须的,通过数据源相当于获取数据库配置信息和Mapper信息-->
<property name="dataSource" ref="dataSourceBean"/>
<!--
方式一:
数据源
<property name="dataSource" ref="dataSourceBean"/>
注入实体类所在包的别名
<property name="typeAliasesPackage" value="com.my.entity"/>
注入mapper映射文件所在的路径,类路径下的所有mapper文件,匹配XXXMapper.xml文件
<property name="mapperLocations" value="classpath*:com/my/dao/mapper/*Mapper.xml"/>
-->
<!--方式二-->
<!--1.读取mybatis.xml配置文件-->
<property name="configLocation" value="mybatis-config.xml"/>
</bean>
<!--Mapper扫描器-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--注入当前名称的SQLSessionFactory的bean名称-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/>
<property name="basePackage" value="com.my.dao.mapper"/>
</bean>
</beans>
4.SystemConfig类、StudentMapperImpl类、IStudentMapper接口、
IStudentMapper.xml文件、Student实体类、Test1类的代码如下:
SystemConfig类
package com.my.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
//这是一个配置类,用来为我们系统提供一些配置信息,可以不写任何的逻辑;当我们在main中加载Spring的容器时,参数传入此配置类信息,
//容器就会执行这些注解,来做对应的功能
@Configuration//表明这是一个配置类
@ImportResource("springAndMybatis.xml")//导入Spring的配置文件
@ComponentScan(basePackages = "com.my")//注解扫描器,当我们在扫描此包下的所有类时,会自动的扫描所有加注解的类
public class SystemConfig {
}
StudentMapperImpl类
package com.my.dao.impl;
import com.my.dao.mapper.IStudentMapper;
import com.my.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class StudentMapperImpl implements IStudentMapper {
@Autowired
//注入接口属性
private IStudentMapper mapper;
@Override
public List<Student> listStudent() {
return mapper.listStudent();
}
}
IStudentMapper接口
package com.my.dao.mapper;
import com.my.entity.Student;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
//学生信息的接口
public interface IStudentMapper {
//查询所有学生的信息的方法
List<Student> listStudent();
}
IStudentMapper.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.my.dao.mapper.IStudentMapper">
<!-- 在这个映射文件中局部开启 ,第二个参数表示的是隔100秒进数据库中进行新数据的刷新 ,开其缓存后访问更快了-->
<cache eviction="LRU" flushInterval="100000" readOnly="true"
size="1024">
</cache>
<!--查询所有的学生的信息
这个id是Mapper接口中的查询所有学生信息的方法的名字,返回类型是每一个Student类型
-->
<select id="listStudent" resultType="Student">
SELECT
id,
name,
sex
FROM student
</select>
</mapper>
Student实体类
package com.my.entity;
//学生的实体类
public class Student {
//学生的学号id
private String id;
//学生的姓名
private String name;
//学生的性别
private String sex;
//生成对应的set和get方法
public void setId(String id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getSex() {
return sex;
}
//重写toString方法
@Override
public String toString() {
return "Student{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
'}';
}
}
Test1类
package com.my.test;
import com.my.config.SystemConfig;
import com.my.dao.impl.StudentMapperImpl;
import com.my.entity.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.util.List;
//测试Spring与Mybatis的整合
public class Test1 {
public static void main(String[] args) {
//加载Spring容器,采此构造的参数是配置类SystemConfig的字节码对象,当我们在启动main线程时会加载配置类的信息
ApplicationContext applicationContext=new AnnotationConfigApplicationContext(SystemConfig.class);
StudentMapperImpl studentInfo=applicationContext.getBean(StudentMapperImpl.class);//参数是对应实现类
//的字节码
List<Student> studentList= studentInfo.listStudent();
//输出学生信息
for(Student student:studentList){
System.out.println("学号:"+student.getId()+"--"+"姓名:"+student.getName()+"--"+"性别:"+student.getSex());
}
}
}
运行结果:
数据库信息:
本文地址:https://blog.csdn.net/qq_41713361/article/details/109604706
上一篇: 内火旺怎么调理 内火旺吃什么好
下一篇: Java 爪哇学习--基础
推荐阅读
-
spring boot整合mybatis+mybatis-plus的示例代码
-
Mybaits 源码解析 (十二)----- Mybatis的事务如何被Spring管理?Mybatis和Spring事务中用的Connection是同一个吗?
-
Spring-Data-JPA整合MySQL和配置的方法
-
python篇-关于在for循环和列表结合中进行删除过程的陷阱详细解释
-
安全基线(Linux和Windows篇)讲的很详细,内有学习资料
-
Spring和Mybatis整合全过程实现(idea实现)适合初学spring和mybatis
-
Spring和Mybatis整合需要导入的依赖
-
apache2.2和php5.2.17在windows下整合过程的错误解决方法
-
Apache和Tomcat服务器间的区别、联系、整合详细介绍
-
Spring整合MyBatis的三种方式