三、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();
}
创建Dao层接口

对应的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>
对应的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”></transactionManger>
        <!--配置数据库的连接数据源
        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>
MyBatis的配置文件

数据库配置文件dbconfig.properties:

driverclass=com.mysql.jdbc.Driver
dburl=jdbc:mysql://localhost:3306/db_m1?characterEncoding=utf-8
dbuser=lx
dbpass=lx
数据库配置文件dbconfig.properties

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=Resource.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());
}
}
}
演示MyBatis的使用
原文地址:https://www.cnblogs.com/arrows/p/10368470.html