Mybatis入门学习(实现简单的增删改查)

Mybatis学习

Mybatis简介

  • MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
  • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
  • MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO 为数据库中的记录。

什么是持久层

  • 完成持久化工作的代码块
  • 持久化数据就是对数据的存储,也就是使用数据库保存数据

为什么使用Mybits

  • 方便快捷
  • 用来替代JDBC从而更加方便的对数据库进行操作

Mybatis使用

Mybatis配置准备

1、Maven导包

一共需要三个依赖库 junit mybatis mysql

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>

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

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-mxj-db-files</artifactId>
        <version>5.0.12</version>
    </dependency>
</dependencies>

2、从xml配置数据库的连接

resourcse文件中新建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><!--核心配置-->
    <environments default="development"><!--环境-->
        <environment id="development"><!--子环境 工作空间-->
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/><!--数据库驱动配置-->
                <property name="url" value="jdbc:mysql://localhost:3306/41905037?useUnicode=true&amp;characterEncoding=UTF-8"/><!--数据库连接地址-->
                <property name="username" value="root"/><!--用户名-->
                <property name="password" value="123456"/><!--密码-->
            </dataSource>
        </environment>
    </environments>
</configuration>

3、构建 SqlSessionFactory

使用封装的形式构建SqlSessionFactory工厂

1、java文件中新建until包

2、until包下新建MybatisUntils.class文件

3、添加一下代码

public class MybatisUtils {
private  static SqlSessionFactory sqlSessionFactory ;

    //构建SqlSessionFactory 工厂
    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
             sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

4、从工厂中获取获得 SqlSession 的实例

//从工厂中获得SqlSession实例
//SqlSession包含了面向数据库执行 SQL 命令所需的所有方法
public static SqlSession getSqlSession(){
    return sqlSessionFactory.openSession();
}

实现数据库表的操作

1、实体类

​ 对数据库中的表进行实体化封装

2、接口类

​ 编写对表操作的方法

3、接口实现类

​ 实现以上的方法(Mybatis使用xml文件进行实现)

1、实体类

实体类

  1. 表中属性私有化
  2. 各个属性得getset方法重写
  3. 重写传参方法,toString方法
package com.ben.pojo;
//类名就是对应表的名字
//属性为表中的字段名
public class S1 {
    private String sno;
    private String sn;
    private String sex;
    private int age;
    private String school;

    @Override
    public String toString() {
        return "S1{" +
                "sno='" + sno + '\'' +
                ", sn='" + sn + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                ", school='" + school + '\'' +
                '}';
    }

    public S1() {
    }

    public S1(String sno, String sn, String sex, int age, String school) {
        this.sno = sno;
        this.sn = sn;
        this.sex = sex;
        this.age = age;
        this.school = school;
    }

    public String getSno() {
        return sno;
    }

    public void setSno(String sno) {
        this.sno = sno;
    }

    public String getSn() {
        return sn;
    }

    public void setSn(String sn) {
        this.sn = sn;
    }

    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;
    }

    public String getSchool() {
        return school;
    }

    public void setSchool(String school) {
        this.school = school;
    }
}
2、接口类
package com.ben.dao;

import com.ben.pojo.S1;

import java.util.List;
//接口中编写对表操作的方法
public interface S1Dao {
     List<S1> getS1List();
}
3、实现接口(xml文件)

需要注意的地方

  • namespace 代表了接口类的地址
  • id 代表了接口类中的对应方法名
  • resultType 代表了返回类型 使用对应表的实体类地址
<?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.ben.dao.S1Dao">
    <select id="getS1List" resultType="com.ben.pojo.S1">
        select * from S1 
    </select>
</mapper>
4、mybatis-config.xml配置文件中注册实现接口的mapper.xml文件
<mappers>
        <mapper resource="com/ben/dao/S1Mapper.xml"/>
</mappers>
测试类

1、获取SqlSession对象

2、获取mapper对象

@Test
public void test(){
    //获取
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    S1Dao mapper = sqlSession.getMapper(S1Dao.class);

    List<S1> s1List = mapper.getS1List();
    for (S1 s1 : s1List){
        System.out.println(s1.getSchool()+"\t");
    }

    sqlSession.close();
}
小结
  1. SqlSessionFactoryBuilder
  2. SqlSessionFactor
  3. SqlSession

增删改查

重点

//增删改操作必须提交事务!
sqlSession.commit();
//使用sqlSession需要关闭
sqlSession.close();
接口文件
public interface S1Mapper {
     //获取表全部内容
     List<S1> getS1List();
     //根据id查找
     S1 getS1ById(String sno);
     //插入语句
     int addS1(S1 s1);
     //修改语句
     int updateS1(S1 s1);
     //删除用户
     int deleteS1(String sno);
}
Mapper.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.ben.dao.S1Mapper">
    <select id="getS1List" resultType="com.ben.pojo.S1">
        select * from s1
    </select>

    <select id="getS1ById" resultType="com.ben.pojo.S1" parameterType="String">
        select * from s1 where sno = #{sno}
    </select>

    <insert id="addS1" parameterType="com.ben.pojo.S1">
        insert  into s1(sno,sn,sex,age,school) values(#{sno},#{sn},#{sex},#{age},#{school
        })
    </insert>

    <update id="updateS1" parameterType="com.ben.pojo.S1">
        update s1
        set sn=#{sn},sex=#{sex},age=#{age},school=#{school}
        where sno = #{sno};
    </update>

    <delete id="deleteS1" parameterType="com.ben.pojo.S1">
        delete from s1 where sno = #{sno}
    </delete>

</mapper>
测试文件
public class S1DaoTest {
    @Test
    public void test(){
        //获取
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        S1Mapper mapper = sqlSession.getMapper(S1Mapper.class);

        List<S1> s1List = mapper.getS1List();
        for (S1 s1 : s1List){
            System.out.println(s1);
        }

        sqlSession.close();
    }

    @Test
    public void getS1BySno(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        S1Mapper mapper = sqlSession.getMapper(S1Mapper.class);

        S1 s1 =  mapper.getS1ById("s2");
        System.out.println(s1);

        sqlSession.close();
    }

    @Test
    public void addS1(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        S1Mapper mapper = sqlSession.getMapper(S1Mapper.class);

        int res = mapper.addS1(new S1("s4", "小王", "男", 30, "智能科技"));
        if (res > 0){
            System.out.println("插入成功!");
        }

        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void updateS1(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        S1Mapper mapper = sqlSession.getMapper(S1Mapper.class);

        int res = mapper.updateS1(new S1("s4", "修改", "女", 50, "护屋"));
        if (res>0){
            System.out.println("修改成功!");
        }
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void deleteS1(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        S1Mapper mapper = sqlSession.getMapper(S1Mapper.class);

        int res = mapper.deleteS1("s4");
        if (res>0){
            System.out.println("删除成功!");
        }
        sqlSession.commit();
        sqlSession.close();
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值