IDEA2020.2 Mybatis入门(增删改查)

一、使用IDEA2020.2搭建环境

1.新建一个工程

在这里插入图片描述

2.创建一个工程mybatis01

在这里插入图片描述

3.在pom中导入jar包(mybatis,mysql,junit,log4j)

在这里插入图片描述

二、连接数据库

1.先在数据库中创建一个用来测试的表

在这里插入图片描述

2.在IDEA中连接数据库

在这里插入图片描述

三、创建项目

1.项目的主要文件主要为如下六个文件

在这里插入图片描述

2.首先是对应刚才在数据库中创建的表编写一个 User实体类

在这里插入图片描述
~~代码如下:

package com.mybatis.Dao.pojo;

public class User {
    private  int id;
    private  String last_name;
    private  String Gender;
    private  String email;

    public User() {
    }

    public User(int id, String last_name, String gender, String email) {
        this.id = id;
        this.last_name = last_name;
        Gender = gender;
        this.email = email;
    }

    public int getId(int i) {
        return id;
    }

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

    public String getLast_name() {
        return last_name;
    }

    public void setLast_name(String last_name) {
        this.last_name = last_name;
    }

    public String getGender() {
        return Gender;
    }

    public void setGender(String gender) {
        this.Gender = gender;
    }

    public String getEmail() {
        return email;
    }

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


    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", last_name='" + last_name + '\'' +
                ", gender='" + Gender + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}


3.编写 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>
<!--通过properties标签加载外部properties文件-->
    <properties resource="JDBC.properties"></properties>
<!--自定义别名-->
    <typeAliases>
        <typeAlias type="com.mybatis.Dao.pojo.User" alias="user"></typeAlias>
    </typeAliases>
    <!--数据源环境-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${JDBC.driver}"/>
                <property name="url" value="${JDBC.url}"/>
                <property name="username" value="${JDBC.username}"/>
                <property name="password" value="${JDBC.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--加载映射文件-->
    <mappers>
        <mapper resource="Mapper/UserMapper.xml"/>
    </mappers>
</configuration>

3.1介绍核心配置文件中的两个优化部分

第一部分:properties标签
在resources目录下建一个JDBC.propertes文件
在这里插入图片描述
这是JDBC.propertes文件中的内容
![在这里插入图片描述](https://img-blog.csdnimg.cn/c05d3e601a3a44d29cd598c687f36154.png
代码如下:

JDBC.driver=com.mysql.cj.jdbc.Driver
JDBC.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8
JDBC.username=root
JDBC.password=123456

第二部分:自定义别名typeAliases标签
就是将 我这里"com.mybatis.Dao.pojo.User"这个名字取了一个别名为"user"
方便后面映射文件中resultType等调用

4.编写 映射文件

4.1映射文件的位置–在resources下的Mapper下创建的
在这里插入图片描述
在这里插入图片描述
代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--查询操作-->
<mapper namespace="com.mybatis.Dao.UserDao">
    <select id="getUserList" resultType="user">
        select * from mybatis.user
    </select>
<!--插入操作-->
    <insert id="insert" parameterType="user">
        insert into user values(#{id},#{last_name},#{gender},#{email})
    </insert>
<!--修改操作-->
    <update id="update" parameterType="user">
        update user
        <set>last_name=#{last_name},gender=#{gender},email=#{email} where id=#{id}</set>
    </update>
<!--删除操作-->
    <delete id="delete" parameterType="int">
        delete from user where id = #{id}
    </delete>
<!--根据id查询一条记录-->
    <select id="selectOne" resultType="user" parameterType="int">
        select * from mybatis.user where id = #{id}
    </select>
</mapper>

5.mybatis工具类 的编写

在这里插入图片描述
代码如下:

package com.mybatis.Dao.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 {
    //sqlSessionFactory 获取 sqlSession
        private static SqlSessionFactory sqlSessionFactory;
    static {
            try {
                //使用 mybatis 第一步:获取 sqlSessionFactory 对象
                String resource = "sqlMapperconfig.xml";
                InputStream inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
        //SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
        public static SqlSession getSqlSession(){
            return sqlSessionFactory.openSession(true);
        }
    }

6.UserDao接口 的编写

位置如下:
在这里插入图片描述
代码如下:代码中附加注释

package com.mybatis.Dao;
import com.mybatis.Dao.pojo.User;
import java.util.List;
// 这里面的代码是一个接口,对应映射文件的namespace+id值
public interface UserDao {  //UserDao对应的类路径是映射文件中的namespace
    List<User> getUserList();
    int insert (User user);//insert对应的是映射文件中的id值
    int update(User user);//update对应的是映射文件中的id值
    int delete(int id);
    User selectOne(int id);
}

7.测试类 的编写

位置如下:
在这里插入图片描述
代码如下:

package com.mybatis.Dao;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.mybatis.Dao.pojo.User;
import com.mybatis.Dao.utils.MybatisUtils;
import java.util.List;
public class UserDaoTest {
    @Test
    //查询操作
    public void test01(){
        //第一步:获取 sqlSession 对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //将 MybatisUtils工具类封装成一个获取openSession()的方法(这个方法通过 MybatisUtils.getSqlSession()进行调用)
        //使用 getMapper 执行 sql 语句
        UserDao userdao = sqlSession.getMapper(UserDao.class);
        List<User> userList = userdao.getUserList();
        for(User user:userList){
            System.out.println(user);
        }
        //关闭 sqlSession
        sqlSession.close();
    }
    @Test
    //插入操作
    public void test02(){
        //第一步:获取 sqlSession 对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //使用 getMapper 执行 sql 语句
        UserDao userdao = sqlSession.getMapper(UserDao.class);
        User user = new User(3,"aa","1","wewewe");
        int count = userdao.insert(user);
        sqlSession.commit();
        //关闭 sqlSession
        sqlSession.close();
    }
    @Test
    //更新操作
    public void test03(){
        //第一步:获取 sqlSession 对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //使用 getMapper 执行 sql 语句
        UserDao userdao = sqlSession.getMapper(UserDao.class);
        User user = new User();
        user.setId(3);
        user.setLast_name("cc");
        user.setGender("0");
        user.setEmail("xxxxxx");
        int count = userdao.update(user);
        System.out.println(count);
        //sqlSession.commit();
        //关闭 sqlSession
        sqlSession.close();
    }
    @Test
    //删除操作
    public void test04(){
        //第一步:获取 sqlSession 对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //使用 getMapper 执行 sql 语句
        UserDao userdao = sqlSession.getMapper(UserDao.class);
        User user = new User();
        int count = userdao.delete(2);
        System.out.println(count);
        //sqlSession.commit();
        //关闭 sqlSession
        sqlSession.close();
    }
    @Test
    //根据id查询一条记录
    public void test05(){
        //第一步:获取 sqlSession 对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //使用 getMapper 执行 sql 语句
        UserDao userdao = sqlSession.getMapper(UserDao.class);
        User user = userdao.selectOne(2);
        System.out.println(user);
        //关闭 sqlSession
        sqlSession.close();
    }
}

核心语句:
在这里插入图片描述
mybatis自动代理实现了接口的实现

四、在测试过程中遇到的一些问题

版本问题:数据库8.0之后的版本配置参数是这样的
在这里插入图片描述
《映射文件》中的namespace和id值与《UserDao接口》中的对应问题
Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象

Mapper接口开发需要遵循以下规范:
1、 映射文件(UserMapper.xml)中的namespace与mapper接口(我命名为了UserDao)的类路径相同。
2、 UserDao接口方法名和映射文件中定义的每个statement的id相同
3、 UserDao接口方法的输入参数类型和映射文件中定义的每个sql 的parameterType的类型相同
4、 UserDao接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
![在这里插入图片描述](https://img-blog.csdnimg.cn/c3cbdc7d90c34fcf820411f50de832b6.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA546W5YidXg==,size_20,color_FFFFFF,t_70,g_se,x_16

在这里插入图片描述
在这里插入图片描述
映射文件中的sql语句不要加分号";"
在这里插入图片描述
SqlSessionFactory有两个常用方法创建SqlSession实例:我这里设置为自动提交了
openSession():会默认开启一个事务,但事务不会自动提交,意味着需要手动提交该事务,更新操作才会持久化到数据库中
openSession(boolean autoCommit):参数为是否自动提交,如果设置为true,那么不需要手动提交事务
在这里插入图片描述

注(学习来源):

观看的黑马程序猿视频进行学习
视频链接:黑马程序猿视频学习网址
在学习过程中遇到的一些问题看了这些博主的文章
IDEA2020创建mybatis项目
[IDQuantumYouEA2020创建mybatis项目](https://blog.csdn.net/kongchan0128/article/details/109765551)
第一次学习总结,有理解不对的地方希望大家不吝赐教给予指正

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值