暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

配置MyBatis连接GBase8s

原创 嘿嘿嘿 2025-03-22
43

数据库版本:GBase8sV8.8_TL_3.5.1_3X1_3_28a3a6

JDK版本:1.8

Mybatis版本:3.5.9

Maven版本:3.6.1

01.目录设置

02.pom.xml配置

<!--        gbase8s数据库JDBC驱动-->
        <dependency>
            <groupId>com.gbasedbt</groupId>
            <artifactId>jdbc</artifactId>
            <version>3.5.1.32</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>
复制

03.mybatis-config.xml配置

<?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(属性)
    settings(设置)
    typeAliases(类型别名)
    typeHandlers(类型处理器)
    objectFactory(对象工厂)
    plugins(插件)
    environments(环境配置)
        environment(环境变量)
        transactionManager(事务管理器)
        dataSource(数据源)
    databaseIdProvider(数据库厂商标识)
    mappers(映射器)
-->
<configuration>
    <!-- 数据库相关属性文件,这里不写的话,会自动加载 config.properties -->
    <properties resource="db.properties"></properties>

<!--    <settings>-->
<!--        <setting name="logImpl" value="STDOUT_LOGGING" />-->
<!--    </settings>-->

    <!-- 配置别名
        type:设置需要设置别名的类型
        alias:设置某个类型的别名,若不设置该属性,那么该类型拥有默认的别名,及类名,且不区分大小写
    -->
    <typeAliases>
    <!--<typeAlias type="com.gbasedbt.entities.User" alias="User"/>-->
        <!--以包为单位,将包下的所用的类型设置默认的类型别名,即类名,且不区分大小写

    -->
        <package name="com.gbasedbt.Mybatis.entities"></package>
    </typeAliases>




    <!-- 配置以支持lvarchar -->
    <typeHandlers>
        <typeHandler handler="org.apache.ibatis.type.StringTypeHandler"
                     jdbcType="LONGVARCHAR" javaType="String" />
    </typeHandlers>

    <!--
    环境配置
    environments:配置多个连接数据库的环境
    属性:
        default:设置默认使用的环境的id:development,test
    -->
    <environments default="development">
        <!--
            environment:配置某个具体的环境
            属性:
                id:表示连接数据库的环境的唯一标识,不能重复
        -->
        <environment id="development">

            <!--  设置事务管理方式transactionManager
                    type=”JDBC|MANAGED“
                        JDBC:表示当前环境中,执行sql是,使用的是JDBC中原生的事务管理方式,事物的提交或回滚需要手动处理
                        MANAGED:被管理,例如Spring
             -->
            <transactionManager type="JDBC"/>
            <!-- 数据库连接相关配置 ,这里动态获取config.properties文件中的内容
                dataSource:配置数据源
                type:POOLED|UNPOOLED|JNDI
                POOLED:表示使用数据库连接池缓存数据库连接
                UNPOOLED:表示不适用数据库连接池
                JNDI:表示使用上下文中的数据源
            -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>

    <!-- 1.映射文件 -->
    <mappers>
<!--        <mapper resource="mappers/UserMapper.xml"/>-->
        <!--
            以包为单位引入映射文件
            要求:
            1、mapper接口所在的包要和映射文件所在的包一致
            2、mapper接口要和映射文件的名字保持一致
        -->
        <package name="com.gbasedbt.Mybatis.mapper"/>
    </mappers>

</configuration>
复制

04.db.properties配置

driver=com.gbasedbt.jdbc.Driver
url=jdbc:gbasedbt-sqli://192.168.31.183:9088/testdb:GBASEDBTSERVER=gbase01;DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8;IFX_LOCK_MODE_WAIT=10
username=gbasedbt
password=GBase123
复制

05.ParameterMapper.xml配置

<?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">

<mapper namespace="com.gbasedbt.Mybatis.mapper.ParameterMapper">
    <!--User selectUser()-->
    <select id="selectUser" resultType="user">
        select * from t_user where id = 1;
    </select>

    <!--User selectUserByUserName(String userName);   #{userName}-->
    <select id="selectUserByUserName" resultType="user">
        select * from t_user where username = '${userName}'
    </select>

    <!--User checkLogin(String name,String password);-->
    <select id="checkLogin" resultType="user">
        select * from t_user where username = #{arg0} and password = #{arg1}
    </select>

    <!--User checkLoginByMap(Map<String,Object> map);-->
    <select id="checkLoginByMap" resultType="User">
        select * from t_user where username = #{username} and password = #{password}
    </select>

    <!--int insertUser(User user);-->
    <insert id="insertUser">
        insert into t_user values(#{id},#{username},#{password},#{age},#{sex},#{email})
    </insert>

    <!--User checkLoginByParam(@Param("username") String username,@Param("password") String password);-->
    <select id="checkLoginByParam" resultType="User">
        select * from t_user where username = #{username} and password = #{password}
    </select>
</mapper>
复制

06.ParameterMapper.java接口

package com.gbasedbt.Mybatis.mapper;
import com.gbasedbt.Mybatis.entities.User;
import org.apache.ibatis.annotations.Param;

import java.util.Map;

public interface ParameterMapper {
    /**
     * 验证登录(使用@param)
     */
    User checkLoginByParam(@Param("username") String username,@Param("password") String password);

    /**
     * 添加用户信息
     */
    int insertUser(User user);

    /**
     *验证登录(参数使用map)
     */
    User checkLoginByMap(Map<String,Object> map);

    /**
     * 模拟用户登录
     */
    User checkLogin(String name,String password);

    /**
     * 根据用户名获取用户信息
     */
    User selectUserByUserName(String userName);


    /**
     * 查询用户信息
     */
    User selectUser();
}
复制

07.实体类User.java

package com.gbasedbt.Mybatis.entities;

public class User {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private String sex;
    private String email;

    public User(Integer id, String username, String password, Integer age, String sex, String email) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.age = age;
        this.sex = sex;
        this.email = email;
    }

    public User() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    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 Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getEmail() {
        return email;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}
复制


08.SqlSessionUtils.java工具类

用于创建数据库连接会话

package com.gbasedbt.Mybatis.utils;

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 SqlSessionUtils {
    public static SqlSession getSqlSession() {
        SqlSession sqlSession = null;
        try {
            // 从类路径下加载名为"mybatis-config.xml"的配置文件,并转换为输入流
            InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");

            // 创建一个SqlSessionFactory构建器对象,用于解析配置并构建SqlSessionFactory
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

            // 通过配置文件的输入流构建SqlSessionFactory(MyBatis核心对象,单例模式,用于创建SqlSession)
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);

            // 从SqlSessionFactory中打开一个SqlSession,并设置自动提交事务(true表示自动提交)
            // SqlSession是执行SQL操作和事务管理的核心接口
            sqlSession = sqlSessionFactory.openSession(true);


        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return sqlSession;
    }
}
复制


09.创建TestMybatis.java类

连接数据库进行增删改查操作

import com.gbasedbt.Mybatis.entities.User;
import com.gbasedbt.Mybatis.mapper.ParameterMapper;
import com.gbasedbt.Mybatis.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class TestMybatis {

    /**
     * Mybatis获取参数值的两种方式: ${}和#{}
     * ${}本质字符串拼接
     * #{}本质占位符赋值
     * mybatis获取参数值的各种情况:
     * 1、mapper接口方法的参数为单个的字面量类型
     * 可以通过${}和#{}以任意的字符串获取参数值,但是需要注意${}的单引号问题
     * ----
     * 2、mapper接口方法的参数为多个时
     * 此实mybatis会将这些参数放在一个map集合中,以两种方式进行存储
     * a>以arg0,arg1...为键,以参数为值
     * b>以param1,param2...为键,以参数为值
     * 因此只需要通过#{}和${}以键的方式访问值即可,但是需要注意${}的单引号问题
     * ---
     * 3、若mapper接口方法的参数有多个时,可以手动将这些参数放在一个map中来存储
     * 因此只需要通过#{}和${}以map集合中键名的方式访问值即可,但是需要注意${}的单引号问题
     *----
     * 4.mapper接口方法的参数时实体类类型的参数(testInsertUser)
     * 因此只需要通过#{}和${}以实体类的属性(成员变量名)的方式访问值即可,但是需要注意${}的单引号问题
     *---
     * 5、使用@param命名参数  testUserLoginByParam()
     * a>以@param注解为键,以参数为值
     * b>以param1,param2...为键,以参数为值
     */


    @Test
    public void testMyBatis() throws IOException {
        //使用工具类SqlSessionUtils获取sqlsesion
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        //获取mapper接口对象
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);

        //执行数据查询
        User user = mapper.selectUser();
        System.out.println(user);

    }

    @Test
    public void testSelectUserByUserName() {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        //获取mapper接口对象
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);

        //执行查询语句
        User user = mapper.selectUserByUserName("tom");
        System.out.println(user);
    }

    //模拟登录
    @Test
    public void testCheckLogin() {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        //获取mapper接口对象
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);

        //执行查询
        User user = mapper.checkLogin("tom", "123456");
        System.out.println(user);

    }

    //模拟登录(map)
    @Test
    public void testCheckLoginByMap() {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        //获取mapper接口对象
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);

        //执行查询
        Map<String,Object> map = new HashMap<>();
        map.put("username","tom");
        map.put("password","123456");
        User user = mapper.checkLoginByMap(map);
        System.out.println(user);

    }

    //模拟插入
    @Test
    public void testInsertUser() {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        //获取mapper接口对象
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);

        //执行插入
        int result = mapper.insertUser(new User(3, "mike", "123456", 23, "1", "123@q.com"));
        System.out.println(result);

    }

    //模拟登录by Param
    @Test
    public void testUserLoginByParam() {
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        //获取mapper接口对象
        ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);

        //执行查询
        User user = mapper.checkLoginByParam("tom", "123456");
        System.out.println(user);

    }
}
复制


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论