mybatis--框架

1. 回顾

1. maven 作用:管理依赖的jar包。 
2.   安装maven:  解压---->环境变量[MAVEN_HOME=解压目录, PATH=%MAVEN_HOME%\bin] 
2.   idea关联maven.
3.   maven设置本地仓库和阿里云镜像  conf/settings.xml
4.   maven创建java工程
5.   maven创建web工程--->默认缺少java目录和resources 并且把webapp/web-inf/web.xml文件替换。

2. mybatis–框架

2.1 什么是框架?

所谓框架就是别人封装好的一些代码。你只需要在代码的基础上添加你需要的内容。 使用框架可以提高开发效率。

2.2 什么是mybatis框架

mybatis就是orm持久化框架。o:Object 对象  r: relative关系  m: mapping 映射。 解决把数据库中的记录映射到java实体类对象上。 白话: 解决jdbc得。

2.3 为什么使用mybatis框架.

1.思考: jdbc有什么问题?
         (1)比如查询时需要一一把数据库中的列得值查出并复制给对象的属性。
         (2)增加修改时需要为每一个占位符赋值。
2.mybatis框架可以解决上面这些问题。

2.4 如何使用mybatis框架。

(1)创建一张表

create database mybatis;
use mybatis;
CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME
VARCHAR(20), age INT);
INSERT INTO users(NAME, age) VALUES('Tom', 12);
INSERT INTO users(NAME, age) VALUES('Jack', 11);

(2)创建maven得java工程。

(3)加入相关的依赖jar包

<dependencies>
    <!--mysql得驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.25</version>
    </dependency>
    <!--mybatis得依赖-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
</dependencies>

(4) 创建实体类----

package com.ykq.entity;

public class User {
    private Integer id;
    private String name;
    private Integer age;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

(5)创建mybatis得配置文件。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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!--数据源name对应的值是固定的。 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
</configuration>

(6)配置映射文件—实体类和表得映射

<?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: 命名空间 现在可以随便起名
              以后必须和dao得类名对应
-->
<mapper namespace="userDao">

    <!--sql语句
          select:表示查询标签
              id: 唯一标识
              resultType: 表示查询的结果以java中的哪种数据类型来封装
       #{id}: 占位符
     -->
    <select id="getById" resultType="com.ykq.entity.User">
        select * from users where id=#{id}
    </select>

</mapper>

(7) 把映射文件加入到配置文件中
在这里插入图片描述

(8)测试

在这里插入图片描述

2.5 通过mybatis完成crud

映射文件:

<?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: 命名空间 现在可以随便起名
              以后必须和dao得类名对应
-->
<mapper namespace="userDao">

    <!--sql语句
          select:表示查询标签
              id: 唯一标识
              resultType: 表示查询的结果以java中的哪种数据类型来封装
       #{id}: 占位符
     -->
    <select id="getById"  resultType="com.ykq.entity.User">
        select * from users where id=#{id}
    </select>

    <!--增加
          parameterType:参数的类型
              注意: #{name}要和实体类属性对应

          添加使用需要把生产的id值赋值给属性。
              1. useGeneratedKeys=true 使用生成得key
              2. keyProperty:把生产的key赋值给实体类中的哪个属性名
    -->
    <insert id="addUser" parameterType="com.ykq.entity.User" useGeneratedKeys="true" keyProperty="id">
        insert into users(NAME, age) values(#{name},#{age})
    </insert>

    <!--修改-->
   <update id="updateUser" parameterType="com.ykq.entity.User">
       update users set name=#{name},age=#{age} where id=#{id}
   </update>

    <!--删除-->
    <delete id="deleteUser" parameterType="int">
          delete from users where id=#{id}
    </delete>


    <select id="selectAll" resultType="com.ykq.entity.User">
         select * from users
    </select>
</mapper>

测试:

package com.ykq.test;

import com.ykq.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 java.io.Reader;
import java.util.List;

public class TestMybatis01 {
    public static void main(String[] args) throws Exception {
         //1.读取mybatis配置文件
        Reader reader = Resources.getResourceAsReader("mybatis-conf.xml");
        //2.SqlSessionFactory对象
        SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(reader);
        //3. 获取SqlSession对象--连接数据
        SqlSession session=sessionFactory.openSession();
        //4. 执行sql   String statement 执行的是哪个sql标签, Object parameter 传递的参数
//        User user=session.selectOne("userDao.getById",2);
//        System.out.println(user);

//        //添加
//        User user=new User();
//        user.setName("郑杰瀚");
//        user.setAge(17);
//        int row = session.insert("userDao.addUser", user);
//        System.out.println(user);

//        //修改
//        User user =new User(8,"李兵帅",18);
//        session.update("userDao.updateUser",user);
        //删除
//        int delete = session.delete("userDao.deleteUser", 1);
        //查询所有
        List<User> list = session.selectList("userDao.selectAll");
        System.out.println(list);
        //TODO 事物不了解 默认连接数据库的事物是开启。
        session.commit();//提交
    }
}

3. 事物

什么是事物?

有一些动作组成,这些动作要么都成功 或者都失败 【原子性】

mybatis默认事物自动提交是关闭的。

package com.ykq.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

//转账功能:  A(减钱)---B【加钱】转钱
public class TestJDBCTransaction {
    public static void main(String[] args) {
        Connection connection=null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?serverTimezone=Asia/Shanghai", "root", "root");
            connection.setAutoCommit(false); //关闭自动提交
            String sql = "update users set age=age-100 where name='Jack'";
            PreparedStatement ps = connection.prepareStatement(sql);
            int i = ps.executeUpdate();  //事物自动提交
            String sql2 = "update users set age=age+100 where name='褚松明'";
            ps = connection.prepareStatement(sql2);
            int i2 = ps.executeUpdate();
            connection.commit();//手动提交事物
        }catch (Exception e){
            try {
                connection.rollback(); //事物回滚
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }finally {
        }
    }
}

4. lombok插件

在这里插入图片描述

作用:省略实体类得get set 构造函数以及toString
(1)安装lombok插件====>settings---->plugins---->lombok
(2)引入lombok得jar包
   <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.18</version>
        </dependency>
(3)在实体类使用相关的注解
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    @Data //生产set和get方法 toString.
    @NoArgsConstructor
    @AllArgsConstructor
    public class User {
        private Integer id;
        private String name;
        private Integer age;
    }

5. 实际开发中mybatis得映射文件和DAO接口一起用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WZ33v6nZ-1646100660432)(asserts/image-20211105165704498.png)]

(1)创建相应的dao接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zI3IWPbM-1646100660433)(asserts/image-20211105170121267.png)]
(2)映射文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EW6X29b3-1646100660433)(asserts/image-20211105170242652.png)]

(3)测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eetup9bg-1646100660433)(asserts/image-20211105171211165.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WWHhGZCQ-1646100660434)(asserts/image-20211105171346537.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dPJL1PZh-1646100660434)(asserts/image-20211105171543168.png)]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值