文章目录

  • 一、使用IDEA2020.2搭建环境
  • 1.新建一个工程
  • 2.创建一个工程mybatis01
  • 3.在pom中导入jar包(mybatis,mysql,junit,log4j)
  • 二、连接数据库
  • 1.先在数据库中创建一个用来测试的表
  • 2.在IDEA中连接数据库
  • 三、创建项目
  • 1.项目的主要文件主要为如下六个文件
  • 2.首先是对应刚才在数据库中创建的表编写一个 *User实体类*
  • 3.编写 *mybatis核心配置文件*
  • 3.1介绍核心配置文件中的两个优化部分
  • 4.编写 *映射文件*
  • 5.*mybatis工具类* 的编写
  • 6.*UserDao接口* 的编写
  • 7.*测试类* 的编写
  • 四、在测试过程中遇到的一些问题
  • 注(学习来源):


一、使用IDEA2020.2搭建环境

1.新建一个工程

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_sql

2.创建一个工程mybatis01

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_mysql_02

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

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_mybatis_03

二、连接数据库

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

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_sql_04

2.在IDEA中连接数据库

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_sql_05

三、创建项目

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

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_mybatis_06

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

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_sql_07


~~代码如下:

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核心配置文件

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_mybatis_08

核心配置文件代码如下:

<?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文件

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_intellij-idea_09


这是JDBC.propertes文件中的内容

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_mybatis_10


代码如下:

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下创建的

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_java_11


idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_mysql_12


代码如下:

<?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工具类 的编写

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_intellij-idea_13


代码如下:

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接口 的编写

位置如下:

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_mysql_14


代码如下:代码中附加注释

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.测试类 的编写

位置如下:

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_mysql_15


代码如下:

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();
    }
}

核心语句:

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_sql_16


mybatis自动代理实现了接口的实现

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

版本问题:数据库8.0之后的版本配置参数是这样的

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_java_17


《映射文件》中的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的类型相同

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_java_18

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_mybatis_19


idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_mysql_20


映射文件中的sql语句不要加分号";"

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_sql_21


SqlSessionFactory有两个常用方法创建SqlSession实例:我这里设置为自动提交了

openSession():会默认开启一个事务,但事务不会自动提交,意味着需要手动提交该事务,更新操作才会持久化到数据库中

openSession(boolean autoCommit):参数为是否自动提交,如果设置为true,那么不需要手动提交事务

idea java serviceImpl 查出的数据字段加粗 idea数据库增删改查_mysql_22