关于mybatis及初级使用

1. 什么是mybatis

MyBatis 是一款优秀的==持久层框架==,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射实体类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 

框架: 别人写好的一个半成品工程。我们只需要安装指定的配置来使用这个半成品。

持久层框架: 就是与数据库交互的框架。---简化我们操作数据库表记录的一个框架。

ORM框架: Object Relative Mapping .

表----实体类

字段---属性

一条记录----对象

多条记录----对象集合


2. 为什么使用mybatis

原来的jdbc操作数据库代码中可以看出,我们操作数据库非常麻烦。需要手动设置占位符的值,而且需要手动封装处理结果集。 我们可以使用mybatis完成上面繁琐的操作。

Mybatis就是为了简化java操作数据库的代码。


3. 如何使用mybatis

3.1.创建maven的java工程并引入依赖

导入依赖

<dependencies>
        <!--mysql依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <!--范围:表示该jar的使用范围只能在test包下用-->
            <scope>test</scope>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.34</version>
        </dependency>
        <!--mybatis框架的依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>
    </dependencies>

没次导入pom依赖时都要记得刷新重新读取

新建后的结构如下

2.创建实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Role {
    private Integer id;
    private String rolename;
    private  String rolecode;
    private String description;

}

在这里使用到了lombok依赖

注解顺序的解释依次为

@Data,设置get,set方法
@AllArgsConstructor,@NoArgsConstructor,有参无参的构造方法
@ToString,重写ToString方法

大大简化了操作

3.2.1lombok简介

Project Lombok 是一个 Java 库,可自动插入您的编辑器和构建工具,为您的 Java 增添趣味。再也不用编写另一个 getter 或 equals 方法,只需一个注解,您的类就拥有了一个功能齐全的构建器、自动化您的日志记录变量等等。

3.2.2使用

一般搭配lombok插件使用

依赖

<!--lombok依赖[1]idea安装lombok插件 [2]引入依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>

插件

3.mybatis配置文件---不需要背,自己存下默认结构,再根据项目添加

文件名mybatis.xml,放在resouse下

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <!--name是固定的 value根据需要配置为自己的内容-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/day1211" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>

    </environments>
    <!--引入对应的映射文件注意:改为自己的映射文件-->
    <mappers>
<!--        <mapper class="com.zwt.dao.RoleDao"/>-->Dao所在的路径
  <!--       <mapper resource="mapper/RoleMapper.xml"/>-->Dao对应的Xml所在的路径
    </mappers>
</configuration>

RoleMapper.xml

<?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">
<!--namespace:命名空间。现在可以随便写。后期需要和接口所在的包对应-->
<mapper namespace="qy179">

    <!--select表示查询sql标签
           id:表示sql语句的唯一标识,通常使用mapper接口的全类名.方法名组成
           resultType:表示结果类型。 mysql执行完该sql后返回的数据类型,增删改默认返回类型为int

        #{id}:表示占位符。mybatis会自动给该占位符赋值
    -->
    <select id="getById" resultType="com.ykq.entity.Teacher">
        <!-- 填写sql语句-->
    </select>
</mapper>

测试findbyid

//        这行代码的主要目的是从类路径下读取名为 mybatis.xml 的配置文件,并将其内容以 Reader 流的形式获取到,以便后续交给 MyBatis 框架进行相关配置的解析操作。
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
//       此代码的核心作用是利用前面读取到的 mybatis.xml 文件内容(通过 reader 传递),构建出一个 SqlSessionFactory 对象,它是 MyBatis 框架中用于创建 SqlSession 的工厂类,后续可以基于它来开启数据库会话等操作。
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
//        基于前面创建好的 SqlSessionFactory 对象,开启一个数据库会话(SqlSession),这个会话对象相当于在应用程序和数据库之间建立的一个连接通道,通过它可以执行各种数据库操作,比如查询、插入、更新、删除等操作。
        SqlSession sqlSession = sqlSessionFactory.openSession();
//        这行代码的作用是从当前的 SqlSession 中获取一个实现了 RoleDao 接口的代理对象,这个代理对象是由 MyBatis 动态生成的,它能够将对 RoleDao 接口中定义的方法调用转换为实际对数据库的操作,也就是实现了数据库访问层的逻辑封装
        RoleDao roleDao = sqlSession.getMapper(RoleDao.class);
        Role role= roleDao.findById(7);
        System.out.println(role);

注意在修改数据库时需要使用sqlSession.commit();进行提交否则数据库无变化

执行成功

4.接下来就是使用mybaties完成crud操作

我的mapper中的增删改查

<mapper namespace="com.zwt.dao.RoleDao">
    <insert id="insert"   >
        insert into day1206.t_role (rolename, rolecode, description) VALUES (#{rolename},#{rolecode},#{description})
    </insert>


    <update id="update">
        update day1206.t_role set rolecode=#{rolecode},rolecode=#{rolecode},description=#{description}  where id=#{id}
    </update>
    <delete id="delete">
        delete from day1206.t_role where id=#{id}
    </delete>

    <select id="findById" resultType="Role">
        select * from day1206.t_role where id=#{id}
    </select>
    <select id="selectAll" resultType="com.zwt.entity.Role">
        select * from day1206.t_role
    </select>

</mapper>

接口dao

public interface RoleDao {

    public Role findById(int id);

    public int update(Role role);

    public  int delete(int id);
    public int insert(Role role);

    public List<Role> selectAll();


}

我的测试代

   @Test
    public void  findById() throws IOException {
//        这行代码的主要目的是从类路径下读取名为 mybatis.xml 的配置文件,并将其内容以 Reader 流的形式获取到,以便后续交给 MyBatis 框架进行相关配置的解析操作。
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
//       此代码的核心作用是利用前面读取到的 mybatis.xml 文件内容(通过 reader 传递),构建出一个 SqlSessionFactory 对象,它是 MyBatis 框架中用于创建 SqlSession 的工厂类,后续可以基于它来开启数据库会话等操作。
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
//        基于前面创建好的 SqlSessionFactory 对象,开启一个数据库会话(SqlSession),这个会话对象相当于在应用程序和数据库之间建立的一个连接通道,通过它可以执行各种数据库操作,比如查询、插入、更新、删除等操作。
        SqlSession sqlSession = sqlSessionFactory.openSession();
//        这行代码的作用是从当前的 SqlSession 中获取一个实现了 RoleDao 接口的代理对象,这个代理对象是由 MyBatis 动态生成的,它能够将对 RoleDao 接口中定义的方法调用转换为实际对数据库的操作,也就是实现了数据库访问层的逻辑封装
        RoleDao roleDao = sqlSession.getMapper(RoleDao.class);
        Role role= roleDao.findById(7);
        System.out.println(role);
    }

    @Test
    public void  update() throws IOException {
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        RoleDao roleDao = sqlSession.getMapper(RoleDao.class);
        Role role=new Role(7,"老师","teacher","老师");
        int update = roleDao.update(role);
        System.out.println(update);
        sqlSession.commit();
    }

    @Test
    public void  delete() throws IOException {
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        RoleDao roleDao = sqlSession.getMapper(RoleDao.class);
        int delete= roleDao.delete(5);
        System.out.println(delete);
        sqlSession.commit();
    }

    @Test
    public void  insert() throws IOException {
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        RoleDao roleDao = sqlSession.getMapper(RoleDao.class);
        int insert = roleDao.insert(new Role("学生", "student", "学生"));
        System.out.println(insert);
        sqlSession.commit();
    }

    @Test
    public void  selectAll() throws IOException {
        Reader reader = Resources.getResourceAsReader("mybatis.xml");
        SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        RoleDao roleDao = sqlSession.getMapper(RoleDao.class);
        List<Role> roles = roleDao.selectAll();
        for (Role role : roles) {
            System.out.println(role.getRolename());
        };
        sqlSession.commit();
    }

 常见错误

mybatis.xml路径找不到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值