【MyBatis框架】Mybatis实战之基础篇

😊😊😊欢迎来到本博客😊😊😊
📫作者简介:阿斯卡码,专注于研究Java框架/Vue,就读于河南中医药大学,刚刚入门项目开发📫
🏆 CSDN编程比赛奖章获得者/Java领域创作者🏆
🔥计划学习:深入学习Spring全家桶,Vue, mybatis,Mysql等领域。(目前涉及不深入)🔥
👍如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~

项目代码:
链接:https://pan.baidu.com/s/1POo7Gscj3JgnUji9sXmWbw
提取码:6666
–来自百度网盘超级会员V3的分享

一:结构框架

mapper下的xml文件都会被package识别。
pojo下的所有类都会被package识别。
所以递归也会识别。
在这里插入图片描述

二:开发流程

1.基本配置:

1.1配置Application.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/Stu?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8
#jdbc.url=jdbc:mysql://localhost:3306/?????????????serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=XXXXXXXX

1.2.配置mybatis-config

<?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="Application.properties" />

    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <!--声明别名-->
    <!--  将pojo包下的所有类名作为别名(不用区分大小写)[递归文件夹也算]  -->
    <!--  注意:文件名  -->
    <typeAliases>
        <package name="com.mybatis.ch01.pojo"/>
    </typeAliases>


    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!--配置数据源: 创建Connection对象。-->
            <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>

    <!--指定其他mapper文件的位置:其他其他mapper文件目的是找到其他文件的sql语句-->
    <!--  注意:文件名  -->
    <mappers>
        <package name="com.mybatis.ch01.mapper"/>
    </mappers>
</configuration>

1.3配置MyBatisUtil工具类

package com.mybatis.ch01.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;

/**
 *  工具类:创建SqlSession对象
 */
public class MyBatisUtil {

    private static SqlSessionFactory factory  = null;

    static {

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

    //创建方法,获取SqlSession对象
    public static SqlSession getSqlSession(){
        SqlSession session = null;
        if( factory != null ){
            session =factory.openSession(true);// openSession(true);
        }
        return session;
    }

}

1.4配置pom.xml

build标签

 <!--资源插件: 处理src/main/java目录中的xml-->
 <resources>
   <resource>
     <directory>src/main/java</directory><!--所在的目录-->
     <includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
       <include>**/*.properties</include>
       <include>**/*.xml</include>
     </includes>
     <filtering>false</filtering>
   </resource>
 </resources>

dependencies标签

	//Test测试使用
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
	//JDBC使用
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.30</version>
    </dependency>

	//mybatis依赖
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
    </dependency>
	
	//@Data注解需要
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.12</version>
      <scope>provided</scope>
    </dependency>

2.编写pojo层(对应数据库中的表||导出的类)

Student.java

package com.mybatis.ch01.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Student {
    private Integer id;
    private String name;
    private String email;
    private Integer age;
}

Teacher.java

package com.mybatis.ch01.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Teacher {
    private Integer id;
    private String name;
    private String tno;
    private String classname;
    private Integer money;
}

ST.java:导出类

package com.mybatis.ch01.pojo.utils;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ST {
    private Integer studentid;
    private String studentname;
    private Integer teacherid;
    private String teachername;

}

3.编写mapper层

StudentMapper.java

package com.mybatis.ch01.mapper.student;

import com.mybatis.ch01.pojo.Student;
import org.apache.ibatis.annotations.Param;

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

public interface StudentMapper {
    //传入一个简单类型的参数
    Student selectByIdOne(Integer id);

    //传入多个简单类型的参数
    List<Student> selectByNameEmailTwo (@Param("myName") String name,
                                        @Param("myEmail") String email
                                        );
    //传入一个对象
    List<Student> selectByNameEmailTwo2 (Student student);

    //使用位置,获取参数
    List<Student> selectByNameEmailTwo3 (String name,String email);

    //参数是一个Map
    List<Student> selectByNameEmailTwo4 (Map<String,Object> data);

}

StudentMapper.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.mybatis.ch01.mapper.student.StudentMapper">
    <!--
   dao接口是一个简单类型的参数
   mapper文件,获取这个参数值,使用#{任意字符}
    -->
    <select id="selectByIdOne" resultType="Student">
        select * from student where id = #{myId}
    </select>

    <!--
   多个简单类型的参数.
   当使用了@Param命名后,例如@Param("myname").
   在mapper中,使用#{命名的参数}, 例如 #{myname},使用顺序无所谓
    -->
    <select id="selectByNameEmailTwo" resultType="Student">
         select * from student where email = #{myEmail} and name = #{myName}
    </select>

    <!--
   一个java对象作为方法的参数,使用对象的属性作为参数值使用
   简单的语法: #{必须是对象的属性名} , mybatis调用此属性的getXXX()方法获取属性值
    -->
    <select id="selectByNameEmailTwo2" resultType="Student">
        select * from student where email = #{email} and name = #{name}
    </select>

    <!--
   mybatis版本是 3.5.1
   使用位置获取参数值, dao接口方法是多个简单类型的参数
   语法: #{arg0}, #{arg1}....,一定是arg
    -->
    <select id="selectByNameEmailTwo3" resultType="Student">
        select * from student where name = #{arg0} and email = #{arg1}
    </select>

    <!--
    使用Map传递参数,
    在mapper文件中,获取map的值,是通过key获取的,语法:#{key}
    -->
    <select id="selectByNameEmailTwo4" resultType="Student">
        select * from student where name = #{name} and email = #{email}
    </select>
</mapper>

TeacherMapper.java

package com.mybatis.ch01.mapper.teacher;

import com.mybatis.ch01.pojo.Teacher;
import org.apache.ibatis.annotations.Param;

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

public interface TeacherMapper {
    List<Teacher> selectByTows(Map<String,Object> data);
}

TeacherMapper.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.mybatis.ch01.mapper.teacher.TeacherMapper">
    <select id="selectByTows" resultType="Teacher">
        select * from teacher where classname = #{classname} and money = #{money}
  </select>
</mapper>

重点:
STMapper.java

package com.mybatis.ch01.mapper.utils;

import com.mybatis.ch01.pojo.utils.ST;

import java.util.List;

public interface STMapper {
    List<ST> getList();
}

<?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.mybatis.ch01.mapper.utils.STMapper">
    <select id="getList" resultType="ST">
        select s.id studentid,s.name studentname,t.id teacherid,t.name teachername from student s,teacher t where s.id = t.id
    </select>
</mapper>

4.测试:

package com.mybatis.ch01;

import static org.junit.Assert.assertTrue;

import com.mybatis.ch01.mapper.student.StudentMapper;
import com.mybatis.ch01.mapper.teacher.TeacherMapper;
import com.mybatis.ch01.mapper.utils.STMapper;
import com.mybatis.ch01.pojo.Student;
import com.mybatis.ch01.pojo.Teacher;
import com.mybatis.ch01.pojo.utils.ST;
import com.mybatis.ch01.utils.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

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

/**
 * Unit test for simple App.
 */
public class AppTest 
{
    /**
     * 传入一个简单类型的参数
     */
    @Test
    public void selectByIdOne()
    {
        //1.获取SqlSession
        SqlSession session = MyBatisUtil.getSqlSession();
        //2.获取dao的代理
        StudentMapper dao = session.getMapper(StudentMapper.class);
        Student stu  = dao.selectByIdOne(1007);

        System.out.println(stu);
        //3.关闭SqlSession对象
        session.close();
    }

    /**
     * 传入多个简单类型的参数
     */
    @Test
    public void selectByNameEmailTwo()
    {
        SqlSession session = MyBatisUtil.getSqlSession();
        StudentMapper dao = session.getMapper(StudentMapper.class);
        List<Student> stus = dao.selectByNameEmailTwo("yxc1007","yxc1@qq.com");
        for (Student student:stus){
            System.out.println("stu==" + student);
        }
        session.close();
    }

    /**
     * 传入一个对象
     */
    @Test
    public void selectByNameEmailTwo2()
    {
        SqlSession session = MyBatisUtil.getSqlSession();
        StudentMapper dao = session.getMapper(StudentMapper.class);
        Student student = new Student();
        student.setName("yxc1007");
        student.setEmail("yxc1@qq.com");
        List<Student> stus = dao.selectByNameEmailTwo2(student);
        for (Student stu:stus){
            System.out.println("stu==" + stu);
        }
        session.close();
    }

    /**
     * 使用位置,获取参数
     */
    @Test
    public void selectByNameEmailTwo3()
    {
        SqlSession session = MyBatisUtil.getSqlSession();
        StudentMapper dao = session.getMapper(StudentMapper.class);
        List<Student> stus = dao.selectByNameEmailTwo3("yxc1007","yxc1@qq.com");
        for (Student stu:stus){
            System.out.println("stu==" + stu);
        }
        session.close();
    }
    /*
       使用Map作为参数
     */
    @Test
    public void selectByNameEmailTwo4()
    {
        SqlSession session = MyBatisUtil.getSqlSession();
        StudentMapper dao = session.getMapper(StudentMapper.class);
        Map<String,Object> data = new HashMap<>();
        data.put("name","yxc1007");
        data.put("email","yxc1@qq.com");
        List<Student> stus = dao.selectByNameEmailTwo4(data);
        for (Student stu:stus){
            System.out.println("stu==" + stu);
        }
        session.close();
    }

    /*
       使用Map作为参数(练习2)
     */
    @Test
    public void selectByTwos()
    {
        SqlSession session = MyBatisUtil.getSqlSession();
        TeacherMapper dao = session.getMapper(TeacherMapper.class);
        Map<String,Object> data = new HashMap<>();
        data.put("classname","计科");
        data.put("money",3000);
        List<Teacher> teachers = dao.selectByTows(data);
        for (Teacher tea:teachers){
            System.out.println("tea==" + tea);
        }
        session.close();
    }

    /**
     * 返回多表的数据
     */
    @Test
    public void getList()
    {
        SqlSession session = MyBatisUtil.getSqlSession();
        STMapper dao = session.getMapper(STMapper.class);
        List<ST> sts = dao.getList();
        for (ST s:sts){
            System.out.println("st==" + s);
        }
        session.close();
    }
}

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿斯卡码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值