MyBatis(看这一篇就够了)

一、配置环境

安装JDK
安装之前一定要卸载旧版本的JDK7,安装的话建议直接安装在C盘
配置环境变量
此电脑---->属性----->高级系统设置------>环境变量设置----->配置系统变量
C:\Program Files\Java\jdk1.8.0_181
在这里插入图片描述
在这里插入图片描述

安装Mysql

Mysql下载地址:https://dev.mysql.com/downloads/installer/
安装完之后记得安装荷叶,而且必须破解(有意私聊)

安装IDEA

安装完必须破解否则只能试用(有意私聊)
在这里插入图片描述
在这里插入图片描述
安装插件之后记得重启IDEA

使用Maven

Maven官网:https://maven.apache.org/
找到apache-maven-3.5.4\conf的目录,配置settings.xml文件
重点配置两个东西
1.配置本地仓库(存在以后下载的jar包的位置)
在这里插入图片描述
2.配置远程仓库(下载jar包默认是访问国外的网站,速度极慢,可能会下载失败),配置国内镜像
在这里插入图片描述

使用IDEA关联Maven

在这里插入图片描述
在这里插入图片描述
新项目设置maven
在这里插入图片描述
Maven的配置和上面一样

使用IDEA关联JDK
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、初识Mybatis

什么是MyBatis
MyBatis是一个半自动的ORM(Object Relation Mapping对象关系映射)持久层框架,底层其实就是封装了JDBC,简化了对数据库的操作

MyBatis的使用
创建项目

在这里插入图片描述
在这里插入图片描述
添加Maven依赖

Maven仓库网址:https://mvnrepository.com/

添加依赖坐标:
在这里插入图片描述

创建数据库以及开发包

建库建表语句

DROP TABLE IF EXISTS user;

CREATE TABLE user
(
	id BIGINT(20) NOT NULL COMMENT '主键ID',
	name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
	age INT(11) NULL DEFAULT NULL COMMENT '年龄',
	email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (id)
);

DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

实体类

package com.changan.entity;

import lombok.Data;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Integer id;

    private String name;

    private Integer age;

    private String email;
}

Dao层
UserDao

package com.changan.dao;

import com.changan.entity.User;

import java.util.List;

public interface UserDao {

    /**
     * 查询所有的学生信息
     * @return
     */
    List<User> findUsers();

    /**
     * 添加用户信息
     * @param user
     * @return
     */
    int addUser(User user);

    /**
     * 根据id删除用户信息
     * @param id
     * @return
     */
    int deleteUser(Long id);

    /**
     * 更新用户
     * @param user
     * @return
     */
    int updateUser(User user);
}

配置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>

    <typeAliases>
        <package name="com.changan.entity"></package>
    </typeAliases>
    <!--多套开发环境-->
    <environments default="development">
        <!--开发环境-->
        <environment id="development">
            <!--事务管理器   默认使用JDBC进行事务管理-->
            <transactionManager type="JDBC"/>
            <!--数据源配置-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8&amp;useUnicode=true&amp;serverTimezone=GMT%2B8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--对应的mybatis的xml文件-->
        <mapper resource="mapper/UserDao.xml"/>
    </mappers>
</configuration>

SQL映射文件

UserDao.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接口
  根据方法名称查找对应的sql语句
-->
<mapper namespace="com.changan.dao.UserDao">
    <!--
        每一种sql语句对应每一种标签
        resultType 返回值类型
    -->
    <select id="findUsers" resultType="User">

      select * from user

    </select>

    <!--
        id对应方法名称
        parameterType 参数类型
     -->
    <insert id="addUser" parameterType="user">
      INSERT INTO `mybatis`.`user`(`id`, `name`, `age`, `email`) VALUES (null, #{name}, #{age}, #{email});
    </insert>

    <delete id="deleteUser">
      delete  from `USER` where id=#{id}
    </delete>

    <update id="updateUser">
      UPDATE `mybatis`.`user` SET `name` = #{name}, `age` = #{age}, `email` = #{email} WHERE `id` = 7;
    </update>
</mapper>

测试
MyBatisUtil

package com.changan.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 MyBaitsUtil {

    static SqlSession sqlSession = null;

    /**
     * 获取SqlSession
     * @return SqlSession对象
     */
    public static SqlSession getSqlSession(){
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        sqlSession = sqlSessionFactory.openSession();
        return sqlSession;
    }

    /**
     * 关闭SqlSession
     */
    public static void closeSqlSession(SqlSession sqlSession){
        if(sqlSession!=null){
            sqlSession.close();
        }
    }
}

UserTest

package com.changan.test;

import com.changan.dao.UserDao;
import com.changan.entity.User;
import com.changan.utils.MyBaitsUtil;
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 org.junit.Test;

import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class UserTest {

    @Test
    public void testFind() {
        SqlSession sqlSession = MyBaitsUtil.getSqlSession();
        try {
            List<User> users = sqlSession.selectList("com.changan.dao.UserDao.findUsers");
            for (User user : users
            ) {
                System.out.println(user.toString());
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //每次用完记得关闭连接对象
            MyBaitsUtil.closeSqlSession(sqlSession);
        }
    }

    @Test
    public void testSelect() {
        /*ctrl+alt+L  代码对齐*/
        SqlSession sqlSession = MyBaitsUtil.getSqlSession();
        try {
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            List<User> users = userDao.findUsers();
            //jdk8中提供的箭头函数
            users.forEach(user -> {
                System.out.println(user.toString());
            });
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            MyBaitsUtil.closeSqlSession(sqlSession);
        }
    }

    @Test
    public void testInsert() {
        SqlSession sqlSession = MyBaitsUtil.getSqlSession();
        try {
            //mybatis是支持事务的  默认是不开启事务的
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            User user = new User();
            user.setName("luoya");
            user.setAge(18);
            user.setEmail("3838438@qq.com");
            //仅仅是在内存中增加了一个用户
            int i = userDao.addUser(user);
            //手动提交事务
            sqlSession.commit();
            System.out.println(i);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            MyBaitsUtil.closeSqlSession(sqlSession);
        }
    }

    @Test
    public void deleteUser() {
        SqlSession sqlSession = MyBaitsUtil.getSqlSession();
        try {
            //mybatis是支持事务的  默认是不开启事务的
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            //仅仅是在内存中增加了一个用户
            int i = userDao.deleteUser(5L);
            //手动提交事务
            sqlSession.commit();
            System.out.println(i);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            MyBaitsUtil.closeSqlSession(sqlSession);
        }
    }

    @Test
    public void testupdate() {
        SqlSession sqlSession = MyBaitsUtil.getSqlSession();
        try {
            //mybatis是支持事务的  默认是不开启事务的
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            User user = new User();
            user.setName("ange");
            user.setAge(38);
            user.setEmail("1351261434@qq.com");
            //仅仅是在内存中增加了一个用户
            int i = userDao.updateUser(user);
            //手动提交事务
            sqlSession.commit();
            System.out.println(i);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            MyBaitsUtil.closeSqlSession(sqlSession);
        }
    }

总结

步骤
1、创建项目
2、新建数据库和开发包
3、导入maven坐标
4、配置mybatis-config文件
5、编写实体类
6、编写dao接口
7、编写dao.xml文件
8、编写MyBaitsUtil文件
9、编写测试类

三、sql映射文件

增删改查操作
select
配置日志打印

<settings>
    <setting name="cacheEnabled" value="true" />
    <setting name="useGeneratedKeys" value="true" />
    <setting name="defaultExecutorType" value="REUSE" />
    <setting name="logImpl" value="STDOUT_LOGGING" />
</settings>

在这里插入图片描述
无条件查询查询

/**
* 查询所有用户
*/
List<User> findUsers();

<select id="findUsers" resultType="User">
    select * from smbms_user
</select>

有多个参数的时候
1.可以通过@Param进行参数传递

/**
* 根据用户名称和用户角色进行查询
* 多个参数的时候一定要加上@Param才能实现查询,不然会报错
* @return
*/
List<User> findByUserNameAndUserRole(@Param("userName") String userName,@Param("userRole") Integer userRole);

<select id="findByUserNameAndUserRole" resultType="User">
    select * from smbms_user where userName like concat("%",#{userName},"%")
    and userRole=#{userRole}
</select>

2.也可以封装成User对象进行参数传递

/**
* 根据用户名称和用户角色进行查询
* @return
*/
List<User> findByUserNameAndUserRole1(User user);

<select id="findByUserNameAndUserRole1" resultType="User" parameterType="User">
    select * from smbms_user where userName like concat("%",#{username},"%")
    and userRole=#{userrole}
</select>

可以封装成Map进行参数传递

/**
* 根据用户名称和用户角色进行查询
* @return
*/
List<User> findByUserNameAndUserRole2(Map<String,Object> map);
    
<select id="findByUserNameAndUserRole2" resultType="User">
    select * from smbms_user where userName like concat("%",#{username},"%")
    and userRole=#{userrole}
</select>

最后再提一句:跟着官网学习不迷路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值