MyBatis学习笔记(一)完整查询数据库流程+增删改查

MyBatis是一个持久层框架(即操作数据库),可以帮助我们省略JDBC

用法:就是在maven项目中导入MyBatis包

中文文档:mybatis – MyBatis 3 | 简介

先导知识:JavaWeb学习笔记(二) IDEA中创建maven项目以及导包方法

                  JavaWeb学习笔记(九)连接数据库

获取方式:

1. Github: Releases · mybatis/mybatis-3 · GitHub

2. maven仓库


一、查询数据库的全过程

1. 新建空的maven项目,删除src文件夹

2. 在pom.xml中导包:junit (用于单元测试); mysql-connector-java ; mybatis ;

   

3. 新建子模块:普通的maven项目

注意:新建完只有一定要为文件夹标记属性,否则不会报错 

 4. 使用MyBatis获取SqlSessionFactory对象并从中获取SqlSession对象

idea中try/catch快捷键:选中要包裹代码+ Ctrl + Alt +t

在Java文件夹下新建utils文件夹以及MybatisUtils类

package utils;

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.InputStream;

public class MybatisUtils {
    // 1.使用MyBatis获取sqlSessionFactory对象
    private static SqlSessionFactory sqlSessionFactory;
    static{
        try {
            String resource = "myBatis_config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 2.从 sqlSessionFactory 中获取SqlSession实例
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

5. 在MySQL中新建数据库、表格;略

6. 在java下面的pojo文件夹下建立对应的实体类即JavaBean

略,这两步直接使用开头先导知识第二篇中的mybatis数据库中的user表以及实体类 User.java,但是要重写这个函数

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }

7. 在Java文件夹下的dao文件夹中新建UserMapper.java,在resource文件夹下新建UserMapper.xml 

UserMapper.java是一个接口类

package dao;//用于操控实体类 User.java

import pojo.User;
import java.util.List;

public interface UserMapper {
    //声明getUserList方法,返回值是User列表
    List<User> getUserList();

}

UserMapper.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">

<mapper namespace="dao.UserMapper">
    <select id="getUserList" resultType="pojo.User">
        select * from mybatis.user;
    </select>
</mapper>

namespace是实现了哪个接口,id是实现了接口里的哪个方法,resultType是返回值类型是哪个实体类

8. 配置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="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&amp;useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

每个接口实现类的xml文件都必须在这里注册

9. 测试

在test文件中写,文件夹的格式要和上面一样,并且都是一一对应的,每个dao都对应一个测试文件

package dao;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import pojo.User;
import utils.MybatisUtils;

import java.util.List;


public class UserDaoTest {
    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper userDao = sqlSession.getMapper(UserMapper.class);
        List<User> userList = userDao.getUserList();

        for(User user:userList){
            System.out.println(user.toString());
        }

        sqlSession.close();
    }

}

二、普通的增删改查CRUD

有三个文件受到影响,以下只显示新增部分

UserMapper.java

User getUserById(int id);
int addUser(User user);
int updateUser(User user);
int deleteUser(int id);

UserDaoTest.java

    @Test
    public void getUserById(){
        SqlSession sqlSession=MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //只有这两步需要修改
        User user= mapper.getUserById(1);
        System.out.println(user);

        sqlSession.close();
    }

    @Test
    public void addUser(){
        SqlSession sqlSession=MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        int res = mapper.addUser(new User(4, "发财", "1233"));
        if(res>0){
            System.out.println("success");
        }
        sqlSession.commit(); //增删改要提交事务
        sqlSession.close();
    }

    @Test
    public  void updateUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        mapper.updateUser(new User(4,"暴富","1237"));

        sqlSession.commit();
        sqlSession.close();

    }

    @Test
    public void deleteUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int i = mapper.deleteUser(4);

        sqlSession.commit();
        sqlSession.close();
    }

   

UserMapper.xml

    <select id="getUserById" parameterType="int" resultType="pojo.User">
        select * from mybatis.user where userId=#{id};
    </select>
    <insert id="addUser" parameterType="pojo.User">
        insert into mybatis.user (`userId`,`name`,`pwd`)values (#{userId},#{name},#{pwd});
    </insert>
    <update id="updateUser" parameterType="pojo.User">
        update mybatis.user set name=#{name},pwd=#{pwd} where userId=#{userId};
    </update>
    <delete id="deleteUser" parameterType="int">
        delete from mybatis.user where userId=#{id};
    </delete>

三、利用map增删改查

UserMapper.java

    //插入部分属性
    int addUser2(Map<String,Object> map);

    //通过多个属性共同查询
    User getUserByIdAndName(Map<String,Object> map);

UserDaoTest.java

    @Test //插入部分属性
    public void addUserT2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//
        HashMap<String, Object> map = new HashMap<>();
        map.put("userid",6);
        map.put("passWord",12346);
//
        mapper.addUser2(map);sqlSession.commit();
//
        sqlSession.close();
    }

    @Test//通过单独的几个条件查询
    public void getUserByIdAndNameTest(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//
        HashMap<String, Object> map = new HashMap<>();
        map.put("id",1);
        map.put("name","小发");
//
        User user = mapper.getUserByIdAndName(map);
        System.out.println(user);
        sqlSession.close();
    }

UserMapper.xml

    <insert id="addUser2" parameterType="map">
        insert into mybatis.user(userId,pwd) values (#{userid},#{passWord})
    </insert>
    <select id="getUserByIdAndName" parameterType="map" resultType="pojo.User">
        select * from mybatis.user where userId=#{id} and name=#{name}
    </select>

四、模糊查询

UserMapper.java

List<User> getUserLike(String value);

UserDaoTest.java

    @Test
    public  void getUserLike(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        List<User> userLike = mapper.getUserLike("%小%");

        for (User user : userLike) {
            System.out.println(user);
        }
        sqlSession.close();
    }

UserMapper.xml

    <select id="getUserLike" resultType="pojo.User" >
        select * from mybatis.user where name like #{value}
    </select>

下一篇:MyBatis学习笔记(二)根据配置文件优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值