mybatis整合(手动添加jar包方式)

news2025/1/23 3:51:06

操作步骤

创建数据库

建立user表

放入数据

1、创建javaweb工程并添加Jar包

用到的jar包

junit 用于测试

mybatis框架:mybatis-3.5.9.jar

mysql数据库:mysql-connector-java-8.0.28.jar 

2、添加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>
    <!-- 配置内容在这里 -->


</configuration>

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=root

 编写”mybatis-config.xml”的配置内容

<?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 resource="database.properties"></properties>
    <typeAliases>
        <package name="entity"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC&amp;useSSL=false"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/UserMapper.xml"></mapper>
    </mappers>
</configuration>

 ”mybatis-config.xml”的配置节点说明

1、configuration:

        配置文件的根元素节点

2、environments:

        表示配置MyBaits的多套运行环境,该元素节点下可以配置多个environment子元素节点

3、environment:

        配置Mybaits的一套运行环境,需指定运行环境ID、事务管理(transactionManager)和数据源(dataSource)配置等相关信息

4、mappers:

        其下可以配置多个mapper节点来具体指定SQL映射文件的路径,resource属性的值表述了类资源路径下的SQL映射文件的路径

3、创建实体类

package entity;

public class User {

    private String username;
    private String password;
    private Integer age;
    private String sex;
    private String birthDate;

    public User() {
    }

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

    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 getBirthDate() {
        return birthDate;
    }

    public void setBirthDate(String birthDate) {
        this.birthDate = birthDate;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", birthDate=" + birthDate +
                '}';
    }
}

注: 1、类的名称不一定和表名相同

2、属性名称和数据库字段名称相同,才能自动映射

3、属性类型需要和数据库字段类型对应

4、每一个属性都要生成get/set方法 

4、创建SQL映射文件

<?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="/">
        <!-- SQL映射写在这里 -->
</mapper>

 编辑”UserMapper.xml”SQL映射内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="/">
    <select id="findAll" resultType="user">
select * from user
    </select>

    <select id="findAll2" resultType="map">
select * from user
    </select>

    <select id="myCount" resultType="int" parameterType="map">
        select count(*) from smbms_bill join smbms_provider on smbms_bill.providerId=smbms_provider.id where smbms_provider.proName like concat('%',#{proName},'%') and isPayment=#{isPayment}
    </select>
</mapper>

<!--建立映射关系-->

配置节点说明 

select:表示查询语句

id属性:表示该SQL语句的唯一标识符

resultType属性:表示SQL语句返回值类型,此处通过SQL语句查询数据,将数据直接映射到User实体类上 

5、代码测试,输出结果

import entity.User;
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 org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class UserMapperTest {
    @Test
    public void Test01() throws IOException {
        System.out.println(" = ");
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory build = sqlSessionFactoryBuilder.build(inputStream);
        SqlSession sqlSession = build.openSession();
        List<User> findAll = sqlSession.selectList("findAll");
        for (User user: findAll) {
            System.out.println("user = " + user);
        }
        sqlSession.close();
    }

    @Test
    public void Test02() throws IOException {

        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory build = sqlSessionFactoryBuilder.build(inputStream);
        SqlSession sqlSession = build.openSession();
        List<Map<String,Object>> findAll = sqlSession.selectList("findAll2");
        for (Map<String, Object> stringObjectMap : findAll) {
            System.out.println("stringObjectMap = " + stringObjectMap);
        }
        sqlSession.close();
    }

  
}

 结果为list集合对象

结果为map集合对象 

6、扩展 

configuration 根节点

        properties    可以配置在Java 属性配置文件中

        settings    修改 MyBatis 在运行时的行为方式

        typeAliases   为 Java 类型命名一个别名(简称)

        typeHandlers   类型处理器

        objectFactory   对象工厂

        plugins   插件

        environments   环境

                environment   环境变量

                        transactionManager  事务管理器

                        dataSource   数据源

        mappers    映射器

注意顺序不然会爆红

typeAliases元素的作用是配置类型别名

二选一推荐第二个

这个可以指定名称

作用是简化代码

默认是类首字母小写的名称

通过package的name属性直接指定包名,Mybatis会自动扫描指定包下的JavaBean,并设置一个别名,默认名称为非限定类名

原本要这样写

 现在

属性文件: 文件后缀为.properties 这种文件以key=value格式存储内容 

指定类资源路径下的属性文件 

使用${}占位符和属性文件中的键名来实现动态配置

 mapper

namespace属性的作用: namespace和子元素的id联合保证全局唯一,区别不同的映射文件 绑定DAO接口,即面向接口编程

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

19.字符串——查找三个字符串中的最大字符串(打擂台)

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 四、举一反三总结 前言 本系列为字符串处理函数编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 查找三个字符串中的最大字符串 二、题目分析 打擂台 三、解题 程序运行代码 #include<…

linux进程优先级_nice

4.1.3.4 进程优先级&#xff1a;nice nice以更改过的优先序来执行程序&#xff0c;如果未指定程序&#xff0c;则会印出目前的排程优先序&#xff0c;内定的 adjustment 为 10&#xff0c;范围为 -20&#xff08;最高优先序&#xff09;到 19&#xff08;最低优先序&#xff0…

numpy实现神经网络

numpy实现神经网络 首先讲述的是神经网络的参数初始化与训练步骤 随机初始化 任何优化算法都需要一些初始的参数。到目前为止我们都是初始所有参数为0&#xff0c;这样的初始方法对于逻辑回归来说是可行的&#xff0c;但是对于神经网络来说是不可行的。如果我们令所有的初始…

编码相关的软技能,我看了这些书

大家好&#xff0c;我是老三&#xff0c;作为一个开发工程师&#xff0c;写代码是我们安身立命的根本&#xff0c;但是代码相关&#xff0c;代码之外&#xff0c;一些软技能也很重要&#xff0c;写代码很多时候决定能不能干活&#xff0c;软技能决定能不能干好活。 老三的编码…

外包干了2年,技术退步明显。。。

前言 简单的说下&#xff0c;我大学的一个同学&#xff0c;毕业后我自己去了自研的公司&#xff0c;他去了外包&#xff0c;快两年了我薪资、技术各个方面都有了很大的提升&#xff0c;他在外包干的这两年人都要废了&#xff0c;技术没一点提升&#xff0c;学不到任何东西&…

python初始化矩阵相关

做算法题经常需要初始化一个二维的dp数组 下面两种方法是最常用的 matrix [[0]*n]*n matrix [[0]*n for _ in range(n)]以前经常混用也没发现什么问题&#xff0c;直到昨天debug的时候发现第一种初始化之后对矩阵进行赋值时混乱的&#xff0c;比如matrix[0][1]2会导致所有行…

Python中的并发编程

目录 一、引言 二、Python中的线程 1、线程的概念 2、创建线程 3、线程同步和锁 4、线程池 三、Python中的进程 1、进程的概念 2、创建进程 四、Python中的异步IO 1、异步IO的概念 2、异步IO的实现 3、异步IO的并发执行 五、总结 一、引言 并发编程是一种计算机…

LLM来模拟世界大战,会发生什么?

深度学习自然语言处理 原创作者&#xff1a;Winnie 战争与和平一直是塑造人类历史的重要元素。最近的一项研究聚焦于用LLMs模拟国际冲突&#xff0c;特别是第一次世界大战、第二次世界大战以及中国古代的战国时期。通过这些历史事件的详细模拟&#xff0c;研究团队探索了国际关…

「Verilog学习笔记」自动贩售机2

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 自动贩售机中可能存在的几种金额&#xff1a;0&#xff0c;0.5&#xff0c;1&#xff0c;1.5&#xff0c;2&#xff0c;2.5&#xff0c;3。然后直接将其作为状态机的几种状…

HTML_web扩展标签

1.表格标签 2.增强表头表现 4.表格属性&#xff08;实际不常用&#xff09; 结构标签&#xff1a; 合并单元格&#xff1a; 更多请查看主页

爬虫-xpath篇

1.xpath的基础语法 表达式描述nodename选中该元素/从根节点选取、或者是元素和元素间的过渡//从匹配选择的当前节点选择文档中的节点&#xff0c;而不考虑它们的位置.选取当前节点…选取当前节点的父节点选取属性text()选取文本 举例&#xff1a; 路径表达式结果html选择html元…

Nacos源码解读04——服务发现

SpringBoot自动注入 项目启动的时候会通过自动注入的机制将 NacosDiscoveryClientConfiguration注入 当注入NacosDiscoveryClientConfiguration的时候会将DiscoveryClient一起注入Bean DiscoveryClient实现了SpringCloud的DiscoveryClient接口&#xff0c;重点是getInstances和…

ROS集成开发环境的搭建

目录 一、安装终端 二、安装VScode 1、安装 2、vscode 集成 ROS 插件 三、launch文件示例 实现 运行 launch 文件 一、安装终端 sudo apt install terminatorTerminator 常用快捷键 AltUp //移动到上面的终端 AltDown …

基于remix+metamask+ganache的智能合约部署调用

在我们部署合约时为了让它更接近真实区块链去中心化体验&#xff0c;我们需要调用小狐狸&#xff08;Metamask&#xff09;来进行真实交易&#xff0c;而metamask里没有内置虚拟测试币&#xff0c;我们需要进行调用Ganache来添加带有虚拟测试币的账号。以上就是三者的关系&…

量子光学的进步:光子学的“下一件小事”

量子光学是量子力学和光学交叉领域中发展迅速的一门学科&#xff0c;探索光的基本特性及其与物质在量子水平上的相互作用。通过利用光的独特特性&#xff0c;量子光学为通信、计算、密码学和传感等各个学科的变革性进步铺平了道路。 如今&#xff0c;量子光学领域的研究人员和工…

YITH Request a Quote Premium商城请求报价插件

点击访问原文 YITH Request a Quote Premium商城请求报价插件 - 易服客工作室 YITH Request a Quote Premium商城请求报价插件是一款非常强大的工具&#xff0c;专为希望为其尊贵客户提供定制定价选项的企业量身定制。这个特殊的插件使客户能够认真提交包含特定产品或服务的细…

Python---格式化输出与%百分号----涉及转义符 \ 反斜杠的使用

相关链接Python--格式化输出中的转义符号----\t 制表符&#xff08;空格的&#xff09;和\n&#xff08;换行的&#xff09;_唯元素的博客-CSDN博客 Python---字符串&#xff08;用单、双引号、 三单/双引号定义。反斜杠 \ 转义&#xff0c;单在双内/双在单内 &#xff09;-CS…

手写VUE后台管理系统7 - 整合Less样式

整合LESS 安装使用 Less&#xff08;Leaner Style Sheets&#xff09;&#xff0c;是一门向后兼容的 CSS 扩展语言。 Less 官网&#xff1a;https://less.bootcss.com/ 安装 yarn add less安装完成就可以直接使用了 使用 以文件形式定义全局样式 在 assets 目录下创建 less …

【Element-ui】InputNumber 计数器与Select 选择器

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、InputNumber 计数器1.1 基础用法&#xff1a;1.2 禁用状态1.3 步数1.4 严格步数1.5 精度1.6 尺寸1.7 按钮位置1.8 Events1.9 Methods 二、Select 选择器2.1…

超大规模集成电路设计----学习框架(一)

本文仅供学习&#xff0c;不作任何商业用途&#xff0c;严禁转载。绝大部分资料来自----数字集成电路——电路、系统与设计(第二版)及中国科学院段成华教授PPT 超大规模集成电路设计----学习框架&#xff08;一&#xff09; 这门课在学什么&#xff1f;这门课该怎么学&#xf…