浅谈MyBatis(一)

浅谈MyBatis(一)

MyBatis概述

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

关于jdbc

在学习MyBatis之前,我们用java代码通过JDBC来操作数据库,通过以下代码回顾一下JDBC操作

```java
 //利用jdbc,完成新增的功能
    private static void method2() throws Exception{
        //1,注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //2,获取数据库的连接
        //数据传输协议   数据库的ip 端口号 数据库名
        String url = "jdbc:mysql://localhost:3306/数据库名";
        Connection c = DriverManager.getConnection(url,"root","root");
        //3,获取传输器
        Statement s = c.createStatement();
        //4,利用传输器执行  增删改的SQL
        //executeUpdate()用来执行增删改的SQL,只返回影响行数
        int rows = s.executeUpdate(
                "INSERT INTO emp(ename,job) VALUES('rose','副总')");
        //5,释放资源
        //r.close();//结果集
        s.close();//传输器
        c.close();//连接
    }


通过代码我们可以发现,步骤还是比较繁琐的,除了上述代码,我们通常会再写一个JDBCUtils工具类,将获取链接以及关闭资源的操作封装起来.

jdbc的优缺点

jdbc的优点:就是快,直接访问数据库,对其进行操作.

缺点:除了快,都是缺点(手动滑稽),比如数据库的库名或者地址发生改变,我们不得不修改源代码.

那问题来了,有么有一种速度快,开发效率高,并且不修改源代码的方法吗?有!!!就是MyBatis

MyBatis说明

1.MyBatis封装了JDBC,在保证开发效率的同时,简化了代码量

2.持久层框架:三层框架分别是Controller控制层, Service业务层,Mapper/Dao持久层.其中持久层是用来保存数据,将数据"永久保存"的关键层,所以MyBatis还是很重要的~

3.高级映射:映射的意义就是两两相关,我们可以理解为,具体对象对应数据表,对象属性对应字段

4.简化开发步骤,通过对象操作数据库.

创建MyBatis项目

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在pom.xml中导入依赖

 <!--mybatis依赖包-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>

        <!--jdbc依赖包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--添加lombok依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

编辑pojo类

@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class User {
    private String name;
    private Integer id;
    private String gender;
}

关于Lombok的说明

Lombok是一个帮助我们自动生成get,set,toString,equals等方法的插件,大大减少了开发代码,提高了效率,引入该插件的方法

1.导入依赖,如果还是不能提供get,set等方法,在idea插件商城中下载一下.

lombok中的常用注解

@Data:提供get,set,toString,equals,hashcode,构造,等方法

@EqualsAndHashCode:此注解一般和Data同时使用,比如将子类中的相同属性抽取到父类中,刚好主键id也被提取,此时,多个子类在进行比较时,就会出现子类不相等,但是通过注解被判定相等,从而导致问题

@NoArgsConstructor:提供无参构造

@AllArgsConstructor:提供含参构造

所以在我们的pojo类中只写明属性即可.

项目编辑

编辑接口

@Mapper
public interface UserMapper {
    List<User> findUser();
}

在接口中提供相应的增删改查方法

注解说明:

@Mapper:将此接口交给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">

<!--1.namespace是mybaits映射文件的唯一标识,与接口对应-->
<mapper namespace="com.qty.mapper.UserMapper">
    <!--2.执行业务操作
        id: 与接口方法一一对应.
        resultType: 返回的POJO对象类型全路径
                    将结果集自动的封装为对象
     -->
    <select id="findUser" resultType="com.qty.pojo.User">
        select * from demo_user
    </select>
</mapper>

namespace:对应接口,值是接口的全路径

id:对应的是接口方法

resultType:对应pojo类全路径

同理增删改的操作是相同的,只需要修改sql语句即可,这样就算以后sql中的某个字段或者表有改动的,也不会在修改源代码,直接修改映射文件即可.

编辑连接数据库文件

#1.配置端口号  注意缩进!!!!!
server:
  port: 8090

#2.配置数据源
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    #yml文件 0不解析 如果字母以0开头则引号包裹
    #password: "0123456"
    password: root

#3.配置Mybatis
mybatis:
  #定义别名包
  type-aliases-package: com.qty.pojo
  #将所有的映射文件全部加载
  mapper-locations: classpath:/mapper/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

#4.打印Sql com.qty.mapper下的Sql日志
logging:
  level:
    com.qty.mapper: debug

此文件相当于固定格式

编辑测试类

@SpringBootTest
public class TestMyBatis {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void testFind(){
        System.out.println(userMapper.getClass());
        List<User> userList = userMapper.findUser();
        System.out.println(userList);
    }
}

注解说明:

@SpringBootTest:标识该类交给Spring管理,可以通过Spring注解管理对象

tFind(){
System.out.println(userMapper.getClass());
List userList = userMapper.findUser();
System.out.println(userList);
}
}


注解说明:

@SpringBootTest:标识该类交给Spring管理,可以通过Spring注解管理对象







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值