• 三、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的使用
  • 相关阅读:
    电路中的VCC和VDD
    动态数码管 什么是位选 段选
    pytest文档62-内置fixture之request
    pytest文档61-fixture之name参数使用别名
    pytest文档60-pytest.main()的使用
    python笔记49-yaml文件中变量的使用(锚点& 与 引用*)
    python笔记48-面试题:m1={'a':1,'b':2,'c':1} 将同样的value的key集合在list里,输出{1:['a','c'],2:['b']}
    jenkins学习15-Allure报告不用登陆也能给领导看
    python接口自动化35-pyppeteer-install下载没反应,r.html.render() 下载无反应问题解决
    kvm内存优化--KSM
  • 原文地址:https://www.cnblogs.com/arrows/p/10368470.html
Copyright © 2020-2023  润新知