MyBatis教程之一基本使用入门

来源:互联网 发布:linux线程退出函数 编辑:程序博客网 时间:2024/06/01 09:03

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.Driverdburl=jdbc:mysql://localhost:3306/db_m1?characterEncoding=utf-8dbuser=lxdbpass=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());        }    }}