MyBatis增删改查(步骤详细,由浅入深,适合初学者,只看这一篇就够了)

Posted 野生java研究僧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis增删改查(步骤详细,由浅入深,适合初学者,只看这一篇就够了)相关的知识,希望对你有一定的参考价值。

MyBatis目录

java(后端框架)MyBatis的使用

mybatis的简介这里就不多说了,百度一大堆,我们只需要这是一个JDBC的升级版,让我们更好的操作数据库,减少不必要的代码,让我们专注于实现自己的业务逻辑.

web开发的三层架构 (mvc )

  1. 三层架构
    界面层: 和用户打交道的, 接收用户的请求参数, 显示处理结果的。(jsp ,html ,servlet)
    业务逻辑层: 接收了界面层传递的数据,计算逻辑,调用数据库,获取数据
    数据访问层: 就是访问数据库, 执行对数据的查询,修改,删除等等的。

    三层对应的包
    界面层: controller包 (servlet)
    业务逻辑层: service 包(XXXService类)
    数据访问层: dao包(XXXDao类)

    三层中类的交互
    用户使用界面层–> 业务逻辑层—>数据访问层(持久层)–>数据库(mysql

    三层对应的处理框架
    界面层—servlet—springmvc(框架)
    业务逻辑层—service类–spring(框架)
    数据访问层—dao类–mybatis(框架)

使用 JDBC 的缺陷

  1. 代码比较多,开发效率低
  2. 需要关注 Connection ,Statement, ResultSet 对象创建和销毁
  3. 对 ResultSet 查询的结果,需要自己封装为 List
  4. 重复的代码比较多些
  5. 业务代码和数据库的操作混在一起

MyBatis 解决的主要问题

mybatis完全是一个升级版的JDBC,他是可以完全独立抽取出来的使用的.
MyBatis 可以完成:

  1. 注册数据库的驱动,
  2. 创建 JDBC 中必须使用的 Connection , Statement, ResultSet 对象
  3. 从 xml 中获取 sql,并执行 sql 语句,把 ResultSet 结果转换 java 对象
    4.关闭资源
    ResultSet.close() , Statement.close() , Conenection.close()

mybatis使用步骤:

1.导入maven环境
2.创建dao接口,里面定了你需要对数据库执行什么操作
3.编写mapper文件,sql映射文件,写上你的sql语句
4.创建mybatis主配置文件,读取配置文件中的内容,连接到数据库
5.使用mybatis对象执行sql语句:sqlSession对象
6.关闭连接:sqlSession.close();

1.mybatis基本使用

新建数据库表

CREATE TABLE t_user (
id int NOT NULL AUTO_INCREMENT,
username varchar(255) DEFAULT NULL,
password varchar(255) DEFAULT NULL,
email varchar(255) DEFAULT NULL,
phone varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

1.使用maven新建一个项目(项目 目录结构)

1.1准备一个java Use 类


public class User 
    private Integer id;
    private String username;
    private String password;
    private String email;
    private String phone;

    public Integer getId() 
        return id;
    

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

    public String getUsername() 
        return username;
    

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

    public String getPassword() 
        return password;
    

    public void setPassword(String password) 
        this.password = password;
    

    public String getEmail() 
        return email;
    

    public void setEmail(String email) 
        this.email = email;
    

    public String getPhone() 
        return phone;
    

    public void setPhone(String phone) 
        this.phone = phone;
    

    public User() 
    

    public User(Integer id, String username, String password, String email, String phone) 
        this.id = id;
        this.username = username;
        this.password = password;
        this.email = email;
        this.phone = phone;
    
    @Override
    public String toString() 
        return "User" +
                "id=" + id +
                ", username='" + username + '\\'' +
                ", password='" + password + '\\'' +
                ", email='" + email + '\\'' +
                ", phone='" + phone + '\\'' +
                '';
    


2.配置pom.xml文件导入相应的依赖包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>mybais</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.9</maven.compiler.source>
        <maven.compiler.target>1.9</maven.compiler.target>
    </properties>

    <dependencies>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.4</version>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>

  </dependencies>

    <build>
        <!-- 把mybatis配置文件拷贝到target/clasess目录下-->
        <resources>
            <resource>
                <directory>src/main/java</directory><!--所在的目录-->
                <includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>

    </build>

</project>

3.编写dao接口

public interface UserManagerDao 

    /**
     * 查询所有的数据 用于视图展示
     * @return 返回一个List集合
     */
    public List<User> queryUser();

    /**
     * 添加
     * @param user 一个user对象
     * @return 成功返回true 失败返回false
     */
    public Boolean addUser(User user);

    /**
     * 删除用户
     * @param id 需要删除的用户id
     * @return 成功返回true  失败返回false
     */
    public Boolean delUser(String id);

    /**
     * 修改用户信息
     * @param user 需要一个user对象
     * @return 成功返回true 失败返回false
     */
    public Boolean updateUser(User user);

    /**
     * 按照用户名查找用户
     * @param name 需要查找的用户名
     * @return  返回一个List集合
     */
    public List<User> likeUser(String name);




4.编写dao接口的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:必须有值,自定义的唯一字符串
 推荐使用:dao 接口的全限定名称
-->
<mapper namespace="bookMall.dao.UserManagerDao">

    <select id="queryUser" resultType="bookMall.bean.User" >
 <!--查询操作-->
        select id,username,password,email,phone from t_user where  id>0
    </select>
    <select id="likeUser" resultType="bookMall.bean.User" >
        <!--跟参数的查询操作-->
        select id,username,password,email,phone from t_user where  username=#username
    </select>
<!--添加操作-->
    <insert id="addUser" >
             insert into t_user values(#id,#username,#username,#email,#phone)
    </insert>
</mapper>

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>

    <!--环境配置: 数据库的连接信息 default:必须和某个environment的id值一样。 告诉mybatis使用哪个数据库的连接信息。也就是访问哪个数据库  -->
    <environments default="mydev">
        <!-- environment : 一个数据库信息的配置, 环境   id:一个唯一值,自定义,表示环境的名称。 -->
        <environment id="mydev">
 <!--transactionManager :mybatis的事务类型  type: JDBC(表示使用jdbc中的Connection对象的commit,rollback做事务处理)  -->
            <transactionManager type="JDBC"/>
            <!-- dataSource:表示数据源,连接数据库的 type:表示数据源的类型, POOLED表示使用连接池  -->
            <dataSource type="POOLED">
                <!-- driver, user, username, password 是固定的,不能自定义。 -->
                <!--数据库的驱动类名-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <!--连接数据库的url字符串-->
                <property name="url" value="jdbc:mysql://localhost/book_ctiy?serverTimezone=GMT%2B8"/>
                <!--访问数据库的用户名-->
                <property name="username" value="root"/>
                <!--密码-->
                <property name="password" value="2732195202"/>
            </dataSource>
        </environment>

    </environments>

    <!-- sql mapper(sql映射文件)的位置-->
    <mappers>
        <!--一个mapper标签指定一个文件的位置。  从类路径开始的路径信息。  target/clasess(类路径)-->
        <mapper resource="bookMall\\dao\\UserManagerDao.xml"/>

    </mappers>
</configuration>
  

6.测试是否可以用

    @Test
    void queryUser() throws IOException 
         //访问mybatis读取student数据
                //1.定义mybatis主配置文件的名称, 从类路径的根开始(target/clasess)
                String config="mybatis.xml";
                //2.读取这个config表示的文件
                InputStream in = Resources.getResourceAsStream(config);
                //3.创建了SqlSessionFactoryBuilder对象
                SqlSessionFactoryBuilder builder  = new SqlSessionFactoryBuilder();
                //4.创建SqlSessionFactory对象
                SqlSessionFactory factory = builder.build(in);
                //5.获取SqlSession对象,从SqlSessionFactory中获取SqlSession
                SqlSession sqlSession = factory.openSession();
                //6.【重要】指定要执行的sql语句的标识。  sql映射文件中的namespace + "." + 标签的id值
                String sqlId = "bookMall.dao.UserManagerDao" + "." + "queryUser";
//                String sqlId = "bookMall.dao.UserManagerDao";
                //7. 重要】执行sql语句,通过sqlId找到语句
                List<User> studentList = sqlSession.selectList(sqlId);
                //8.输出结果
                //studentList.forEach( stu -> System.out.println(stu));
                for(User user : studentList)
                    System.out.println("查询的学生="+user);
                
                //9.关闭SqlSession对象
                sqlSession.close();

    

7.测试结果:

注意事项:

1:target目录下一定要有这两个文件,如果没有,手动复制进去也行

2.mysql的依赖配置如果是高版本的:
driver的值是:com.mysql.cj.jdbc.Driver

3.mysql的依赖配置如果是高版本的,url是这样的:
dbc:mysql://localhost/book_ctiy?serverTimezone=GMT%2B8
一定要加上时区,不然会报错
4.在pom.xml配置文件中需要加上,才能更好的将pom.xml和UserManagerDao.xml文件映射出去

2.mybatis工具类的封装和实现增删改查

项目的目录结构: :
需要注意的是target目录下必须有标记红色框的那两个文件,否则执行的时候回报错

1.准备数据库表

CREATE TABLE `t_user` (
  `id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `phone` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

INSERT INTO `t_user`(`id`, `username`, `password`, `email`, `phone`) VALUES (1, 'admin', 'admin', 'admin@qq.com', '1008611');
INSERT INTO `t_user`(`id`, `username`, `password`, `email`, `phone`) VALUES (2, 'root', 'root', 'root@qq.com', '1008622');
INSERT INTO `t_user`(`id`, `username`, `password`, `email`, `phone`) VALUES (19, 'admin2', 'root2', 'root@qq.com2', '1008644');

2.创建实体类

public class User 
    private Integer id;
    private String username;
    private String password;
    private String email;
    private String phone;

    public Integer getId() 
        return id;
    

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

    public String getUsername() 
        return username;
    

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

    public String getPassword() 
        return password;
    

    public void setPassword(String password) 
        this.password = password;
    

    public String getEmail() 
        return email;
    

    public void setEmail(String email) 
        this.email = email;
    

    public String getPhone() 
        return phone;
    

    public void setPhone(String phone) 
        this.phone = phone;
    

    public User() 
    

    public User(Integer id, String username, String password, String email, String phone) 
        this.id = id;
        this.username = username;
        this.password = password;
        this.email = email;
        this.phone = phone;
    
    @Override
    public String toString() 
        return "User" +
                "id=" + id +
                ", username='" + username + '\\'' +
                ", password='" + password + '\\'' +
                ", email='" + email + '\\'' +
                ", phone='" + phone + '\\'' +
                '';
    



3.创建maven项目,大多数配置一样,但是某些配置根据自己的来

注意:

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.9</maven.compiler.source>
<maven.compiler.target>1.9</maven.compiler.target>

因为我的jdk9,所以我写的就是9,你们根据自己的jdk版本来写.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>mybatisMybatis 介绍 入门 及连接数据库进行增删改查(步骤)

Mybatis实现增删改查

Mybatis基本应用:增删改查

Mybatis---配置文件完成增删改查(查询详情)

Springmvc+Spring+Mybatis+Maven简单的增删改查

beego 初体验 - orm - 增删改查