MyBatis教程之一基本使用入门

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录—-摘自官网说明
MyBatis也是ORM框架的实现,跟Hibernate一样,都是持久层的框架,只是MyBatis涉及到的SQL都需要自己写。

1、创建数据库和表

create database db_m1;
use db_m1;
create table tb_stu(id int auto_increment primary key,name varchar(10),age int);

2、创建数据库表对应的类

//代表的是tb_stu表
public class Student {

    private int id;
    private String name;
    private int age;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

3、创建Dao层接口和对应的Mapper文件

接口:


public interface StudentDao {

    //保存学生对象
    void save(Student stu);
    //修改
    int update(Student stu);
    //删除
    int delete(Student stu);
    //查询
    List<Student> query();
}

对应的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">
<!--设置映射配置:接口的配置
内部就是写出接口中抽象方法所需的SQL语句
 namespace:对应接口的全称 -->
<mapper namespace="cn.code404.dao.StudentDao">
<!--什么样的SQL就用什么样的标签  -->
<!--insert:实现插入语句的编写
常用属性:
id:就是对应的方法名称
parameterType:形式参数的类型
  -->
    <!--1、新增数据  -->
    <insert id="save" parameterType="Student" keyProperty="id">
    <!--获取自增主键的值方式二  -->
    <!-- <selectKey keyProperty="id">
    select LAST_INSERT_ID()
    </selectKey> -->
    insert into tb_stu(name,age) values(#{name},#{age})
    </insert>
    <!--2、修改数据  -->
    <update id="update" parameterType="Student">
    update tb_stu set name=#{name},age=#{age} where id=#{id}
    </update>
    <!--3、删除数据  -->
    <delete id="delete" parameterType="Student">
    delete from tb_stu where id=#{id}
    </delete>
    <!--4、查询数据 -->
    <select id="query" resultType="Student">
    select * from tb_stu
    </select>
</mapper>

4、MyBatis的配置文件

该配置文件存储在src下,也就是类路径下

<?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="dbconfig.properties"/>
<!--全局设置  -->
<settings>
 <setting name="useGeneratedKeys" value="true"/> 
</settings>
<!--别名,主要是为mapper文件中的参数的类型写上简称  -->
   <typeAliases>
        <!--为单个的类写别名  -->
        <!-- <typeAlias alias="Student" type="org.qf.domain.Student"/> -->
        <!--为整个包设置,这样的话mapper文件使用改包的类就可以直接使用无需包名  -->
        <package name="cn.code404.domain"/>
    </typeAliases>
    <!--数据库的环境设置
     default使用哪个配置-->
    <environments default="test">
    <!--配置信息,id唯一标记  -->
        <environment id="test">
        <!--配置事物管理
        type:类型
        取值说明:
        1、JDBC:直接使用JDBC的事物模块,设置connection开启事物,根据情况进行回滚或提交
        2、MANAGED:这个值标记本身什么都不做,不会提交或回滚事物,但是可以使用容器来管理事物
        默认会关闭连接,closeConnection设置为false  -->
            <transactionManager type="MANAGED"></transactionManager>
            <!--配置数据库的连接数据源
            type:类型
            取值说明:
            1、UNPOOLED:不使用数据库连接池
            2、POOLED:使用数据库连接池 -->
            <dataSource type="UNPOOLED">
                <property name="driver" value="${driverclass}"/>
                <property name="url" value="${dburl}"/>
                <property name="username" value="${dbuser}"/>
                <property name="password" value="${dbpass}"/>
            </dataSource>
        </environment>
    </environments>
    <!--映射文件,就是需要MyBatis管理的接口实现类对应的映射文件  -->
    <mappers>
        <!--基于xml的实现  -->
       <mapper resource="cn/code404/dao/StudentDaoMapper.xml"/>
       <!-- 基于注解的实现 -->
      <!--  <mapper class=""/> -->
      <!--标记指定的包  -->
      <!-- <package name="cn.code404.dao"/> -->
    </mappers>
</configuration>

数据库的配置文件dbconfig.properties

driverclass=com.mysql.jdbc.Driver
dburl=jdbc:mysql://localhost:3306/db_m1?characterEncoding=utf-8
dbuser=lx
dbpass=lx

5、测试

测试类:


//演示MyBatis的使用
public class MyTest1 {

    // 基本使用,新增数据
    @Test
    public void test1() throws IOException {
        // 使用步骤
        // 1、使用流加载配置文件
        InputStream iStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 2、创建工厂对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(iStream);
        // 3、创建会话对象
        SqlSession session = factory.openSession();
        // 4、获取接口的实现类对象
        StudentDao dao = session.getMapper(StudentDao.class);
        // 5、调用接口中方法实现数据的操作
        Student student = new Student();
        student.setAge(20);
        student.setName("李四");
        dao.save(student);
        // 6、提交
        session.commit();
        System.out.println(student.getId());
        // 7、关闭
        session.close();
        iStream.close();

    }

    // 修改和删除
    @Test
    public void test2() throws IOException {
        // 加载配置
        InputStream iStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 创建工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(iStream);
        // 创建Session
        SqlSession session = factory.openSession();
        // 获取接口实现类
        StudentDao dao = session.getMapper(StudentDao.class);
        // 修改
        Student stu1 = new Student();
        stu1.setAge(16);
        stu1.setName("西施");
        stu1.setId(5);
        System.out.println("修改:" + dao.update(stu1));

        // 删除
        Student stu2 = new Student();
        stu2.setId(2);
        System.out.println("删除:" + dao.delete(stu2));
        // 提交
        session.commit();
        // 关闭
        session.close();
        // 释放
        iStream.close();

    }

    // 查询
    @Test
    public void test3() throws IOException {
        // 加载配置
        InputStream iStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 创建工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(iStream);
        // 创建Session
        SqlSession session = factory.openSession();
        // 获取接口实现类
        StudentDao dao = session.getMapper(StudentDao.class);
        System.out.println(dao.getClass().getName());
        List<Student> list=dao.query();
        for(Student s:list){
            System.out.println(s.getId());
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值