IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring boot整合Mybatis -> 正文阅读

[Java知识库]Spring boot整合Mybatis

Spring boot整合Mybatis

前言

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

搭建项目

通过idea创建一个项目,项目结构如下
在这里插入图片描述

pom.xml中添加必须的几个依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

配置mybatis

路径resources/mybatis-config.xml
在配置文件中需要引入两个必须要的配置项,第一个为数据库的连接字符串,第二个为映射文件
映射文件的引入有两种方式

  • 第一种方式,直接定义到resource路径下的某一个文件
  • 第二种方式,以包为单位,将包下所有的映射文件引入核心配置文件
<?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>
    <environments default="text">
        <environment id="text">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://192.168.1.2:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8&amp;zeroDateTimeBehavior=convertToNull&amp;useSSL=true&amp;serverTimezone=GMT%2B8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件-->
    <mappers>
        <!-- 第一种方式,直接定义到resource路径下的某一个文件
        <mapper resource="com.zhou.springbootmybatis01.mapper/UserMapper.xml"/> -->
        <!--
        第二种方式,以包为单位,将包下所有的映射文件引入核心配置文件
        注意:
			1. 此方式必须保证mapper接口和mapper映射文件必须在相同的包下
			2. mapper接口要和mapper映射文件的名字一致
        -->
        <package name="com.zhou.springbootmybatis01.mapper"/>
    </mappers>
</configuration>

类型处理器(typeHandlers)

MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。下表描述了一些默认的类型处理器。
在这里插入图片描述

创建一个实体

路径com.zhou.springbootmybatis01.entity.UserEntitty.java
这个实体对应数据库表的字段和类型,与数据库字段类型的对应关系见上一段类型处理器(typeHandlers)


import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserEntity {

    private Integer id;
    private String name;
    private String password;
    private String age;
    private String email;
    private Date createTime;
    private Date updateTime;
    private Integer version;
    private Integer deleted;

}

创建一个mapper接口

路径com.zhou.springbootmybatis01.mapper.UserMapper.java
这个mapper接口不需要实现,配置好后直接与映射文件对应

package com.zhou.springbootmybatis01.mapper;

import com.zhou.springbootmybatis01.entity.UserEntity;

import java.util.List;

/**
 * @author DELL
 * @version 1.0
 * @Description
 * @date 2022/5/9 15:39
        */
public interface UserMapper {

    //增加一条数据
    int insertUser();
    //删除一条数据
    int deleteUser(int id);
    //修改一条数据
    int updateUser(int id);
    //查询一条数据
    UserEntity selectUserById(int id);
    //查询一个集合
    List selectUserListById();
}

编写映射文件

路径src/main/resources/com/zhou/springbootmybatis01/mapper/UserMapper.xml

  • MyBatis中可以面向接口操作数据,所以,不管是insert、delete、update、select后面的id必须=UserMapper接口中的对应接口名称,如果不进行对应,在调用接口的时候会报错
  • 下面第五行的namespace,必须是Mapper接口的对应路径
  • select的时候必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射关系
    • resultType:自动映射,用于属性名和表中字段名一致的情况
    • resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况
  • mybatis接收传值方式有两种: #{}和${}
    • #{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号。具体实现见下面的deleteUser
    • ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号。具体实现见下面的updateUser

<?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.zhou.springbootmybatis01.mapper.UserMapper">

    <insert id="insertUser">
		insert into user(name,age) values('张三','12')
	</insert>

	<!-- #{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号-->
	<delete id="deleteUser">
     delete from user where id = #{id}
	 </delete>
	<!-- ${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号,如下-->
	<update id="updateUser">
     update user set name = '李四' where id = '${id}'
 	</update>
	<!--createTime与数据库create_time不对应,所以会查不出来-->
	<select id="selectUserById" resultType="com.zhou.springbootmybatis01.entity.UserEntity">
	select * from user where id = #{id}
	</select>
	<!--createTime与数据库create_time不对应,所以会查不出来-->
	<select id="selectUserListById" resultType="com.zhou.springbootmybatis01.entity.UserEntity">
	select * from user
	</select>
</mapper>

测试

    @Test
    void contextLoads() throws IOException {
        //读取MyBatis的核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //获取sqlSession,此时通过SqlSession对象所操作的sql都必须手动提交或回滚事务
        //SqlSession sqlSession = sqlSessionFactory.openSession();
        //创建SqlSession对象,此时通过SqlSession对象所操作的sql都会自动提交
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //通过代理模式创建UserMapper接口的代理实现类对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //调用UserMapper接口中的方法,就可以根据UserMapper的全类名匹配元素文件,通过调用的方法名匹配映射文件中的SQL标签,并执行标签中的SQL语句
        //int result = userMapper.insertUser();
        //int result = userMapper.deleteUser(1);
        //int result = userMapper.updateUser(2);
        UserEntity userEntity = userMapper.selectUserById(2);
        List userList= userMapper.selectUserListById();
        //提交事务
        //sqlSession.commit();
        System.out.println("result:" + 1);
    }

自定义映射resultMap

  • id:表示自定义映射的唯一标识,不能重复
    • type:查询的数据要映射的实体类的类型
  • 子标签:
    • id:设置主键的映射关系
    • result:设置普通字段的映射关系
    • 子标签属性:
    • property:设置映射关系中实体类中的属性名
      • column:设置映射关系中表中的字段名
  • 若字段名和实体类中的属性名不一致,则可以通过resultMap设置自定义映射,即使字段名和属性名一致的属性也要映射,也就是全部属性都要列出来
    将下面这一段放到src/main/resources/com/zhou/springbootmybatis01/mapper/UserMapper.xml中
<!--
	1.id必须唯一
	2.result property="实体名" column="数据库名"
	-->
	<resultMap id="resultUser" type="com.zhou.springbootmybatis01.entity.UserEntity">
		<id property="id" column="id"></id>
		<result property="name" column="name"></result>
		<result property="createTime" column="create_time"></result>

	</resultMap>
	<!--将create_time转换成createTime,所以会查出来-->
	<select id="selectResultUser" resultMap="resultUser">
		select * from user 
	</select>

将下面一段插入com.zhou.springbootmybatis01.mapper.UserMapper.java

    //自定义查询一个集合
    List selectResultUser();

将下面这一段放到
@Test
void contextLoads() throws IOException {}
进行测试

List resultUser=userMapper.selectResultUser();

在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-11 16:17:11  更:2022-05-11 16:20:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:25:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码