Mybatis入门操作(增删改查操作)

MyBatis

MyBatis是一种Java持久化框架,它可以将SQL查询和结果映射到Java对象中,从而实现Java对象与关系型数据库的映射。使用MyBatis可以避免手写JDBC代码,简化数据访问层的开发。

MyBatis最初是由Apache软件基金会下的iBATIS项目发展而来的。后来,iBATIS更名为MyBatis,并于2010年成为一个独立的开源项目,现在由MyBatis团队维护和开发。

MyBatis提供了许多高级特性,包括动态SQL,缓存机制,延迟加载等等。它也支持多种数据源,包括关系型数据库和NoSQL数据库等。 MyBatis被广泛应用于Java项目中,是Java持久化框架中的一员,并被认为是一个简单易用的ORM框架。

使用MyBatis框架的主要原因:

简化开发:MyBatis可以大大简化数据访问层(DAO)的开发,避免了手写JDBC代码的繁琐,同时也减少了出错的可能性。

灵活性:MyBatis提供了许多高级特性,包括动态SQL、缓存机制、延迟加载等等。它允许开发人员根据具体的需求进行自定义配置,从而使得开发过程更加灵活。

易于维护:MyBatis的数据访问层代码通常比较简洁明了,易于阅读和维护。同时,MyBatis也提供了一些工具来简化开发、调试和测试的过程,如MyBatis Generator等。

性能优越:MyBatis的SQL语句是预编译的,可以提高数据库的执行效率。同时,MyBatis也支持缓存机制,可以避免频繁的数据库访问,提高应用程序的性能。

多数据源支持:MyBatis支持多种数据源,包括关系型数据库和NoSQL数据库等。这使得开发人员可以更加方便地切换不同的数据源,同时也降低了应用程序的耦合性。

MyBatis入门案例:

创建数据库:

use mydb;

create table emp
(
eid int primary key AUTO_INCREMENT, 
ename varchar(20), 
dept varchar(20),
job varchar(20),
sal double,
phone varchar(11),
address varchar(100)
);

insert into emp(ename,dept,job,sal,phone,address) values('张翠萍','测试部','测试工程
师',5800,'15821563548','郑州');
insert into emp(ename,dept,job,sal,phone,address) values('李耀菲','测试部','测试经
理',9800,'13658942168','许昌');
insert into emp(ename,dept,job,sal,phone,address) values('王长林','研发部','开发工程
师',8800,'13954865721','南阳');
insert into emp(ename,dept,job,sal,phone,address) values('陈清泰','研发部','开发经
理',14900,'13785463249','洛阳');
insert into emp(ename,dept,job,sal,phone,address) values('赵德保','运维部','运维工程
师',5200,'15785642139','信阳');
insert into emp(ename,dept,job,sal,phone,address) values('刘瑞琳','运维部','产品经
理',12600,'17956248563','商丘');

select * from emp;

运行结果:

使用IDEA创建一个项目,大概部署成这样:

具体部署如图所示:

接下来写代码: 

先写实体类,代码如下:

package com.du.bean;

public class Emp {

    private Integer eid;
    private String ename;
    private String dept;
    private String job;
    private Double sal;
    private String phone;
    private String address;

    public Integer getEid() {
        return eid;
    }

    public void setEid(Integer eid) {
        this.eid = eid;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getDept() {
        return dept;
    }

    public void setDept(String dept) {
        this.dept = dept;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public Double getSal() {
        return sal;
    }

    public void setSal(Double sal) {
        this.sal = sal;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "eid=" + eid +
                ", ename='" + ename + '\'' +
                ", dept='" + dept + '\'' +
                ", job='" + job + '\'' +
                ", sal=" + sal +
                ", phone='" + phone + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

再写接口,代码如下:

package com.du.dao;

import com.du.bean.Emp;

import java.util.List;

public interface EmpDao {

    List<Emp> selectAll();

    Emp selectByid(int eid);

    List<Emp> seach(String keyword);

    int addEmp(Emp emp);

    int delEmp(int eid);

    int updEmp(Emp emp);
}

在和接口同一个包里创建mapper文件,代码如下:

<?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接口-->
<mapper namespace="com.du.dao.EmpDao">
    <!--通过select标签进行查询
    id:映射接口的方法名
    parameterType:指定参数的类型(如果是集合类型只需要指定集合元素的类型即可)
    resultType:指定返回值的类型
    -->
    <select id="selectAll" resultType="com.du.bean.Emp">
        select * from emp;
    </select>

    <select id="selectByid" parameterType="int" resultType="com.du.bean.Emp">
        select * from emp where eid = #{eid}
    </select>

    <select id="seach" parameterType="String" resultType="com.du.bean.Emp">
        select * from emp where ename like concat('%',#{keyword},'%')
    </select>

    <insert id="addEmp" parameterType="com.du.bean.Emp">
        insert into emp(ename,dept,job,sal,phone,address) values(#{ename},#{dept},#{job},#{sal},#{phone},#{address});
    </insert>

    <delete id="delEmp" parameterType="int">
        delete from emp where eid = #{eid}
    </delete>

    <update id="updEmp" parameterType="com.du.bean.Emp">
        update emp set ename = #{ename},dept = #{dept},job = #{job},sal = #{sal},phone = #{phone},address = #{address} where eid = #{eid}
    </update>
</mapper>

然后配置核心文件,代码如下:

<?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>
    <!--配置环境信息===就是配置连接数据库的参数
    default:指定配置的环境信息的id,表示默认连接该环境
    -->
    <environments default="mysql">
        <environment id="mysql">
            <!--配置事务的处理方式:模式使用JDBC的事务处理-->
            <transactionManager type="jdbc"></transactionManager>
            <!--数据源的默认type设置为pooled,表示使用连接池-->
            <dataSource type="pooled">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
        <environment id="oracle">
            <transactionManager type=""></transactionManager>
            <dataSource type=""></dataSource>
        </environment>
    </environments>
    <!--加载mapper配置文件-->
    <mappers>
        <mapper class="com.du.dao.EmpDao" />
    </mappers>
</configuration>

最后测试一下,代码如下:

package com.du.test;

import com.du.bean.Emp;
import com.du.dao.EmpDao;
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.After;
import org.junit.Before;
import org.junit.Test;

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

public class EmpTest {

    InputStream stream = null;
    SqlSessionFactoryBuilder builder = null;
    SqlSessionFactory factory= null;
    SqlSession sqlSession= null;
    EmpDao empDao = null;

    @Before
    public void init() throws IOException {

        System.out.println("Before");
        //1.加载核心配置文件的字节输入流
        stream = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建SqlSessionFactory的构建对象--框架使用的是构建者模式
        builder=new SqlSessionFactoryBuilder();
        //3.通过构建对象加载配置文件的输入流获取SqlSessionFactory
        factory=builder.build(stream);
        //4.通过工厂对象获取SqlSession对象----执行JDBC操作的
        sqlSession=factory.openSession();
        //5.通过SqlSession对象获取接口对应的代理对象
        empDao=sqlSession.getMapper(EmpDao.class);
    }

    @Test
    public void testSelectAll() {

        //6.通过代理对象执行查询方法
        List<Emp> empList = empDao.selectAll();
        //7.遍历集合
        for (Emp emp : empList) {
            System.out.println(emp);
        }
    }

    @Test
    public void testSelectByid() {

        Emp emp = empDao.selectByid(1);
        System.out.println(emp);
    }

    @Test
    public void testSeach() {

        //6.通过代理对象执行查询方法
        List<Emp> empList = empDao.seach("七");
        //7.遍历集合
        for (Emp emp : empList) {
            System.out.println(emp);
        }
    }

    @Test
    public void testAdd() {

        Emp emp = new Emp();
        emp.setEname("柳七");
        emp.setDept("研发部");
        emp.setJob("开发工程师");
        emp.setSal(9200.0);
        emp.setPhone("12346535475");
        emp.setAddress("徐州");

        int n = empDao.addEmp(emp);
        if (n>0){
            System.out.println("add success");
        }
    }

    @Test
    public void testDelete(){

        int n = empDao.delEmp(4);
        if (n>0){
            System.out.println("delete success");
        }
    }

    @Test
    public void testUpdate(){

        Emp oldEmp = empDao.selectByid(6);
        System.out.println("修改前"+oldEmp);
        oldEmp.setEname("刘瑞林");
        oldEmp.setAddress("徽州");

        empDao.updEmp(oldEmp);
        Emp newemp = empDao.selectByid(6);
        System.out.println("修改后"+newemp);
    }

    @After
    public void distroy() throws IOException {

        System.out.println("After");
        //资源的释放
        sqlSession.commit();
        stream.close();
        sqlSession.close();

    }
}

运行效果如图所示:

全查(已运行过,所以“eid为4”已删除)

 根据id查询

 模糊查询

 添加

 删除

 修改

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值