Java学习-MyBatis学习(二)

代码下载

MyBatis核心配置文件
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.29.201:3306/mybatis
jdbc.username=root
jdbc.password=123456
<configuration>
    <!-- 
    	environments:配置多个连接数据库环境
    	default:默认使用的环境id
    	environment id:表示连接数据库的环境的唯一标识,不能重复
    	 -->
    	 <!-- 引入properties文件 -->
    <properties resources="jdbc.properties/>
    <!-- 设置类型别名-->
    <typeAliases>
        <!-- 
            type:设置需要设置别名的类型,
            alias:设置某个类型的别名,若此项不设置,则类型别名默认为类名,且不区分大小写
        -->
	<!--<typeAlias type="com.lotus.mybatis.pojo.User" alias="User"></typeAlias>-->
        <!--
        以包为单位将包下所有类型设置默认的类型别名,即类名,且不区分大小写 
        -->
        <package name="com.lotus.mybatis.pojo"/>
    </typeAliases>
    <environments default="development">   
        <environment id="development">
        <! -- 
         type:JDBC | MANAGED
         JDBC:表示当前环境中,执行SQL时,使用的是JDBC中原生的事务管理方式,事务提交和回滚需要手动处理
         MANAGED:表示被管理,例如Spring
        -->
            <transactionManager type="JDBC"/>
            <!-- 
            dataSource:配置数据源
            type:POOLED | UNPOOLED | JNDI 数据源类型
            POOLED:使用数据库连接池缓存数据库连接
            UNPOOLED:不使用数据库连接池
            JNDI:使用上下文数据源
            -->
            <dataSource type="POOLED">
            	<!-- 设置连接数据库驱动-->
                <property name="driver" value="${jdbc.driver}"/>
            	<!-- 设置连接数据库连接地址-->
                <property name="url" value="${jdbc.url}"/>
                <!-- 设置连接数据库用户名-->
                 <property name="username" value="${jdbc.username}"/>
                <!-- 设置连接数据库密码-->
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 引入映射文件 -->
    <mappers>
        <mapper resource="mappers/UserMapper.xml"/>
    </mappers>
</configuration>


<!-- mappers配置--->
<mappers>
<!--        <mapper resource="mappers/UserMapper.xml"/>-->
        <!--以包为单位引入映射文件
            1.mapper接口所在的包要和映射文件所在的包一致
            2.mapper接口要和映射文件的名字一致

        -->
        <package name="com.lotus.mybatis.mapper"/>
    </mappers>
设置配置文件模板
  • ①复制要创建模板的配置文件内容

  • 在这里插入图片描述

  • 在这里插入图片描述
MyBatis获取参数值
  • Mybatis获取参数值的两种方式:${} 和 #{}
  • ${}本质就是字符串拼接,#{}本质是占位符赋值
  • ${}使用字符串拼接的方式拼接SQL,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;但#{}使用占位符赋值的方式拼接SQL,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号
//pojo
public class User {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private String sex;
    private String email;

    public User() {
    }

    public User(Integer id, String username, String password, Integer age, String sex, String email) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.age = age;
        this.sex = sex;
        this.email = email;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "com.lotus.mybatis.pojo.User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

//SqlSession获取封装功能类
public class SqlSessionUtils {
    public static SqlSession getSqlSession() {
        SqlSession sqlSession = null;
        try {
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
            sqlSession = sqlSessionFactory.openSession(true);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sqlSession;
    }
}
单个字面量类型的参数
  • 若mapper接口中的方法参数为单个字面量类型,可以使用KaTeX parse error: Expected 'EOF', got '#' at position 4: {}或#̲{}以任意名称获取参数的值,*…{}手动加单引号**
public interface ParameterMapper {
    /**
     * 根据用户名查询用户信息
     */
    User getUserByUsername(String username);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lotus.mybatis.mapper.ParameterMapper">
    <!-- getUserByUsername -->
    <select id="getUserByUsername" resultType="com.lotus.mybatis.pojo.User">
        <!-- select * from t_user where username=#{username} -->
        select * from t_user where username='${username}'
    </select>
</mapper>
@Test
    public void testGetUserByUsername() throws IOException {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
        User user = mapper.getUserByUsername("dizzy");
        System.out.println(user);
    }
多个字面量类型的参数
  • 若mapper接口中的方法参数为多个时,MyBatis自动将这些参数放在一个Map集合中,以arg0,arg1…为键,以参数为值,以param1,param2…为键,以参数为值,只需要通过KaTeX parse error: Expected 'EOF', got '#' at position 4: {}或#̲{}访问map集合的键就可以获…{}需手动加单引号**
public interface ParameterMapper {
    /**
     * 验证登录
     */
    User checkLogin(String username,String password);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lotus.mybatis.mapper.ParameterMapper">
    <!-- checkLogin -->
    <select id="checkLogin" resultType="User">
        <!-- arg0 | param1表示username,arg1|param2表示password -->
        <!--select * from t_user where username=#{arg0} and password=#{param2}-->
        select * from t_user where username='${arg0}' and password='${param2}'
    </select>
</mapper>
 @Test
    public void testCheckLogin() throws IOException {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
        User user = mapper.checkLogin("dizzy","12345");
        System.out.println(user);
    }
map集合类型的参数
  • 若mapper接口中的方法参数为多个时,可手动创建map集合,将这些数据放在map中,只需通过KaTeX parse error: Expected 'EOF', got '#' at position 4: {}或#̲{}访问map集合的键就可以获…{}需手动加单引号**
/**
     * 验证登录(参数为map)
     */
    User checkLoginByMap(Map<String,Object> map);
<!-- User checkLoginByMap(Map<String,Object> map);-->
    <select id="checkLoginByMap" resultType="User">
        select * from t_user where username='${username}' and password='${password}'
    </select>
@Test
    public void testCheckLoginByMap() throws IOException {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
        Map<String,Object> map = new HashMap<>();
        map.put("arg0","dizzy");
        map.put("arg1","12345");
        map.put("param1","dizzy");
        map.put("param2","12345");
        map.put("username","dizzy");
        map.put("password","12345");
        User user = mapper.checkLoginByMap(map);
        System.out.println(user);
    }
实体类类型的参数(重点)
  • 若mapper接口中的方法参数为实体类时,只需通过KaTeX parse error: Expected 'EOF', got '#' at position 4: {}或#̲{}访问实体类属性值的方式就可…{}需手动加单引号**
/**
     * 添加用户信息
     */
    int insertUser(User user);
<!--int insertUser(User user);-->
    <insert id="insertUser">
        insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
    </insert>
 @Test
    public void testInsertUser() throws IOException {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
        int res = mapper.insertUser(new User(null,"water","123456",11,"男","water@qq.com"));
        System.out.println(res);
    }
使用注解@param命名参数(重点)
  • 若mapper接口中的方法参数使用@param修饰,MyBatis自动将这些参数放在一个Map集合中,以@param注解的值为键,以参数为值,以param1,param2…为键,以参数为值,只需要通过KaTeX parse error: Expected 'EOF', got '#' at position 4: {}或#̲{}访问map集合的键就可以获…{}需手动加单引号**
 /**
     * 验证登录(使用@param)
     */
    User checkLoginByParam(@Param("username") String username, @Param("password") String password);
<!--User checkLoginByParam(@Param("username") String username, @Param("password") String password);-->
    <select id="checkLoginByParam" resultType="User">
        select * from t_user where username=#{username} and password=#{password}
    </select>
 @Test
    public void testCheckLoginByParam() throws IOException {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
        User user = mapper.checkLoginByParam("water","123456");
        System.out.println(user);
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是熔断降级?说说几种解决方案

引言&#xff1a;本文将深入探讨熔断降级的概念及其在微服务架构中的应用。我们将详细介绍熔断降级的定义&#xff0c;解释其在分布式系统中的重要性&#xff0c;并探讨几种常见的解决方案。通过阅读本文&#xff0c;读者将能够全面了解熔断降级机制&#xff0c;并掌握如何在实…

感受风的速度~2024COSP上海国际户外展为您的骑行之旅锦上添花

夏天已经到来 你是在家里宅着 还是出去晒太阳呢 若是还没抉择好 不如来一场畅快淋漓的追风之旅 抬头可见蓝天白云 低头便是美丽风景 无论是在凉亭闲聊的人们 还是竞相绽放的花朵 每一个场景都令人难忘 骑累了 就到附近的座椅上小憩一番 不用刻意追求速度 尽享“慢…

鸿蒙轻内核A核源码分析系列四(3) 虚拟内存

4.2 函数LOS_RegionAlloc 函数LOS_RegionAlloc用于从地址空间中申请空闲的虚拟地址区间。参数较多&#xff0c;LosVmSpace *vmSpace指定虚拟地址空间&#xff0c;VADDR_T vaddr指定虚拟地址&#xff0c;当为空时&#xff0c;从映射区申请虚拟地址&#xff1b;当不为空时&#…

DevExpress 控件和库

UI控件和组件 DevExpress WinForms包括以下Windows窗体库和控件&#xff1a; Grids and Editors Data Grid Tree List Vertical Grid Property Grid Gantt Control Data Editors and Simple Controls Office-inspired Ribbon, Bars and Menu Rich Text Editor Scheduler S…

本地生活服务电商平台小程序源码系统 含完整的安装代码包+搭建教程

系统概述 本地生活服务电商平台小程序源码系统&#xff0c;是一款集成了商品展示、在线交易、服务预约、优惠券发放、会员管理、订单处理、即时通讯等多种功能于一体的综合性解决方案。它旨在为本地商家提供一个高效、便捷的线上经营平台&#xff0c;同时为消费者带来流畅的使…

LLM自动化对齐技术

近年来&#xff0c;大语言模型&#xff08;LLMs&#xff09;的快速发展&#xff0c;极大地重塑了人工智能的格局。一致性是塑造与人类意图和价值观相对应的LLMs行为的核心&#xff0c;例如&#xff0c;教导LLMs遵循响应过程中“有帮助&#xff08;Helpful&#xff09;、无害(Ha…

autoware lidar-centerpoint 点云在rviz上叠加显示问题

在使用自采数据包放入autoware中的lidar_centerpoint上进行检测时发现&#xff0c;在rviz可视化上出现问题&#xff1a;多帧点云在一个位置上不断叠加&#xff0c;不能正常随时间显示。 如下图所示&#xff1a; 解决方法&#xff1a; 出现上述问题是因为autoware默认使用的是…

Golang——gRPC认证

一. OpenSSL 1.1 介绍 OpenSSL是一个开放源代码的软件库包&#xff0c;用于支持网络通讯过程中的加密。这个库提供的功能包含了SSL和TLS协议的实现&#xff0c;并可用于生成密钥、证书、进行密码运算等。 其组成主要包括一下三个组件&#xff1a; openssl&#xff1a;多用途的命…

AMEYA360| 罗姆开发出新型二合一 SiC封装模块“TRCDRIVE pack™”

全球知名半导体制造商ROHM(总部位于日本京都市)面向300kW以下的xEV(电动汽车)用牵引逆变器&#xff0c;开发出二合一SiC封装型模块“TRCDRIVE pack™”&#xff0c;共4款产品(750V 2个型号&#xff1a;BSTxxxD08P4A1x4&#xff0c;1,200V 2个型号&#xff1a;BSTxxxD12P4A1x1)。…

深入理解Python多进程

目录 一、引言 二、Python多进程基础 进程与线程的区别 Python多进程模块 三、Python多进程实现原理 进程创建 进程间通信 进程同步 四、Python多进程使用方法 创建进程 进程间通信 五、实战案例 六、总结 一、引言 在Python编程中&#xff0c;多进程是一种重…

PartnerShare VS Tolt:出海SaaS选择哪种推广分销系统合适?

SaaS产品的成功在很大程度上取决于其推广策略的有效性。PartnerShare联盟系统和Tolt都是市场上比较知名的推广分销解决方案&#xff0c;能够帮助企业扩大用户基础并提高品牌知名度。 但是两款工具在某些特定任务上肯定有自己的独特优势&#xff0c;“找到你的锤子&#xff0c;…

SpringBoot-集成TOTP

TOTP验证码提供了一种高效且安全的身份验证方法。它不仅减少了依赖短信或其他通信方式带来的成本和延时&#xff0c;还通过不断变换的密码增加了破解的难度。未来&#xff0c;随着技术的进步和对安全性要求的提高&#xff0c;TOTP及其衍生技术将继续发展并被更广泛地应用。TOTP…

QT安装及项目创建

一、QT安装 1、安装qt_creater 方法一&#xff1a; 镜像文件&#xff1a;在2024-6-12&#xff1a;版本已经更新到了6.7 下载地址&#xff1a;https://download.qt.io/archive/qt/ 方法二&#xff1a; 百度网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1D0EmH…

SpringSecurity入门(一)

1、引入依赖 spring-boot版本2.7.3&#xff0c;如未特殊说明版本默认使用此版本 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><g…

【Linux】基础IO [万字之作]

目录 一.重谈文件 二.重谈C文件操作 1.操作 1.文件的打开和关闭 2.文件的读写操作 ​编辑 1.fgetc函数 2.fputc函数 3.fputs函数 4.fgets函数 5.fprintf函数 6.fscanf函数 7.fread函数 8.fwrite函数 三.重谈当前路径 四.系统文件操作接口 1.Open函数 2.write函数 3…

hot100 -- 栈

目录 &#x1f6a9;有效的括号 &#x1f33c;最小栈 AC 栈 AC 链表 &#x1f33c;字符串解码 &#x1f43b;每日温度 &#x1f352;柱状图中的最大矩形 解释 AC 单调栈 &#x1f6a9;有效的括号 20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 1&#xf…

[初阶数据结构] 包装类 | 泛型

目录 一. 包装类 1.1 什么是包装类? 1.2 包装类的意义 1.3 基本数据类型与包装类 1.4 装箱 1.5 拆箱 1.6 小总结 二. 泛型 2.1 什么是泛型? 2.2 泛型的意义 2.3 泛型的语法 2.4 泛型的编译 2.4.1 下载插件 2.4.2 分析 2.5 上界 2.6 泛型方法 2.7 小总结 三. 总结 一.…

conda虚拟环境,安装pytorch cuda cudnn版本一致,最简单方式

1、pytorch版本安装&#xff08;卸载也会有问题&#xff09; &#xff08;1&#xff09;版本如何选择参考和卸载 https://zhuanlan.zhihu.com/p/401931724 &#xff08;2&#xff09;对应版本如何安装命令 https://pytorch.org/get-started/previous-versions/ 最简答安装参考…

递推算法及相关问题详解

目录 递推的概念 训练&#xff1a;斐波那契数列 解析 参考代码 训练&#xff1a;上台阶 参考代码 训练&#xff1a;信封 解析 参考代码 递推的概念 递推是一种处理问题的重要方法。 递推通过对问题的分析&#xff0c;找到问题相邻项之间的关系&#xff08;递推式&a…

实验滤膜等分切割器八等分90mm

名称:滤膜切分器 型号: RNKF-90 适用范围:切分φ90mm玻璃纤维滤膜、石英纤维滤膜 等分数:2等分、4等分、8等分 使用方法: 1、开盖:逆时针旋转防尘盖&#xff0c;与切分台分开后&#xff0c;轻放于台面。 2、放膜:持专用镊子,镊子的长尖在下,短尖在上,取待切分滤膜1片,采样…