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知识库 -> 项目1在线交流平台-1.SpringBoot整合SSM环境准备-4.MyBatis环境准备 -> 正文阅读

[Java知识库]项目1在线交流平台-1.SpringBoot整合SSM环境准备-4.MyBatis环境准备

参考牛客网高级项目教程

1.Mybatis核心组件

  • SqlSessionFactory用于创建SqlSession的工厂,
  • SqlSession:相当于JDBC的connection,用于向数据库执行SQL。
  • xml主配置文件:XML配置文件,可以对MyBatis的底层行为做出详细的配置。

前两组核心组件,SpringBoot已经封装好了,直接使用注解拿到mapper接口的代理对象,即可操作sql

xml主配置文件,可以在SpringBoot的主配置application.properties中配置相关信息

  • Mapper接口:就是DAO接口,在MyBatis中习惯性的称之为Mapper。
  • Mapper映射器:用于编写SQL,并将SQL和实体类映射的组件,采用XML、注解均可实现。
  • 示例
    - 使用MyBatis对用户表进行CRUD操作。

2. Mybaits对user表的操作示例

1)环境搭建,依赖包的导入

<!--		依赖数据库-->
		<!--	数据库连接驱动	-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.25</version>
		</dependency>
		<!--	与SpringBoot整合的mybatis	-->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.0.1</version>
		</dependency>

2)实体类和接口的创建

public class User {
    private int id;
    private String username;
    private String password;
    private String salt;
    private String email;
    private int type;
    private int status;
    private String activationCode;
    private String headerUrl;
    private Date createTime;
    // get,set...
}
  • 接口中定义查、增、改的方法
@Mapper // 与@Repository功能一样
public interface UserMapper {
    // 条件查询
    User selectById(int id);
    User selectByName(String name);
    User selectByEmail(String email);
    // 增和改都是返回一行
    int insertUser(User user);
    int updateStatus(int id, int status);
    int updateHeader(int id, String headerUrl);
    int updatePassword(int id, String password);
}

3)主配置文件的配置

# DataSourceProperties
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/community?characterEncoding=utf-8&useSSL=false&serverTimezone=Hongkong
spring.datasource.username=#
spring.datasource.password=#
# 连接池相关配置
# 连接池类型
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
# 连接池中允许的最大连接数
spring.datasource.hikari.maximum-pool-size=15
# 池中维护的最小空闲连接数
spring.datasource.hikari.minimum-idle=5
# 连接池等待时间
spring.datasource.hikari.idle-timeout=30000

# MybatisProperties
# mapper映射配置:映射文件的存放位置
mybatis.mapper-locations=classpath:mapper/*.xml
# 实体类的别名,默认是改包下的所有类名,不区分大小写
mybatis.type-aliases-package=com.nowcoder.community.entity
# 启动自动生成主键
mybatis.configuration.useGeneratedKeys=true
# setting相关配置,实体类的变量命名与数据库表中变量的命名相匹配,即下划线与驼峰标识相匹配
mybatis.configuration.mapUnderscoreToCamelCase=true

4)映射文件sql的编写

  • 注意:增加时候,要配置主键声明:keyProperty,mysql底层会自动生成id,mybatis会得到这
<?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.nowcoder.community.dao.UserMapper">
<!--    定义全局变量-->
    <sql id="insertFields">
        username, password, salt, email, type, status, activation_code, header_url, create_time
    </sql>
    <sql id="selectFields">
        id, username, password, salt, email, type, status, activation_code, header_url, create_time
    </sql>

<!--    查-->
    <select id="selectById" resultType="User">
        select <include refid="selectFields"></include>
        from user
        where id = #{id}
    </select>
    <select id="selectByName" resultType="User">
        select <include refid="selectFields"></include>
        from user
        where username = #{username}
    </select>
    <select id="selectByEmail" resultType="User">
        select <include refid="selectFields"></include>
        from user
        where email = #{email}
    </select>

<!--    增-->
    <insert id="insertUser" parameterType="User" keyProperty="id">
        insert into user(<include refid="insertFields"></include>)
        values (#{username}, #{password}, #{salt}, #{email}, #{type},
                #{status}, #{activationCode}, #{headerUrl}, #{createTime})
    </insert>

<!--    改-->
    <update id="updateStatus">
        update user set status = #{status} where id = #{id}
    </update>
    <update id="updateHeader">
        update user set header_url = #{headerUrl} where id = #{id}
    </update>
    <update id="updatePassword">
        update user set password = #{password} where id = #{id}
    </update>
</mapper>

5)SpringBoot整合junit测试

  • @RunWith(SpringRunner.class) Spring整合Junit的运行器,程序入口

  • 定位到主配置类,读取配置信息

    在这里插入图片描述
@RunWith(SpringRunner.class) // 运行器
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class) // 主配置类
public class MapperTest {
    @Autowired
    UserMapper userMapper;

    @Test
    public void testSelectUser() {
        User user = userMapper.selectById(101);
        System.out.println(user);
        user = userMapper.selectByEmail("nowcoder101@sina.com");
        System.out.println(user);
        user = userMapper.selectByName("liubei");
        System.out.println(user);
    }

    @Test
    public void testInsertUser() {
        User user = new User();
        user.setUsername("test");
        user.setPassword("123456");
        user.setSalt("abc");
        user.setEmail("test@qq.com");
        user.setHeaderUrl("http://www.nowcoder.com/101.png");
        user.setCreateTime(new Date());

        int rows = userMapper.insertUser(user);
        System.out.println(rows);
        System.out.println(user.getId());
    }

    @Test
    public void testUpdateUser() {
        int rows = userMapper.updateStatus(150, 1);
        System.out.println(rows);

        rows = userMapper.updateHeader(150, "http://www.nowcoder.com/102.png");
        System.out.println(rows);

        rows = userMapper.updatePassword(150, "hello");
        System.out.println(rows);
    }
}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:22:29  更:2022-03-04 15:24:34 
 
开发: 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/24 10:54:57-

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