0
点赞
收藏
分享

微信扫一扫

01-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-快速入门-代理开发、配置文件_java


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


01-mybatis-快速入门-代理开发、配置文件_sql_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-快速入门-代理开发、配置文件_java_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-快速入门-代理开发、配置文件_sql_05

注意:完善项目目录

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

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

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


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


最后项目结构如下即可

01-mybatis-快速入门-代理开发、配置文件_mysql_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-快速入门-代理开发、配置文件_mysql_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-快速入门-代理开发、配置文件_xml_12


01-mybatis-快速入门-代理开发、配置文件_sql_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-快速入门-代理开发、配置文件_java_14

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

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

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


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


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

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


代码提示太强大了:

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

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

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

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

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

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

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


01-mybatis-快速入门-代理开发、配置文件_mysql_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-快速入门-代理开发、配置文件_java_23


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


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


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


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

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

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

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

01-mybatis-快速入门-代理开发、配置文件_java_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-快速入门-代理开发、配置文件_xml_29

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

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


01-mybatis-快速入门-代理开发、配置文件_mybatis_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-快速入门-代理开发、配置文件_java_33

MyBatis 核心配置文件

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

1、配置多个environment

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

01-mybatis-快速入门-代理开发、配置文件_mysql_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-快速入门-代理开发、配置文件_java_36

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

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

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

01-mybatis-快速入门-代理开发、配置文件_xml_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-快速入门-代理开发、配置文件_xml_38

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


举报

相关推荐

0 条评论