框架——Mybatis 01

1.什么是框架

        在说mybatis之前先来说说什么是框架:所谓的框架的就是别人封装好的一些代码。你只需要在代码的基础上添加i需要的内容。使用框架可以提高开发效率。

2.什么是mybatis框架

        mybatis就是ORM持久化框架。o:object对象         r:relative关系        m:mapping 映射。解决把数据库中的记录映射到java实体类对象上。通俗来说就是解决jdbc的。

3.为什么使用mybatis框架

       1.思考:jdbc有什么问题?

                        (1)比如查询时需要把数据库中的列的值擦除并复制给对象的属性。

                        (2)增加修改时需要围殴每一个占位符赋值

       2.mybatis框架可以解决上面这些问题。

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)创建实体类

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)把映射文件加入到配置文件中

 (9)测试

 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>

测试:

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();//提交
    }
}

事务

1.什么时事物?

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

2.mybatis默认事物自动提交时关闭的

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 {
        }
    }
}

3.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;
    }

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

 (1)创建相应的dao接口

(2)映射文件

 

(3)测试

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值