java框架Mybatis學習——用mybatis實現CRUD操作

一.數據庫準備及環境搭建

1.數據庫mysql中使用database名爲mybatis並在其中創建表student表

create table student(
    -> id int(11) primary key auto_increment,
    -> stuname varchar(11),
    -> major varchar(11),
    -> sex varchar(1),
    -> age int(11)
    -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;

並插入一條數據用於測試

insert into student(stuname,major,sex,age)
values('roy','computer','M','23');

2.在IntelliJ IDEA中新建project命名爲mybatis_crudTest,建立結束後先在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.lut</groupId>
    <artifactId>mybatis_crudTest</artifactId>
    <version>1.0-SNAPSHOT</version>
    
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.20</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

3.在src-》main-》java包中新建java項目命名爲:com.lut.domain.Student
並將屬性和getter、setter和toString方法加入。
Student.java如下:

package com.lut.domain;
public class Student {
    private Integer id;
    private String stuname;
    private String major;
    private String sex;
    private int age;
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", stuname='" + stuname + '\'' +
                ", major='" + major + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }
   public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getStuname() {
        return stuname;
    }
    public void setStuname(String stuname) {
        this.stuname = stuname;
    }
    public String getMajor() {
        return major;
    }
    public void setMajor(String major) {
        this.major = major;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

4.在resources包中首先創建數據庫配置文件jdbcConfig.properties,再創建sql映射文件sqlMapConfig.xml。
①:jdbcConfig.properties代碼如下

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456

②:sqlMapConfig.xml代碼如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.ory//DTD Config 3.0//EN"
        "htpp://mybatis.org/dtd/mybatis-3-config.dtd">
<!--mybatis的主配置文件-->
<configuration>
    <!--配置properties可以在標籤內部配置連接數據庫的信息,也可以通過屬性引用外部配置信息文件
    resource屬性:用於 指定配置文件的位置,是按照類路徑得分寫法來寫,並且必須存在與類路徑下 -->
    <properties resource="jdbcConfig.properties">
    </properties>
    <!--使用typeAliases配置別名,它只能配置domain中類的別名-->
    <typeAliases>
        <!--用於指定要配置的別名的包,當指定智鬥,該包下的實體類都會註冊別名,並且類名就是別名,不再區分大小寫-->
        <package name="com.lut.domain"></package>
    </typeAliases>
    <!--配置環境-->
    <environments default="mysql">
        <!--配置mysql的環境-->
        <environment id="mysql">
            <!--配置事務的類型-->
            <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>

    <!--指定映射配置文件的位置,映射配置文件指的是每個dao獨立的配置文件-->
    <mappers>
        <!--package標籤用戶指定dao接口所在的包,當指定完成之後,就不需要再寫mapper以及resource或者class-->
        <package name="com.lut.dao"></package>
    </mappers>
</configuration>

二.dao編寫及映射文件的創建

1.在src->main->java下新建java文件命名爲:com.lut.dao.IStudentDao
代碼如下:

package com.lut.dao;
import com.lut.domain.Student;
import java.util.List;
public interface IStudentDao {
    //查詢表中所有學生
     List<Student> findAll();
     //添加學生信息
    void saveStudent(Student student);
    //更新學生信息
    void updateStudent(Student student);
    //根據id刪除學生信息
    void deleteStudent(Integer id);
}

2.在resources包中新建directory爲com,然後在com包下新建directory爲lut,然後在lut包下新建directory爲dao,並在dao包下新建file爲IStudentDao.xml。(注意此映射文件是IStudentDao的映射,故包的結構需要和其對應的dao對應相同)。
IStudentDao.xml的代碼如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.ory//DTD Mapper 3.0//EN"
        "htpp://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lut.dao.IStudentDao">
  <!--查詢所有信息-->
    <select id="findAll" resultType="student">
        select * from student
    </select>
    <!--保存學生信息-->
    <insert id="saveStudent">
        insert into student(stuname,major,sex,age)values(#{stuname},#{major},#{sex},#{age})
        <!--插入操作之後獲取插入數據id-->
        <selectKey keyProperty="id" order="AFTER" resultType="int">
            select last_insert_id();
        </selectKey>
    </insert>
    <update id="updateStudent" parameterType="student">
        update student set stuname=#{stuname},major=#{major},sex=#{sex},age=#{age} where id=#{id}
    </update>
    <delete id="deleteStudent" parameterType="int">
        delete from student where id=#{id}
    </delete>
</mapper>

3.最後在test包下的java中新建java爲com.lut.test.studentTest的Test類
studentTest.java爲:

package com.lut.test;

import com.lut.dao.IStudentDao;
import com.lut.domain.Student;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;

import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.junit.Test;

/**
 * @author Roy
 * @date 2020/6/23 16:30
 */
public class studentTest {
    public InputStream in;
    private SqlSession sqlSession;
    private IStudentDao studentDao;
    @Before//測試方法之前執行
    public void init() throws Exception{
        //讀取配置文件
        in= Resources.getResourceAsStream("sqlMapConfig.xml");
        //創建SQL SessionFactory工廠
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
        //使用工廠生產SQL Session對象
        sqlSession=factory.openSession(true);
        //使用sqlSession對象創建Dao接口的代理對象
        studentDao=sqlSession.getMapper(IStudentDao.class);
    }
    @After//測試方法之後執行
    public void destroy() throws Exception{
        //釋放佔用的資源
        sqlSession.close();
        in.close();
    }
    //測試查詢方法
    @Test
    public void testFindAll(){
        List<Student> students=studentDao.findAll();
        for(Student student:students){
            System.out.println("學生信息爲:");
            System.out.println(student);
        }
    }
    //測試保存方法
    @Test
    public void testSaveStudent(){
        Student student=new Student();
        student.setStuname("July");
        student.setMajor("English");
        student.setSex("F");
        student.setAge(22);
        System.out.println("保存之前的student爲:"+student);
        studentDao.saveStudent(student);
        System.out.println("保存之後的student爲:"+student);
    }
    //測試更新方法
    @Test
    public void testUpdateStudent(){
        Student stu=new Student();
        stu.setId(1);
        stu.setStuname("roy");
        stu.setMajor("ICS");
        stu.setSex("M");
        stu.setAge(24);
        studentDao.updateStudent(stu);
    }
    //測試刪除方法
    @Test
    public void testDeleteStudent(){
        studentDao.deleteStudent(2);
    }
}

至此基於mybatis的增刪改查簡單功能就完成了。
其中建好的包結構如下圖所示:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章