整合Mybatis(Spring学习笔记十二)

一、导入相关的包

        junit 包        Mybatis包        mysql数据库包        Spring相关的包        Aop相关的包        

        Mybatis-Spring包(现在就来学这个)       

提示jdk版本不一致的朋友记得 jdk8只支持spring到5.x 所以如果导入的spring(spring-webmvc spring-jdbc)大于5.x 就需要降级或者安装jdk17否则就会报错;jdk8跟着我导入的包的版本来是没问题的

配置文件如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.example</groupId><artifactId>SpringFather</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>SpringSon10</artifactId><packaging>war</packaging><name>SpringSon10 Maven Webapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!--导入junit支持--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version></dependency><!--导入AOP支持--><!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.13</version></dependency><!--导入mysql支持        --><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!--导入Mybatis支持        --><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</version></dependency><!--导入Spring支持        --><!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.9.RELEASE</version></dependency><!--Spring操作数据库的话还需要导入一个spring-jdbc 支持    --><!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.1.9.RELEASE</version></dependency><!--Mybatis和Spring整合的包--><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.2</version></dependency><!--导入lombok包好写实体类的时候偷懒--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency><!--导入log4j相关依赖--><!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies><build><finalName>SpringSon10</finalName><!--解决配置文件无法导出或生效的问题(一般加在父工程)--><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>
</project>

二、回忆一下Mybatis怎么实现的

创建实体类

package com.li.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {private int id;private String name;private String pwd;
}

 创建增删改查接口

package com.li.dao;import com.li.pojo.User;import java.util.List;public interface UserMapper {List<User> selectAll();
}

 创建工具类获取sqlSessionFactory

package com.li.utils;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;public class MybatisUtils {//官网上有三段代码拿来用 工具类的作用就是得到SqlSessionprivate static final SqlSessionFactory sqlSessionFactory;static{try {//获取SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {throw new RuntimeException(e);}}//获取SqlSessionpublic static SqlSession getSqlSession(){return sqlSessionFactory.openSession();}
}

 创建接口Mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--上面是头文件不管-->
<!--namespace等于绑定一个对应的Mapper接口 我这里是UserMapper接口-->
<mapper namespace="com.li.dao.UserMapper">
<!--    这里没有写sql语句--><select id="selectAll" resultType="user">select *from mybatis1.user</select>
</mapper>

原来的mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--通过properties标签引入外部配置文件--><properties resource="db.properties"/><!--给实体类取别名--><typeAliases><package name="com.li.pojo"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${urlName}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><!--    绑定mapper--><mappers><mapper resource="com/li/dao/UserMapper.xml"/><!--&lt;!&ndash;        &lt;!&ndash;也可以通过class绑定mapper&ndash;&gt;--><!--        <mapper class="com.li.mapper.UserMapper"/>--><!--&lt;!&ndash;        &ndash;&gt;&ndash;&gt;--></mappers></configuration>

和mybatis-config.xml相对应的配置文件

driver=com.mysql.jdbc.Driver
urlName=jdbc:mysql://localhost:3306/mybatis1?useSSL=false&useUnicode=true&characterEncoding=UTF-8
username=root
password=root

 测试类测试能不能跑通

package com.li.dao;import com.li.pojo.User;
import com.li.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;public class Testgo {@Testpublic void test1(){SqlSession sqlSession = MybatisUtils.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);for (User user : mapper.selectAll()) {System.out.println(user);}sqlSession.close();}
}

 目录结构

三、Mybatis-Spring

1、什么是Mybatis-spring

2、编写Mybatis-spring的xml配置文件

直接用spring的配置文件格式

<?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:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd"></beans>

  配置数据库连接的数据,相当于Mybatis的连接数据库那一段

    <!--DataSource:使用Spring的数据源替换Mybatis的配置    还可以用c3p0  dbcp  druid--><!--这里相当于配置连接数据库--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis1?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="root"/></bean>

 相当于这一段

  <environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${urlName}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments>

  得到sqlSessionFactory

  <!--得到sqlSessionFactory    --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--这里 ref后面值就是我们上面配置的数据库来连接的id值       --><property name="dataSource" ref="dataSource"/><!--这里可以实现Mybatis配置文件里的所有东西,基本上就可以不要mybatis配置文件了,但是有的时候mybatis配置文件还是有一定的作用一般会把取别名和设置放在mybatis的配置文件中去做--><!--绑定Mybatis的配置文件--><property name="configLocation" value="classpath:mybatis-config.xml"/><!--也可以注册mapper映射器--><property name="mapperLocations" value="classpath:com/li/dao/UserMapper.xml"/></bean>

        配置文件之前相当于下面这一段

package com.li.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;public class MybatisUtils {//官网上有三段代码拿来用 工具类的作用就是得到SqlSessionprivate static final SqlSessionFactory sqlSessionFactory;static{try {//获取SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {throw new RuntimeException(e);}}//获取SqlSessionpublic static SqlSession getSqlSession(){return sqlSessionFactory.openSession();}
}

配置文件下面那两段相当于mybatis核心配置文件中的配置之类的(有一一对应的property 设置)

 得到sqlSession 在mybatis-spring中叫sqlSessionTemplat

  <!--得到sqlSession,在mybatis-spring中叫sqlSessionTemplat可以简答的理解她两就是一个意思--><!--这里需要给SqlSessionTemplate注入一个参数    --><bean id="sqlSessionT" class="org.mybatis.spring.SqlSessionTemplate"><!--这里只能用构造器注入,因为没有set方法        --><constructor-arg index="0" ref="sqlSessionFactory"/></bean>

 在mybatis中我们在配置文件中就可以写sql语句,但是这里链接Spring了之后配置是面向对象的,需要创建一个实现类来写sql语句

package com.li.dao;import com.li.pojo.User;
import org.mybatis.spring.SqlSessionTemplate;import java.util.List;public class UserMapperImpl implements UserMapper{//之前我们所有的操作都是用sqlSession来执行,现在我们用sqlSessionTemplat来执行的//使用spring需要注入,需要有set方法,spring万物皆注入private SqlSessionTemplate sqlSessionTemplate;public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {this.sqlSessionTemplate = sqlSessionTemplate;}@Overridepublic List<User> selectAll() {//这里的操作就是和拿到SqlSession之后拿mapper的方法是一样的UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);return  mapper.selectAll();}
}

 写完类之后就需要在配置文件中注入

 <!--注入写的拿到写sql语句的类--><bean id="userMapper" class="com.li.dao.UserMapperImpl"><!--得到sqlSessionTempla--><property name="sqlSessionTemplate" ref="sqlSessionTempla"/></bean>

配置完成之后我们来写测试类测试

package com.li.dao;import com.li.pojo.User;
import com.li.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Testgo {@Testpublic void test1(){//        SqlSession sqlSession = MybatisUtils.getSqlSession();
//
//        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//
//        for (User user : mapper.selectAll()) {
//            System.out.println(user);
//        }
//
//        sqlSession.close();ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");UserMapper mapper = context.getBean("userMapper", UserMapper.class);for (User user : mapper.selectAll()) {System.out.println(user);}}
}

完整的spring-dao.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:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd"><!--DataSource:使用Spring的数据源替换Mybatis的配置    还可以用c3p0  dbcp  druid--><!--这里相当于配置连接数据库--><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis1?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="root"/></bean><!--得到sqlSessionFactory    --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--这里 ref后面值就是我们上面配置的数据库来连接的id值       --><property name="dataSource" ref="dataSource"/><!--这里可以实现Mybatis配置文件里的所有东西,基本上就可以不要mybatis配置文件了,但是有的时候mybatis配置文件还是有一定的作用一般会把取别名和设置放在mybatis的配置文件中去做--><!--绑定Mybatis的配置文件--><property name="configLocation" value="classpath:mybatis-config.xml"/><!--也可以注册mapper映射器--><property name="mapperLocations" value="classpath:com/li/dao/UserMapper.xml"/></bean><!--得到sqlSession,在mybatis-spring中叫sqlSessionTemplat可以简答的理解她两就是一个意思--><!--这里需要给SqlSessionTemplate注入一个参数    --><bean id="sqlSessionT" class="org.mybatis.spring.SqlSessionTemplate"><!--这里只能用构造器注入,因为没有set方法        --><constructor-arg index="0" ref="sqlSessionFactory"/></bean><!--注入写的拿到写sql语句的类--><bean id="userMapper" class="com.li.dao.UserMapperImpl"><!--得到sqlSessionTemplate--><property name="sqlSessionTemplate" ref="sqlSessionT"/></bean></beans>

需要注意的是UserMapper的配置文件不能把里面的sql语句部分删除,要不然会报

Invalid bound statement (not found)  的错

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--上面是头文件不管-->
<!--namespace等于绑定一个对应的Mapper接口 我这里是UserMapper接口-->
<mapper namespace="com.li.dao.UserMapper">
<!--    这里没有写sql语句--><select id="selectAll" resultType="user">select *from mybatis1.user</select>
</mapper>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/297179.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MFC通用静态库制作与使用

开发环境VS2013 1、新建工程&#xff0c;选择Win32 Project&#xff0c;命名&#xff0c;选择路径等 2、选择Static library &#xff0c;勾选MFC 3、点击完成。在工程中添加相应的头文件、源文件等通用功能函数或者类。 4、在其他工程引入使用。在使用的工程项目设置中Linker…

openstack云计算(二)——使用Packstack安装器安装一体化OpenStack云平台

初步掌握OpenStack快捷安装的方法。掌握OpenStack图形界面的基本操作。 一【准备阶段】 &#xff08;1&#xff09;准备一台能够安装OpenStack的实验用计算机&#xff0c;建议使用VMware虚拟机。 &#xff08;2&#xff09;该计算机应安装CentOS 7&#xff0c;建议采用CentO…

网络与并发编程(二)

线程_信号量 互斥锁使用后&#xff0c;一个资源同时只有一个线程访问。如果某个资源&#xff0c;我们同时想让N个(指定数值)线程访问&#xff1f;这时候&#xff0c;可以使用信号量。 信号量控制同时访问资源的数量。信号量和锁相似&#xff0c;锁同一时间只允许一个对象(进程…

深入理解npm常用命令

npm&#xff08;Node Package Manager&#xff09;是 Node.js 的包管理工具&#xff0c;用于管理 Node.js 应用程序的依赖包。除了安装、更新和卸载依赖包外&#xff0c;npm 还提供了许多其他功能&#xff0c;如初始化项目、运行脚本、查看依赖树等。本文将详细介绍一些常用的 …

使用Node.js常用命令提高开发效率

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;广泛用于构建服务器端应用程序和命令行工具。Node.js提供了丰富的命令和工具&#xff0c;可以帮助开发者更高效地开发应用程序。在日常开发中&#xff0c;除了Node.js本身的核心功能外&#xff0c;npm&#x…

Python搭建编程环境-安装Python3解释器

✅作者简介&#xff1a;CSDN内容合伙人、新星计划第三季Python赛道Top1&#x1f3c5; &#x1f525;本文已收录于Python系列专栏&#xff1a;零基础学Python &#x1f4ac;订阅专栏后可私信博主进入Python学习交流群&#xff0c;进群可领取Python视频教程以及Python相关电子书…

玫瑰图和雷达图(自备)

目录 玫瑰图 数据格式 绘图基础 绘图升级&#xff08;文本调整&#xff09; 玫瑰图 下载数据data/2020/2020-11-24 mirrors_rfordatascience/tidytuesday - 码云 - 开源中国 (gitee.com) R语言绘图—南丁格尔玫瑰图 - 知乎 (zhihu.com) 数据格式 rm(list ls()) libr…

[实验报告]--基于端口安全

[实验报告] 目录 [实验报告] 一、项目背景 二、实验环境 三、项目规划设计 四、项目实施 五、验证项目成果 基于端口安全的 Jan16 公司网络组建 一、项目背景 Jan16 公司开发部为重要部门&#xff0c;所有员工使用指定的计算机工作&#xff0c;为防止员工或访客使 用个…

前端工程师————CSS学习

选择器分类 选择器分为基础选择器和复合选择器 基础选择器包括&#xff1a;标签选择器&#xff0c;类选择器&#xff0c;id选择器&#xff0c;通配符选择器标签选择器 类选择器 语法&#xff1a;.类名{属性1&#xff1a; 属性值&#xff1b;} 类名可以随便起 多类名使用方式&am…

2013年认证杯SPSSPRO杯数学建模A题(第二阶段)护岸框架全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 A题 护岸框架 原题再现&#xff1a; 在江河中&#xff0c;堤岸、江心洲的迎水区域被水流长期冲刷侵蚀。在河道整治工程中&#xff0c;需要在受侵蚀严重的部位设置一些人工设施&#xff0c;以减弱水流的冲刷&#xff0c;促进该处泥沙的淤积&…

openstack云计算(一)————openstack安装教程,创建空白虚拟机,虚拟机的环境准备

1、创建空白虚拟机 需要注意的步骤会截图一下&#xff0c;其它的基本都是下一步&#xff0c;默认的即可 ----------------------------------------------------------- 2、在所建的空白虚拟机上安装CentOS 7操作系统 &#xff08;1&#xff09;、在安装CentOS 7的启动界面中…

【generate】如何维护一套icon组件库,直接输出svg为react component

https://github.com/ant-design/ant-design-web3/pull/761/files 实现了icon-preview(通过jsdoc, 鼠标放在组件上可以看到icon的样式)&#xff0c;因为打包方式、产物以及命名上有一些不同&#xff0c;可能需要稍加改造。 这个同步脚本应该后续也用得上&#xff0c;略加改造同步…

如何处理Jenkins打包npm install没有拉取到最新依赖的问题

问题背景&#xff1a; 我们项目中有私有依赖包 frame&#xff0c;是私有服务器上通过 npm 去管理。frame包 publish 之后&#xff0c;通过Jenkins打包时&#xff0c;npm install 一直没有拉取最新的代码。 思考&#xff1a;通过在本地直接替换 node_modules 里的 frame 包&…

管道的用法

一、fork 的用法 fork 返回值 c 在C中&#xff0c;fork 是一个来自 Unix/Linux 系统的系统调用&#xff0c;用于创建一个与现有进程几乎完全相同的新进程。fork 的主要特点是它会返回两次&#xff0c;一次返回在父进程中&#xff0c;一次返回在子进程中。在父进程中&#xff…

Python快速入门系列-10(Python进阶与扩展)

第十章:Python进阶与扩展 10.1 Python与其他语言的整合10.1.1 使用Python的C API示例:使用C API创建一个简单的Python扩展10.1.2 使用Cython加速Python代码示例:使用Cython编写一个快速的矩阵乘法函数10.1.3 使用SWIG创建接口示例:使用SWIG为C++类生成Python接口10.2 Pytho…

网络安全 | 什么是云安全?

关注WX&#xff1a;CodingTechWork 云安全-介绍 云安全是为了解决企业安全所面临的外部和内部威胁&#xff0c;它是一组程序和技术的集合。企业在实施其数字化转型策略&#xff0c;并将各种云端工具和服务纳入企业基础架构中时&#xff0c;需要云安全保障业务顺利进行。 云计…

957: 逆置单链表

学习版 【C语言】 #include<iostream> using namespace std; typedef struct LNode {char data;struct LNode* next;LNode(char x) :data(x), next(nullptr) {} }LNode; void creatlist(LNode *&L) {int n;char e;cin >> n;LNode* p1, * p2;p1 L;for (int i…

Android 高德地图

1.获取Key 进入高德开放平台控制台&#xff0c;创建一个新应用。在创建的应用上点击"添加key"按钮&#xff0c;在弹出的对话框中&#xff0c;依次输入key名称&#xff0c;选择服务平台为“Android平台”&#xff0c;输入发布版安全码 SHA1、以及 Package。 获取 S…

Elasticsearch 压测实践总结

背景 搜索、ES运维场景离不开压力测试。 1.宿主机层面变更&#xff1a;参数调优 & 配置调整 & 硬件升级2.集群层面变更&#xff1a;参数调优3.索引层面变更&#xff1a;mapping调整 当然还有使用层面变更&#xff0c;使用API调优&#xff08;不属于该文章的讨论范围…

Python 之 Fastapi 框架学习

依赖安装 Fastapi 有版本要求&#xff0c;需要的 Python 版本至少是 Python 3.8&#xff08;不要犟&#xff0c;按照版本要求来&#xff0c;我最先也是在我 Python3.6 上装的&#xff0c;果不其然跑不起来&#xff09;&#xff0c;幸好我 Win7 老古董能支持的 Python 最高版本…