本文是大二时期所写,在我的博客上发布,现在在语雀上再次整理一下,我的博客地址:mybatis实现增删改查

1.jdbc简单介绍:

  1. java数据库连接池(java Database Connectivity,简称JDBC)是java语言用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法

2.mybatis的概述:

mybatis是一个持久层框架,用java编写的。它封装jdbc操作的很多细节,使开发者只关注sql语气本身,而无需关注注册驱动,创建连接等繁杂过程,它使用了ORM思想实现了结果集的封装。

ORM:Object Relationl Mappging对象关系映射

简单的说:就是把数据库和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表。

mybatis的环境搭建

  1. 第一步:创建maven工程并导入坐标
  2. 第二步:创建实体类(User.java)和对应的(UserMapper.java)接口
  3. 第三步:创建Mybatis的主配置文件(SqlMapConifg.xml)
  4. 第四步:创建映射配置文件(UserMapper.xml)
  5. 第五步:创建测试类(TestMybatis.java)

环境搭建的注意事项

  1. 第一个:mybatis的映射配置文件位置必须和mapper接口的包结构相同
  2. 第二个:映射配置文件的mapper标签namespace属性的取值必须是mapper接口的权限定类名
  3. 第三个:映射配置文件的操作配置(select),id属性的取值必须是mapper接口的全限定类名。

3.mybatis的入门案例

第一步:读取配置文件

第二步:创建SqlSessionFactory工厂

第三步:创建SqlSession

第四步:创建Dao接口的代理对象

第五步:执行dao中的方法

第六步:释放资源

注意事项:

不要忘记在映射配置中告知mybatis要封装到哪个实体类中配置的方法;指定实体类的权限定类名。

代码实现

3.1创建user数据表

#创建数据库mybatis_db
CREATE DATABASE `mybatis_db`; 
USE `mybatis_db`; 
#创建user表
CREATE TABLE `user` ( 
`id` int(11) NOT NULL auto_increment, 
`username` varchar(32) NOT NULL COMMENT '用户名称', 
`birthday` datetime default NULL COMMENT '生日', 
`sex` char(1) default NULL COMMENT '性别', 
`address` varchar(256) default NULL COMMENT '地址',
PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#插入数据
insert into `user`(`id`,`username`,`birthday`,`sex`,`address`) 
values (1,'子 慕','2020-11-11 00:00:00','男','北京海淀'),(2,'应颠','2020-12-12
00:00:00','男','北 京海淀');

3.2导入MyBatis的坐标和其他相关坐标

https://mvnrepository.com/ 找对应坐标,加入自己需要的配置文件

我加入的是如下内容:

<dependencies>
        <!--mysql驱动坐标-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency> 
        <!--mybatis坐标-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!--单元测试坐标-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

注意:刚加入maven的配置坐标时,会发现里面名称什么是红色的,是因为我们项目中还没有加载这些配置文件,此时我们只要刷新右边的maven,就会自动加载这些配置,就不会红了。

3.3 编写User实体

package com.baizhi.bill.entity;

import java.util.Date;
//编写user实体
public class User {
    private int id;
    private String username;
    private String birthday;
    private char sex;
    private String address;
    private Date date;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex=" + sex +
                ", address='" + address + '\'' +
                '}';
    }
    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public void setBirthday(Date date) {
        this.date=date;
    }
}

3.4 编写UserMapper接口

package com.baizhi.bill.mapper;

import com.baizhi.bill.entity.User;

import java.util.List;
//用户的持久层接口
public interface UserMapper {
    //查询所有操作
    List<User> findAll();

    void save(User user);

    void update(User user);

    void delete(int i);
}

3.5编写UserMapper映射文件

<?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接口-->
<mapper namespace="com.baizhi.bill.mapper.UserMapper">
<!--查找-->
<!--id对应方法名字-->
    <select id="findAll" resultType="com.baizhi.bill.entity.User">
        select * from user
    </select>
<!--加入-->
<!--对象中的属性,可以直接取出来-->
    <insert id="save" parameterType="com.baizhi.bill.entity.User">
        insert into user(username,birthday,sex,address)
            values(#{username},#{birthday},#{sex},#{address})
    </insert>
<!--修改-->
    <update id="update" parameterType="com.baizhi.bill.entity.User">
        update user set username = #{username},birthday = #{birthday},
        sex = #{sex},address = #{address} where id = #{id}
    </update>
<!--删除-->
    <delete id="delete" parameterType="com.baizhi.bill.entity.User">
        delete from user where id = #{id}
    </delete>

3.6编写MyBatis核心文件

<?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="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/lmj?serverTimezone=Asia/Shanghai"/>
                <property name="username" value="root"></property>
                <property name="password" value="1234"></property>
            </dataSource>
        </environment>
    </environments>
<!--每一个Mapper.xml都需要在Mybatis配置文件中注册-->
    <mappers>
        <mapper resource="UserMapper.xml"></mapper>
    </mappers>
</configuration>

说明:

元素的定义,这里描述的是数据库。它里面的元素是配置事务管理器,这里采用的是Mybatis的JDBC管理器方式。然后采用元素配置数据库,其中属性type=“POOLED”代表采用Mybatis内部提供的连接池方式,最后定义一些关于JDBC的属性信息。

元素代表引用的那些映射器。

3.7编写测试类

import com.baizhi.bill.entity.User;
import com.baizhi.bill.mapper.UserMapper;
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 org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestMybatis {
    @Test
    public void test(){
        try {
            InputStream is = Resources.getResourceAsStream("mybatisConfig.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            SqlSession sqlSession = sqlSessionFactory.openSession();
            UserMapper um=sqlSession.getMapper(UserMapper.class);
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> all=mapper.findAll();
            for (User user:all){
                System.out.println(user);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3.7 知识小结

  1. 创建mybatis_db数据库和user表
  2. 创建项目,导入依赖 (pom中导入我们需要的maven坐标)
  3. 创建User实体类 (User.java)对应的(UserMapper.java)接口
  4. 编写映射文件(UserMapper.xml )
  5. 编写核心文件(mybatisConfig.xml)
  6. 编写测试类 (TestMybatis.java)

4.Mybatis增删改查

4.1新增

1)编写映射文件UserMapper.xml

<!--新增--> 
<insert id="save" parameterType="com.baizhi.bill.entity.User"> 
insert into user(username,birthday,sex,address) 
values(#{username},#{birthday},#{sex},#{address}) 
</insert>

2)编写测试类

import com.baizhi.bill.entity.User;
import com.baizhi.bill.mapper.UserMapper;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
public class Testinsert {
    @Test
    public  void test() throws IOException {
        InputStream is = Resources.getResourceAsStream("mybatisConfige.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        User user = new User();
        user.setUsername("jack");
        user.setBirthday(new Date());
        user.setSex('男');
        user.setAddress("上海");
        user.setBirthday("2020-03-24");
        UserMapper um = sqlSession.getMapper(UserMapper.class);
        um.save(user);
        sqlSession.commit();
        sqlSession.close();
    }
  }

3)新增注意事项

插入语句使用insert标签

在映射文件中使用parameterType属性指定要插入的数据类型

Sql语句中使用#{实体属性名}方式引用实体中的属性值

插入操作使用的API是sqlSession.insert(“命名空间.id”,实体对象);

插入操作涉及数据库数据变化,所以要使用sqlSession对象显示的提交事务,即sqlSession.commit()

(注意:增删改一定不要忘记提交事务)

4.2 修改

1)编写映射文件UserMapper.xml

<!--修改--> 
<update id="update" parameterType="com.baizhi.bill.entity.User"> 
update user set username = #{username},birthday = #{birthday}, 
sex = #{sex},address = #{address} where id = #{id} 
</update>

2)编写测试类

import com.baizhi.bill.entity.User;
import com.baizhi.bill.mapper.UserMapper;
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 org.junit.Test;

import java.io.InputStream;
import java.util.Date;

public class Testupdata {
    @Test
    public void testUpdate() throws Exception {
        // 加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatisConfige.xml");
        // 获取SqlSessionFactory工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        // 获取SqlSession会话对象 SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 执行sql
        User user = new User();
        user.setId(4);
        user.setUsername("lucy");
        user.setBirthday(new Date());
        user.setSex('女');
        user.setAddress("北京朝阳");
        UserMapper um = sqlSession.getMapper(UserMapper.class);
        um.update(user);
        // 增删改需要提交事务
        // DML语句,手动提交事务
        sqlSession.commit();
        // 释放资源
        sqlSession.close(); 
    }
}

3)修改注意事项

修改语句使用update标签
修改操作使用的API是sqlSession.update(“命名空间.id”,实体对象);

4.3 删除

1)编写映射文件UserMapper.xml

<!--删除--> 
<delete id="delete" parameterType="com.baizhi.bill.entity.User"> 
delete from user where id = #{id} 
</delete>

2)编写测试类

import com.baizhi.bill.mapper.UserMapper;
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 org.junit.Test;
import java.io.InputStream;
public class Testdelete {
    @Test
    public void testDelete() throws Exception {
        // 加载核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatisConfige.xml");
        // 获取SqlSessionFactory工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        // 获取SqlSession会话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 执行sql
        UserMapper um = sqlSession.getMapper(UserMapper.class);
        um.delete(1);
        // DML语句,手动提交事务
        sqlSession.commit();
        // 释放资源
        sqlSession.close();
    }
}

3)删除注意事项

删除语句使用delete标签

Sql语句中使用#{任意字符串}方式引用传递的单个参数

删除操作使用的API是sqlSession.delete(“命名空间.id”,实体对象);

4.4知识小结

image.png