数据库版本: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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。