首页 > 其他分享 >01-mybatis-快速入门-代理开发、配置文件

01-mybatis-快速入门-代理开发、配置文件

时间:2023-06-08 22:36:25浏览次数:49  
标签:xml Mapper 01 映射 配置文件 sql mybatis



文章目录

  • Mybatis
  • Mybatis入门案例
  • 1、创建User表,添加数据
  • 2、创建模块,搭建框架
  • 2.1 创建模块
  • 注意:完善项目目录
  • 2.2 导入坐标
  • 2.3 编写 MyBatis 核心配置文件
  • 2.4 编写sql映射文件
  • 2.5 编码
  • 3、解决SQL映射文件的警告提示
  • Mapper代理开发
  • 1、定义同名接口
  • 2、设置namespace 并修改核心配置mapper
  • 3、Mapper 接口中定义方法
  • 4、编码
  • MyBatis 核心配置文件
  • 1、配置多个environment
  • 2、mappers下package包扫描
  • 3、typeAliases取别名+package包扫描


Mybatis

官网:https://mybatis.org/mybatis-3/zh/index.html (支持中文)

01-mybatis-快速入门-代理开发、配置文件_mybatis


01-mybatis-快速入门-代理开发、配置文件_mysql_02


01-mybatis-快速入门-代理开发、配置文件_java_03

Mybatis入门案例

1、创建User表,添加数据

create database mybatis;
use mybatis;

drop table if exists tb_user;

create table tb_user(
	id int primary key auto_increment,
	username varchar(20),
	password varchar(20),
	gender char(1),
	addr varchar(30)
);

INSERT INTO tb_user VALUES (1, 'zhangsan', '123', '男', '北京');
INSERT INTO tb_user VALUES (2, '李四', '234', '女', '天津');
INSERT INTO tb_user VALUES (3, '王五', '11', '男', '西安');

2、创建模块,搭建框架

2.1 创建模块

01-mybatis-快速入门-代理开发、配置文件_xml_04


我的jdk比较高,是17,添加一下编译版本的配置

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
  </properties>

01-mybatis-快速入门-代理开发、配置文件_mysql_05

注意:完善项目目录

(不要纠结创建项目选择哪个骨架,不管哪个骨架,自己会创建各种缺失的目录才是王道)

缺少resources目录,右键main和test->new->Directory->双击唯一提示的那个

01-mybatis-快速入门-代理开发、配置文件_java_06


01-mybatis-快速入门-代理开发、配置文件_sql_07


最后项目结构如下即可

01-mybatis-快速入门-代理开发、配置文件_sql_08

最最后的项目结构先贴出来下:

01-mybatis-快速入门-代理开发、配置文件_xml_09

2.2 导入坐标

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13</version>
      <scope>test</scope>
    </dependency>

    <!-- mybatis 依赖 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.5</version>
    </dependency>

    <!--mysql 驱动-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.32</version>
    </dependency>

    <!-- 添加slf4j日志api -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.20</version>
    </dependency>
    <!-- 添加logback-classic依赖 -->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
    </dependency>
    <!-- 添加logback-core依赖 -->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
      <version>1.2.3</version>
    </dependency>
		
	<!-- alt+enter 自动导入的 你敢信 新版IDEA太强了 -->
	<dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.24</version>
      <scope>compile</scope>
    </dependency>

第一次导入,需要时间下载默认jar包,不要着急,等一会儿。(必要时也可以手动刷新)

01-mybatis-快速入门-代理开发、配置文件_xml_10

将logback.xml复制到src/main/resources目录
作用: 看彩色日志信息的
logback.xml内容如下

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--
        CONSOLE :表示当前的日志信息是可以输出到控制台的。
    -->
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%level] %blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern>
        </encoder>
    </appender>

    <logger name="cn.whu" level="DEBUG" additivity="false">
        <appender-ref ref="Console"/>
    </logger>


    <!--

      level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
     , 默认debug
      <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
      -->
    <root level="DEBUG">
        <appender-ref ref="Console"/>
    </root>
</configuration>

01-mybatis-快速入门-代理开发、配置文件_java_11

2.3 编写 MyBatis 核心配置文件

核心配置文件作用: 替换连接信息 解决硬编码问题

右键main/resources-》new->File-》名称为:mybatis-config.xml
[官网去复制内容,再修改]

mybatis-config.xml 内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--数据库连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载sql映射文件--> <!--同在resources根目录下,导入就很方便-->
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

2.4 编写sql映射文件

命名规则:哪张表的就: 表名Mapper.xml 右键main/resources-》new->File-》名称为:mybatis-config.xml
[官网去复制内容,再修改]

UserMapper.xml 内容如下:

<?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">

<!--
    namespace: 名称空间 (后面细讲)
    id: 保证唯一不重复即可
-->
<mapper namespace="test">
    <select id="selectAll" resultType="cn.whu.pojo.User">
        select * from tb_user
    </select>
</mapper>

再去核心配置文件里加入对此映射文件的配置

<mappers>
    <!--加载sql映射文件--> <!--同在resource根目录下,导入就很方便-->
    <mapper resource="UserMapper.xml"/>
</mappers>

2.5 编码

  • 1. 定义POJO类

创建类: cn.whu.pojo.User

User.java

// alt + 鼠标左键 整列编辑
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
    private Integer id;
    private String username;
    private String password;
    private String gender;
    private String addr;
}

之前忘记写lombok的依赖(坐标)了,我按alt+enter 竟然能自动导入,帮你在pom.xml里自动加上 dependency

01-mybatis-快速入门-代理开发、配置文件_mybatis_12


01-mybatis-快速入门-代理开发、配置文件_mybatis_13

  1. mybatis核心测试类

创建类: cn.whu.demo.MybatisDemo

加载核心配置文件,获取 SqlSessionFactory 对象
获取 SqlSession 对象,执行 SQL 语句
释放资源

MybatisDemo.java

public static void main(String[] args) throws IOException {
        //1. 加载mybatis的核心配置文件,获取 SqlSessionFactory
        String resource = "mybatis-config.xml";//就在resources根目录下 写个名称就行了 maven结构多好呀
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2. 获取SqlSession对象,用它来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3. 执行sql
        List<User> users = sqlSession.selectList("test.selectAll");//参数: "命名空间.id"
        //直接返回的就是 List<User>  也就是自动封装了结果集  也太爽了吧

        System.out.println(users);

        //4. 释放资源
        sqlSession.close();
    }

01-mybatis-快速入门-代理开发、配置文件_mybatis_14

3、解决SQL映射文件的警告提示

产生原因:Idea和数据库没有建立连接,不识别表信息
解决方式:在Idea中配置MySQL数据库连接
解决后好处: IDEA的xml里写sql语句有提示了
(第一次连接可能提示你下载一些文件,下载就行了~)

01-mybatis-快速入门-代理开发、配置文件_xml_15


01-mybatis-快速入门-代理开发、配置文件_mybatis_16


IDEA有强大的写sql的能力,写sql语句甚至比navicat还要方便新建查询窗口->强大的代码提示写代码->选中按左上角执行

01-mybatis-快速入门-代理开发、配置文件_mysql_17


代码提示太强大了:

01-mybatis-快速入门-代理开发、配置文件_xml_18

选中后:ctrl+enter 也可以执行

01-mybatis-快速入门-代理开发、配置文件_xml_19

想要mapper.xml里有sql提示,还得配置sql方言

01-mybatis-快速入门-代理开发、配置文件_sql_20

若还是不行,则alt+enter大法-》下拉找到SQL即可

01-mybatis-快速入门-代理开发、配置文件_xml_21


01-mybatis-快速入门-代理开发、配置文件_sql_22

Mapper代理开发

使用 Mapper 代理方式完成入门案例

1、定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

2、设置SQL映射文件的namespace属性为Mapper接口全限定名

3、在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

4、编码

1)通过 SqlSession 的 getMapper方法获取 Mapper接口的代理对象 2)调用对应方法完成sql的执行

1、定义同名接口

定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

同一目录,并不是编译时在同一目录,否则就破坏了maven代码和资源文件分开管理的规范。
同一目录:只需要在resources目录下建立和XXXMapper.java同样名称的包结构即可,也就是保持二者(除后缀名外)全路径名一样即可,这样编译后,他们其实会在同一目录下的。

注意:resources下只能new Directory,不能new package,因此也就不能用.了,得老老实实一层层新建,或者改用/ (易混淆的是显示上并没有不同,得到windows资源管理器下看他们是不是一样才行)

如下图所示:

01-mybatis-快速入门-代理开发、配置文件_mybatis_23


01-mybatis-快速入门-代理开发、配置文件_mysql_24


01-mybatis-快速入门-代理开发、配置文件_mysql_25


01-mybatis-快速入门-代理开发、配置文件_xml_26


右键clean再重新编译,去target目录下看,他们二者确实放在一起

01-mybatis-快速入门-代理开发、配置文件_mybatis_27

2、设置namespace 并修改核心配置mapper

设置SQL映射文件的namespace属性为Mapper接口全限定名

01-mybatis-快速入门-代理开发、配置文件_xml_28

<?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">

<!--
    namespace: 名称空间 要写成接口全路径名了
    id: 保证唯一不重复即可
-->
<mapper namespace="cn.whu.mapper.UserMapper">
    <select id="selectAll" resultType="cn.whu.pojo.User">
        select * from tb_user;
    </select>
</mapper>

UserMapper.xml位置变了,核心mybatis-config.xml中得重新配置了

01-mybatis-快速入门-代理开发、配置文件_java_29

<mappers>
        <!--加载sql映射文件-->
        <mapper resource="cn/whu/mapper/UserMapper.xml"/>
    </mappers>

01-mybatis-快速入门-代理开发、配置文件_mybatis_30


01-mybatis-快速入门-代理开发、配置文件_xml_31

<mappers>
        <!--加载sql映射文件-->
        <package name="cn.whu.mapper"/>
    </mappers>

3、Mapper 接口中定义方法

在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致 (查询多列得用List<Type>)

01-mybatis-快速入门-代理开发、配置文件_mysql_32


UserMapper.java

package cn.whu.mapper;

import cn.whu.pojo.User;
import java.util.List;

public interface UserMapper {
    //注意返回的是集合 因此不能简单写User,而应该写List<User>
    List<User> selectAll();
}

4、编码

1)通过 SqlSession 的 getMapper方法获取 Mapper接口的代理对象
2)调用对应方法完成sql的执行

public static void main(String[] args) throws IOException {
        //1. 加载mybatis的核心配置文件,获取 SqlSessionFactory
        String resource = "mybatis-config.xml";//就在resources根目录下 写个名称就行了 maven结构多好呀
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2. 获取SqlSession对象,用它来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3. 执行sql
        // 不用了 不好 List<User> users = sqlSession.selectList("test.selectAll");//参数: "命名空间.id"
        //3.1 获取UserMapper接口的代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.selectAll();//mybatis帮你实现了接口方法,sql语句有,返回值有,当然能实现啦

        System.out.println(users);

        //4. 释放资源
        sqlSession.close();
    }

01-mybatis-快速入门-代理开发、配置文件_mybatis_33

MyBatis 核心配置文件

mybatis-config.xml 核心配置文件里一些重要配置

1、配置多个environment

environments: 配置数据库连接环境信息。可以配置多个environment,通过default切换不同的environments

01-mybatis-快速入门-代理开发、配置文件_xml_34

2、mappers下package包扫描

01-mybatis-快速入门-代理开发、配置文件_mysql_35


直接就扫描到了包(cn.whu.mapper)下所有的XXXMapper.xml映射文件, 不用一个个配置了

<mappers>
     <!--加载sql映射文件-->
     <package name="cn.whu.mapper"/>
 </mappers>

3、typeAliases取别名+package包扫描

01-mybatis-快速入门-代理开发、配置文件_mybatis_36

<typeAliases>
    <package name="cn.whu.pojo"/>
</typeAliases>

相当于给cn.whu.pojo包下所有的类取了别名,就是类名,其不区分大小写
比如: cn.whu.pojo.User 就可以写User或者user或者USER或者USer…了

然后映射配置文件UserMapper.xml里可以简单配置了

01-mybatis-快速入门-代理开发、配置文件_java_37

<mapper namespace="cn.whu.mapper.UserMapper">
    <select id="selectAll" resultType="User"> /*resultType="cn.whu.pojo.User"*/
        select * from tb_user;
    </select>
</mapper>

01-mybatis-快速入门-代理开发、配置文件_java_38


其实所有的配置,官网都有很详细的讲解,结合课程所学的全局+官网文档的查询,可以学得很好了
https://mybatis.org/mybatis-3/zh/configuration.htmlhttps://mybatis.org/mybatis-3/zh/configuration.html#typeAliases



标签:xml,Mapper,01,映射,配置文件,sql,mybatis
From: https://blog.51cto.com/u_15798167/6443810

相关文章

  • 02-MyBatis-CRUD-配置文件、参数封装、mybatisX插件、动态sql, 简单的用注解开发
    文章目录MybatisCRUD练习1,配置文件实现CRUD1.1环境准备Debug01:别名mybatisx报错1.2查询所有数据1.2.1编写接口方法1.2.2编写SQL语句1.2.3编写测试方法1.2.4起别名解决上述问题1.2.5使用resultMap解决上述问题1.2.6小结1.3查询详情1.3.1编写接口方法1.3.2编写SQL语句......
  • 2019精选书籍推荐
    距离2020年还剩2个月的时间,整理了今年读过的书籍,精选了18本我认为比较好的书,推荐给大家。年纪大了,只看书不做笔记似乎已经不行了,记忆力下降的很快,有时候一本书读完,居然没记住多少内容。所以接下来的精读的书籍我都要做读书笔记了。人与人的差别是思维方式的差别,而思维方式来源于......
  • QQ登录报错:redirect uri is illegal(100010)解决方案
    查看真实回调地址:通过腾讯开放平台:腾讯开放平台官网进入后,点击RUL编解码工具:在输入源串的表格里填入你登录QQ报错的网址(网址全部复制进去),点击URL解码:解码后,能查看到实际回调地址:实际回调地址就是redirect_uri=之后到第一个&符号或者问号截止的部分(也就是用矩形圈起来的地方),把这......
  • mybatis离谱BUG
    一、idea中resuorces和test文件不识别解决:手动设置标记 二、编码格式问题:控制台错误提示:MalformedByteSequenceException:1字节的UTF-8序列的字节1无效。解决方案,在pom文件中加入配置<properties><project.build.sourceEncoding>UTF-8</project.build.source......
  • 中国公有云厂商2018年收入利润综合排名
      他们说:看过排名更懂云了…… 做这个排名之前,首先需要说明一下这次估算和统计的公有云供应商的业务范围,包括了这些云供应商的公有云、CDN、IDC、私有云、混合云、与云相关的集成项目,共计六项主要的业务,只要存在这六项业务,那么阿明都力争统计在里面,对于那些不具备这六项业务的公......
  • 180116 EM算法资料整理(博客、论文、工具包、视频、书籍、代码,更新ing)
    BlogsHindon和Jordan理解的EM算法ComputationalStatisticsinPythonEM算法及其推广EM算法及其推广学习笔记从最大似然到EM算法浅解EM算法在缺失数据下的极大似然估计R代码Matlab极大似然估计缺失数据Cos424:InteractingwithDataProbabilityCourse关于EM算法的一些......
  • Mybatis的配置与简单使用
    Mybatis的开发步骤官网入门手册中说明如下:创建项目加入依赖执行SQLXMLXML配置文件中包含了对MyBatis系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)获得SqlSessionFactoryBuilder获得SqlS......
  • 各类配置文件(DNS, Firefox,Edge)
    DNS配置腾讯DNS:119.29.29.292402:4e00:: 2402:4e00:1::阿里云:223.5.5.5223.6.6.62400:3200::12400:3200:baba::1黑龙江联通:202.97.224.68202.97.224.69CiscoDNS208.67.222.222208.67.220.2202620:119:35::352620:119:53::53浏览器配置Firefoxabout:confi......
  • mybatis的缓存
    1. 什么是缓存  113缓存:cache1.1 缓存的作⽤:113通过减少IO的⽅式,来提⾼程序的执⾏效率。1.2 mybatis的缓存:113将select语句的查询结果放到缓存(内存)当中,下⼀次还是这条select语句的话,直接从缓存中取,不再查数据库。⼀⽅⾯是减少了IO。另⼀⽅⾯不再执⾏繁琐的查找算法。效率⼤⼤......
  • mybatis逆向工程基础版
    1. 基本介绍  120介绍所谓的逆向⼯程是:根据数据库表逆向⽣成Java的pojo类,SqlMapper.xml⽂件,以及Mapper接⼝类等。要完成这个⼯作,需要借助别⼈写好的逆向⼯程插件。思考:使⽤这个插件的话,需要给这个插件配置哪些信息?● pojo类名、包名以及⽣成位置。● SqlMapper.xml⽂件名以及......