Mybatis入门案例-----使用IDEA 创建 maven java 项目,使用mapper接口实现增删改查(内含源码及详细解释)

题目

使用IDEA 创建 MAVEN  JAVA 项目

根据下图 在mysql数据库中创建员工表(t_employee)

创建实体类 Employee  并创建mapper接口(EmployeeMapper.java)

以及测试类 对创建的mapper映射文件进行增删改查以及测试

Mybatis入门案例-----使用IDEA 创建 maven java 项目,使用mapper接口实现增删改查(内含源码及详细解释)

项目目录结构

Mybatis入门案例-----使用IDEA 创建 maven java 项目,使用mapper接口实现增删改查(内含源码及详细解释)

 

1.在数据库中创建表T_Employee(大小写无所谓)

DROP TABLE IF EXISTS t_employee;
CREATE TABLE t_employee (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(30) DEFAULT NULL,
  age int(11) DEFAULT NULL,
  birthday date DEFAULT NULL,
  salary decimal(10,0) DEFAULT NULL,
  PRIMARY KEY (id)
)

2.创建实体类Employee

package com.xiongluoluo.bean;

import lombok.*;

import java.math.BigDecimal;
import java.util.Date;

/**
 * Created by Administrator on 2019/12/21 0021.
 */
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Employee {
    private int id;
    private String name;
    private int age;
    private Date birthday;
    private BigDecimal salary;
}

2.要使用mybatis的mapper映射文件,就必须先导入mybatis依赖,由于要和数据库进行交互,所以还要导入mysql连接数据库也就是JDBC的依赖.

2.1   pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.xiongluoluo</groupId>
    <artifactId>mybatis2</artifactId>
    <version>1.0.0</version>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <!--JDBC的依赖(https://mvnrepository.com中搜索mysql,点击第一个即可)-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>

    </dependencies>

</project>

 

2.2 db.properties文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///test2
username=root
password=1234

 

2.3 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"/>
    <typeAliases>
        <package name="com.xiongluoluo.bean"/>
    </typeAliases>
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driverClassName}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="EmployeeMapper.xml"/>
    </mappers>
</configuration>

 

2.4 EmployeeMapper.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.xiongluoluo.mapper.EmployeeMapper">
    <!--使用mapper接口编程的时候,这个地方namespace的值必须是接口的全限定名
    因为底层需要利用这个全限定名反射创建接口的对象,然后执行方法.所以这里必须写全限定名
    就算起别名也不行,必须写全限定名!!!起别名那个最好就用在bean,不要用在别的地方.-->

    
    <!--java bean(Employee)的属性与表中的列名不一致的时候,
    我们可以使用resultMapjava bean(Employee)进行封装.-->
    <resultMap id="employeeResultMap" type="Employee">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="age" column="age"/>
        <result property="birthday" column="birthday"/>
        <result property="salary" column="salary"/>
    </resultMap>


    <!--使用mapper接口编程的时候
    namespace对应mapper接口的全限定名
    id对应mapper接口中的方法名
    parameterType对应mapper接口中的参数类型
    resultMap/resultType对应方法中的返回值类型-->



    <!--查询全部-->
    <select id="selectAllEmployee" resultMap="employeeResultMap">
    <!--由于我这里实体类Employee的属性跟数据库中的列名是一致的
    所以返回值可以直接写resultType="Employee"
    还有一点就是虽然查询全部返回的是List<Employee>,
    但是我们这里写resultType的时候还是写Employee即可-->
        select id,name,age,birthday,salary from t_employee
    </select>


    <!--通过id查询-->
    <select id="selectEmployeById" parameterType="int" resultMap="employeeResultMap">
        select id,name,age,birthday,salary from t_employee where id=#{id}
    </select>


    <!--通过id删除-->
    <delete id="deleteEmployeeById" parameterType="int">
        delete from t_employee where id=#{id}
    </delete>


    <!--修改信息(先查询,再修改)-->
    <update id="updateEmployee" parameterType="Employee">
        update t_employee set name=#{name},age=#{age},birthday=#{birthday},salary=#{salary}
        /*这里不要修改id,id是主键,修改的时候,不能相同.干脆别写了*/
   </update>


    <!--添加员工信息-->
    <insert id="insertEmployee" parameterType="Employee">
        insert into t_employee values(null,#{name},#{age},#{birthday},#{salary})
    </insert>

    
</mapper>

 

2.5 EmployeeMapper.java文件(mapper接口)

package com.xiongluoluo.mapper;

import com.xiongluoluo.bean.Employee;

import java.util.List;

/**
 * Created by Administrator on 2019/12/22 0022.
 */
public interface EmployeeMapper {
    //查询全部
    public List<Employee> selectAllEmployee();
    //通过id查询
    public Employee selectEmployeById(int id);
    //通过id删除
    public void deleteEmployeeById(int id);
    //修改信息(先查询,再修改)
    public void updateEmployee(Employee employee);
    //添加员工信息
    public void insertEmployee(Employee employee);

    /*使用mapper接口编程的时候,增删改是没有返回值的,只有查询有返回值.*/
}

 

 

4 测试

4.1 获取SqlSession的工具类

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

/**
 * Created by Administrator on 2019/12/22 0022.
 */
public class MybatisUtil {

    //这个方法封装到SqlSession即可,提交事务还需要SqlSession,不能再继续往下封装了.
    public static SqlSession getSqlSession(){
        String resource = "mybatis-config.xml";
        SqlSession sqlSession = null;
        try {
            InputStream is = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            sqlSession = sqlSessionFactory.openSession();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sqlSession;
    }
}

 

4.2 测试类

package com.xiongluoluo.test;

import com.xiongluoluo.bean.Employee;
import com.xiongluoluo.mapper.EmployeeMapper;
import com.xiongluoluo.utils.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * Created by Administrator on 2019/12/22 0022.
 */
public class MybatisTest {

    //查询全部
    @Test
    public void testSelectAllEmployee(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        List<Employee> employeeList = employeeMapper.selectAllEmployee();
        for(Employee employee : employeeList){
            System.out.println(employee);
        }
    }

    //通过id查询
    @Test
    public void testSelectEmployeeById(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        Employee employee = employeeMapper.selectEmployeById(7);
        System.out.println(employee);
    }


    //通过id删除
    @Test
    public void testDeleteEmployeeById(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        employeeMapper.deleteEmployeeById(22);
        sqlSession.commit();
        sqlSession.close();
        //增删改一定要记得提交事务
    }


    //修改信息(先查询,再修改)
    @Test
    public void testUpdateEmployee(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        Employee employee = employeeMapper.selectEmployeById(8);
        employee.setName("小虎");
        employee.setAge(33);
        employeeMapper.updateEmployee(employee);

    }

    //添加员工信息
    @Test
    public void testInsertEmployee(){
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        Employee employee = new Employee();
        employee.setName("春天");
        employee.setAge(18);
        employee.setBirthday(new Date());
        employee.setSalary(new BigDecimal(8000));
        employeeMapper.insertEmployee(employee);
        sqlSession.commit();
        sqlSession.close();
        //提交事务,提交事务,一定要记得提交事务
    }
}

 

之前画风太花哨了,配色我自个儿看着都有点儿惨不忍睹的感觉.以后我要做一个高冷的人,走简洁风,耶!