mybatis study01 -- mybatis简介以及第一个程序CRUD

1.简介

1.1什么是Mybtis

mybatis中文文档:https://mybatis.org/mybatis-3/zh/index.html中给出
MyBatis 是一款优秀的持久层框架,前身是apache的一个开源项目ibatis,它支持自定义 SQL、存储过程以及高级映射MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

1.2什么是持久层?

可以理解为将数据持久的保存在数据库或者硬盘这种类似的持久化设备中,并非内存那样,也并非用完即消失。

1.3为什么要持久化?

有的数据需要保存;内存太贵。

1.4mybatis的优点?

  1. 将数据存到数据库之中
  2. 避免了jdbc复杂的代码编写,更加简单
  3. 支持自定义SQL,SQL与代码分离,维护性高
  4. 提供了映射标签,使对象与数据库中的orm(持久化)字段关系映射

2.第一个Mybatis程序

  1. 创建数据库表user,字段为id(primary key), name, pwd
  2. 创建User.java类
package com.wang.pojo;

public class User {
    private int id;
    private String name;
    private String password;

    public User() {
    }

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getPassword() {
        return password;
    }

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

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

    public User(int id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }
}

  1. 创建UserMapper接口
package com.wang.dao;

import com.wang.pojo.User;

import java.util.List;
import java.util.Map;

public interface UserMapper {
    User getUserById(int id);//One(对照下面的测试方法)
    int addUser(User user);//Two
    int updateUser(User user);//Three
    int deleteUserById(int id);//Four
    List<User> getUserLike(String val);//进阶sql Five
}

  1. 创建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="com.wang.dao.UserMapper">

    <resultMap id="userMap" type="user">
        <!--property属性,代表java类中的字段;column列,代表数据库中的字段-->
        <id property="password" column="pwd"/>
    </resultMap>

    <!-- resultMap和resultType的区别:
    resultType必须是pojo对象的字段与数据库中的字段名完全一致,才能映射成功;
    resultMap可以通过定义一个resultMap的pojo对象的属性与数据库字段的映射关系,即使二者字段不一致,通过resultMap也能映射成功
   -->
    <select id="getUserById" resultMap="userMap" parameterType="int">
        select * from mybatis.User where id=#{id}
    </select>

    <insert id="addUser" parameterType="user">
        insert into mybatis.User(id, name, pwd) values (#{id}, #{name}, #{password})
    </insert>

    <update id="updateUser" parameterType="user">
        update mybatis.user set name=#{name}, pwd=#{password} where id=#{id}
    </update>

    <delete id="deleteUserById" parameterType="int">
        delete from mybatis.user where id=#{id}
    </delete>

    <select id="getUserLike" resultMap="userMap">
        select * from mybatis.user where name like "%"#{name}"%";
    </select>
</mapper>
  1. 创建工具类MybatisUtils
package com.wang.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.IOException;
import java.io.InputStream;

public class MybatisUtils {

    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    //既然有了SqlSessionFactory, 就可以从中获得SqlSession的实例了
    //SqlSession 完全包含了面向数据库执行SQL命令的所有方法

    public static SqlSession getSession(){
        return sqlSessionFactory.openSession();
    }
}
  1. 创建mybatis-config.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>
    <properties resource="db.properties">
    </properties>

    <!--扫描包下的实体类,别名为该类名,类名首字母需小写-->
    <typeAliases>
        <package name="com.wang.pojo"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--每一个mapper.xml都需要在mybatis核心配置文件中注册-->
    <!--映射器-->
    <mappers>
        <mapper resource="com/wang/dao/UserMapper.xml"/>
    </mappers>
</configuration>
  1. 创建测试类

import com.wang.dao.UserMapper;
import com.wang.pojo.User;
import com.wang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class TestMybatis3 {
    @Test
    public void testOne() {
        //获取sqlSession对象
        SqlSession sqlSession = MybatisUtils.getSession();
        //方式一:getMapper
        UserMapper userDao = sqlSession.getMapper(UserMapper.class);
        User user = userDao.getUserById(1);

        System.out.println(user);
        //关闭SqlSession
        sqlSession.close();
    }
    @Test
    public void testTwo(){
        SqlSession sqlSession = MybatisUtils.getSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        userMapper.addUser(new User(11, "b王", "123456"));
        sqlSession.commit();//划重点:对数据库进行增删改操作别忘了commit
        System.out.println(userMapper.getUserById(10));
        sqlSession.close();
    }
    @Test
    public void testThree(){
        SqlSession sqlSession = MybatisUtils.getSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        System.out.println(userMapper.getUserById(1));
        userMapper.updateUser(new User(1, "aaa", "123456"));
        sqlSession.commit();//划重点:对数据库进行增删改操作别忘了commit
        System.out.println(userMapper.getUserById(1));
        sqlSession.close();
    }
    @Test
    public void testFour(){
        SqlSession sqlSession = MybatisUtils.getSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        System.out.println(userMapper.getUserById(1));
        userMapper.deleteUserById(1);
        sqlSession.commit();//划重点:对数据库进行增删改操作别忘了commit
        System.out.println(userMapper.getUserById(1));
        sqlSession.close();
    }
    @Test
    public void testFive(){
        SqlSession sqlSession = MybatisUtils.getSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> userLike = userMapper.getUserLike("王");
        for (User user:userLike){
            System.out.println(user);
        }
        sqlSession.close();
    }

}


版权声明:本文为weixin_43348513原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。