mybatis简单入门

mybatis框架

介绍

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

使用步骤

1.创建maven项目,并在pom.xml中导入mybatis依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>mybatis-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
         <!--Mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>
        <!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory><!--资源所在目录-->
                <includes><!--指定要扫描的所在目录下的文件类型。此处表示所在目录下的properties和xml文件都会被扫描到-->
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

</project>

2.创建数据库表

create table tb_student(
	id int auto_increment comment '学生唯一标识',
	stu_name varchar(50) not null comment '学生名字',
	stu_sex int null comment '学生性别,1:男;2:女',
	stu_class int null comment '学生所在班级编号',
	stu_home varchar(255) null comment '学生家庭住址',
	constraint tb_student_pk
		primary key (id)
)ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci comment '学生表';

CREATE TABLE `tb_class` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '编辑编号',
  `cl_name` varchar(50) NOT NULL COMMENT '班级名称',
  `cl_num` int NOT NULL COMMENT '班级人数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='班级表'

create table tb_teacher(
	id int auto_increment comment '教师编号',
	te_name varchar(50) not null comment '教师名称',
	te_age int not null comment '教师年龄'
	constraint tb_teacher_pk
		primary key (id)
)comment '教师表';

3.创建实体类,TbStudent,TbTeacher,TbClass

package com.lm.entity;
public class TbClass {
    private Integer id;
    private String clName;
    private String clNum;
    public Integer getId() {return id;}
    public void setId(Integer id) {this.id = id;}
    public String getClName() {return clName;}
    public void setClName(String clName) {this.clName = clName;}
    public String getClNum() {return clNum;}
    public void setClNum(String clNum) {this.clNum = clNum;}
}
package com.lm.entity;
public class TbStudent{
    private Integer id;
    private String  stuName;
    private Integer stuSex;
    private String stuClass;
    public Integer getId() {return id;}
    public void setId(Integer id) {this.id = id;}
    public String getStuName() {return stuName;}
    public void setStuName(String stuName) {this.stuName = stuName;}
    public Integer getStuSex() {return stuSex;}
    public void setStuSex(Integer stuSex) {this.stuSex = stuSex;}
    public String getStuClass() {return stuClass;}
    public void setStuClass(String stuClass) {this.stuClass = stuClass;}
}

package com.lm.entity;
public class TbTeacher {
    private Integer id;
    private String teName;
    private Integer teAge;
    public Integer getId() {return id;}
    public void setId(Integer id) {this.id = id;}
    public String getTeName() {return teName;}
    public void setTeName(String teName) {this.teName = teName;}
    public Integer getTeAge() {return teAge;}
    public void setTeAge(Integer teAge) {this.teAge = teAge;}
}


4.创建持久层的dao接口,定义操作数据库的方法

package com.lm.dao;

import com.lm.entity.TbStudent;

import java.util.List;

public interface TbStudentDao {
    /**
     * 获取所有学生信息
     * @return
     */
    List <TbStudent> getAllStudents();

}

5.创建一个mybatis使用的映射文件(用来写sql的xml文件)

注意:该xml目录默认需要创建在与dao接口同目录下,且名称与dao接口保持一致

TbStudentDao.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!--
    1.指定约束文件
        mybatis-3-mapper.dtd是约束文件的名称,扩展名是dtd
    2.约束文件的作用:限制,检查在当前文件中出现的标签,属性必须符合mybatis的要求,即指定的约束文件,标签就不能乱写
-->
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--
    3.mapper:当前文件的跟标签,必须存在
        namespace:命名空间,表示当前文件在整个项目中的唯一标识。可以是自定义的字符串,不过一般是dao接口的全限定名称
-->
<mapper namespace="com.lm.dao.TbStudentDao">
    <!--
        4.在当前文件中,可以使用特定的标签,表示数据库的特定操作
            <select>:表示查询操作
            <update>:表示更新数据库操作
            <insert>:表示插入操作
            <delete>:表示删除操作
    -->
    <!--
        select :查询
            id:要执行的sql语法的唯一标识,mybatis会使用这个id值来找到要执行的sql语句,可以自定义,要求使用接口中的方法名称
            resultType:表示结果类型,是sql语句执行后得到resultSet,遍历这个ResultSet得到指定的java对象类型
    -->
    <select id="getAllStudents" resultType="com.lm.entity.TbStudent">
        select id,stu_name,stu_sex,stu_class,stu_home from tb_student
    </select>
    
    <resultMap id="ResultMap" type="com.lm.entity.TbStudent">
        <!--
            column:查询结果集中返回字段的字段名
            property:对应实体类中的属性名;
            可以理解为将结果集中的一个column字段映射到实体类中的一个属性中
        -->
        <id column="sid" property="id"></id>
        <result column="stuName" property="stuName"></result>
        <result column="stuHome" property="stuHome"></result>
        <result column="stuSex" property="stuSex"></result>
        <association property="tbClass" javaType="com.lm.entity.TbClass">
            <id property="id" column="cid"></id>
            <result column="clName" property="clName"></result>
            <result column="clNum" property="clNum" ></result>
        </association>
    </resultMap>


    <select id="getStudentById" resultMap="ResultMap">
        select  ts.id as 'sid',ts.stu_name as 'stuName',ts.stu_home as 'stuHome',ts.stu_sex as 'stuSex',tc.id as 'cid',tc.cl_name as 'clName',tc.cl_num as 'clNum' from tb_student ts,tb_class tc where ts.stu_class=tc.id and ts.id = #{id}
    </select>

    <!--
        插入操作
    -->
    <insert id="insertStudent" parameterType="com.lm.entity.TbStudent">
        insert into tb_student(id,stu_name,stu_sex,stu_class,stu_home)
        values(#{id},#{stuName},#{stuSex},#{stuClass},#{stuHome})
    </insert>
</mapper>

6.在resource目录下创建mybatis的主配置文件,一个项目对应一个主配置文件

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!--
    mybatis主配置文件:主要定义了数据库的配置信息,如sql映射文件的位置、数据库环境等
    mybatis-3-config.dtd:mybatis配置文件的约束名称
-->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--
configuration:跟标签,表示配置信息
-->
<configuration>
    
    <settings>
        <!--开启驼峰匹配原则-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!--
        环境配置:数据库连接信息
            default:必须和environment中的某个id值一样,表示当前正在使用的环境
    -->
    <environments default="development">
        <!--
            environment:一个数据库信息的配置,可以有多个
                id:一个表示环境的唯一值
        -->
        <!--开发环境-->
        <environment id="development">
            <!--
                transactionManager:mybatis事务类型
                    type:表示事务处理类型
                        JDBC:表示使用Connection对象的commit,rollback来做事务处理
            -->
            <transactionManager type="JDBC"/>
            <!--
                dataSource:表示数据源,用来连接数据库
                    type:表示数据源的类型
                        POOLED:表示使用连接池
            -->
            <dataSource type="POOLED">
                <!--
                    driver,user,username,password是固定的,不能自定义
                    driver:表示数据库举动
                    url:表示连接数据库的具体地址
                    username:表示连接数据库的用户名
                    password:表示连接数据库的密码
                -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/vuedemo?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="1234576"/>
            </dataSource>
        </environment>
        <!--显示环境-->
        <environment id="online">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3360/onlineDb?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="1234576"/>
            </dataSource>
        </environment>
    </environments>

    <!--
        mappers:用来指定sql映射文件的位置
    -->
    <mappers>
        <!--一个mapper标签指定一个文件的位置,可以有多个,从类路径开始的信息(编译后target/calsses(类路径))-->
        <mapper resource="com/lm/dao/TbStudentDao.xml"/>
<!--        <mapper resource="com/lm/dao/TbTeacherDao.xml"></mapper>-->
    </mappers>
</configuration>

7.创建测试类

package com.lm.test;
import com.lm.entity.TbStudent;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class Demo {
    /**
     * 测试类
     * 访问mybatis并读取student数据
     * @param args
     */
    public static void main(String[] args) throws IOException {
        //1.定义mybatis主配置文件的名称,从类路径的根开始
        String config = "mybatis-config.xml";
        //2.读取配置文件
        InputStream stream = Resources.getResourceAsStream(config);
        //3.创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //4.创建SqlSessionFactory对象
        SqlSessionFactory factory = builder.build(stream);
        //5.获取SqlSession对象,从SqlSessionFactory对象中获取
        SqlSession sqlSession = factory.openSession();
        //6.指定要执行的sql语句表示。sql映射文件中namespace+"."+标签id值
        String sqlId = "com.lm.dao.TbStudentDao.getAllStudents";
        //7.执行sql语句,通过sqlId找到语句
        List<TbStudent> students = sqlSession.selectList(sqlId);
        //8.打印结果集
        students.forEach(stu -> System.out.println(stu));
		//9.关闭sqlSession对象
        sqlSession.close();
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值