Mybatis 概览,快速上手使用

本文详细介绍MyBatis框架的入门教程,包括配置文件编写、环境搭建、实体类设计、全局配置、Mapper映射文件使用及SqlSession操作,通过实例演示如何进行CRUD操作。

Mybatis 入门

流程

  1. 编写配置文件(全局配置文件)创建一个SqlSessionFactory对象,其中包括数据源等相关运行环境信息
  2. sql映射文件:配置了每一个sql,以及查询结果的封装规则。
  3. 将sql映射文件注册在全局配置文件中
  4. 获取sqlSessionFactory,使用sqlSession工厂获取sqlSession对象由他来执行CRUD;一个sqlSession代表一次会话,用完关闭当前会话避免造成资源浪费。

 

环境

  • mysql
  • mybatis.jar
  • mybatis-connector.jar

lib 方式:下载 mybatis、mybatis-connector jar 包引入 lib 即可;

maven 方式:在 pom.xml 加入一下配置

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.6</version>
</dependency>

实体代码:

package test;

import java.util.Date;

public class UserEntity {
    private Long userId;
    private String userName;
    private String passWord;
    private String email;
    private String mobile;
    private char status;
    private Long createUserId;
    private Date createTime;
    private Long deptId;

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public String getEmial() {
        return email;
    }

    public void setEmial(String email) {
        this.email = email;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public char getStatus() {
        return status;
    }

    public void setStatus(char status) {
        this.status = status;
    }

    public Long getCreateUserId() {
        return createUserId;
    }

    public void setCreateUserId(Long createUserId) {
        this.createUserId = createUserId;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Long getDeptId() {
        return deptId;
    }

    public void setDeptId(Long deptId) {
        this.deptId = deptId;
    }

    @Override
    public String toString() {
        return "userId: "+ getUserId()
                +"| userName: "+ getUserName()
                +"| password: "+ getPassWord()
                +"| email: "+ getEmial()
                +"| mobile: "+ getMobile()
                +"| status: "+ getStatus()
                +"| createUserId: "+ getCreateUserId()
                +"| createTime: "+ getCreateTime()
                +"| deptId: "+ getDeptId();
    }
}

Mybatis 全局配置文件:

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/gouma"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/ActivityMapper.xml"></mapper>
    </mappers>
</configuration>

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">
<!--
    namespace:名称空间
    id:唯一标识
    resultType:返回类型
    #{}:从传递的参数中取出 id 值,对应查询时传入参数
    注意:
        这里查询使用了别名,原因是在数据库字段与实体字段不匹配导致这些字段最后没有值;所以这里是使用别名的方式保持与实体属性名一样。
 -->
<mapper namespace="mapper.ActivityMapper.xml">
    <select id="selectUser" parameterType="java.lang.Long" resultType="test.UserEntity">
    select user_id as userId,username,password,email,mobile,status,create_user_id as createUserId,create_time as createTime,dept_id as deptId from sys_user where user_id = #{userId}
  </select>
</mapper>

SqlSession 测试类:

package test;

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;

public class ConnectTest {
    String resource = "conf/mybatis-config.xml";
    public SqlSessionFactory sqlIniting() throws IOException {
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        return  sqlSessionFactory;
    }

    public static void main(String[] args) throws IOException {
        ConnectTest connect = new ConnectTest();
        SqlSessionFactory sqlSessionFactory = connect.sqlIniting();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            // selectOne 第一个参数为映射sql的标签 id,这里为了避免id重复所以使用 mapper name space 加 id
            // selectOne 第二个参数为查询查询的参数值(与 mapper 中的 #{userId} 相对应)
            UserEntity userEntity = sqlSession.selectOne("mapper.ActivityMapper.xml.selectUser", new Long("1"));
            System.out.println(" sqlSession --> "+ sqlSession);
            System.out.println(" userEntity --> "+ userEntity.toString());
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            // 无论 CRUD 操作是否执行成功,都要关闭 sqlSession;避免造成资源浪费。
            sqlSession.close();
        }
    }
}

接口式编程:

相比以上的方法,接口式做了以下修改;如图:

sql映射文件中 namespace 改为 UserMapper 接口的全类名,这样的做法让映射文件与接口形成了绑定;sql id也与UserMapper接口中方法名一样。

由于映射文件以及映射文件中的SQL片段与 UserMapper 接口、UserMapper 接口的方法都形成了一个绑定关系;所以想要执行某个sql,只需通过 sqlSession getMapper 的方法获取 UserMapper 的实现(不需要程序自己实现),用 UserMapper 的实现对象调用对应 sql 的方法由 Mapper 代理去执行。

成都市作为中国西部地区具有战略地位的核心都市,其人口的空间分布状况对于城市规划、社会经济发展及公共资源配置等研究具有基础性数据价值。本文聚焦于2019年度成都市人口分布的空间数据集,该数据以矢量格式存储,属于地理信息系统中常用的数据交换形式。以下将对数据集内容及其相关技术要点进行系统阐述。 Shapefile 是一种由 Esri 公司提出的开放型地理空间数据格式,用于记录点、线、面等几何要素。该格式通常由一组相互关联的文件构成,主要包括存储几何信息的 SHP 文件、记录属性信息的 DBF 文件、定义坐标系统的 PRJ 文件以及提供快速检索功能的 SHX 文件。 1. **DBF 文件**:该文件以 dBase 表格形式保存与各地理要素相关联的属性信息,例如各区域的人口统计数值、行政区划名称及编码等。这类表格结构便于在各类 GIS 平台中进行查询与编辑。 2. **PRJ 文件**:此文件明确了数据所采用的空间参考系统。本数据集基于 WGS84 地理坐标系,该坐标系在全球范围内广泛应用于定位与空间分析,有助于实现跨区域数据的准确整合。 3. **SHP 文件**:该文件存储成都市各区(县)的几何边界,以多边形要素表示。每个多边形均配有唯一标识符,可与属性表中的相应记录关联,实现空间数据与统计数据的联结。 4. **SHX 文件**:作为形状索引文件,它提升了在大型数据集中定位特定几何对象的效率,支持快速读取与显示。 基于上述数据,可开展以下几类空间分析: - **人口密度评估**:结合各区域面积与对应人口数,计算并比较人口密度,识别高密度与低密度区域。 - **空间集聚识别**:运用热点分析(如 Getis-Ord Gi* 统计)或聚类算法(如 DBSCAN),探测人口在空间上的聚集特征。 - **空间相关性检验**:通过莫兰指数等空间自相关方法,分析人口分布是否呈现显著的空间关联模式。 - **多要素叠加分析**:将人口分布数据与地形、交通网络、环境指标等其他地理图层进行叠加,探究自然与人文因素对人口布局的影响机制。 2019 年成都市人口空间数据集为深入解析城市人口格局、优化国土空间规划及完善公共服务体系提供了重要的数据基础。借助地理信息系统工具,可开展多尺度、多维度的定量分析,从而为城市管理与学术研究提供科学依据。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值