Mybatis 概览,快速上手使用

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 代理去执行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis使用临时表的方式和在普通 SQL 语句中使用临时表的方式是一样的。 首先需要在 SQL 语句中创建临时表,然后再进行相关操作。下面以 MySQL 数据库为例,演示如何在 MyBatis使用临时表。 1. 创建临时表 在 MySQL 中,可以使用以下语句创建临时表: ```sql CREATE TEMPORARY TABLE temp_table ( id INT PRIMARY KEY, name VARCHAR(20) ); ``` 2. 在 MyBatis使用临时表 首先,在 MyBatis 的 Mapper 文件中定义 SQL 语句,并将创建临时表的 SQL 语句和相关操作的 SQL 语句写在一起,例如: ```xml <mapper namespace="com.example.mapper.TempTableMapper"> <select id="queryTempTable" resultType="java.util.Map"> <![CDATA[ CREATE TEMPORARY TABLE temp_table ( id INT PRIMARY KEY, name VARCHAR(20) ); INSERT INTO temp_table (id, name) VALUES (1, '张三'); INSERT INTO temp_table (id, name) VALUES (2, '李四'); SELECT * FROM temp_table; ]]> </select> </mapper> ``` 在上面的例子中,先创建了一个临时表 `temp_table`,然后插入了两条数据,最后查询了整个表。 3. 调用 Mapper 方法执行 SQL 语句 在 Java 代码中,调用 Mapper 方法执行 SQL 语句即可,例如: ```java public interface TempTableMapper { List<Map<String, Object>> queryTempTable(); } public class MyBatisTest { public static void main(String[] args) { SqlSession sqlSession = MyBatisUtil.getSqlSession(); TempTableMapper tempTableMapper = sqlSession.getMapper(TempTableMapper.class); List<Map<String, Object>> resultList = tempTableMapper.queryTempTable(); System.out.println(resultList); sqlSession.close(); } } ``` 最后,执行 Java 代码即可看到查询结果。需要注意的是,在 MyBatis 中创建的临时表只在当前的会话中存在,在会话关闭时会自动删除。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值