详解非Spring环境下使用Mybatis操作数据库的流程

准备工作

1, 导入mybatis-3.2.7.jar,mysql-connector-5.1.25-bin.jar两个jar包

2, 在数据库中创建一个db_test数据库,库中有一个表为user_t(id,user_name,password,age)

3, 创建User.java实体包含属性(id,username,password,age)

4, 创建jdbc.properties配置文件:内容如下(可以不创建,直接在mybatis_config.xml中的properties中添加propertiy项),用于配置数据库连接相关属性

driverClassName=com.mysql.jdbc.Driver

jdbc_url=jdbc:mysql://127.0.0.1:3306/db_testuseUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull

jdbc_username=root

jdbc_password=

编写代码

创建UserMapper.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.liangjidong.mapper.UserMapper">
    <select id="selectById" parameterType="int" resultType="User">
    select id,
    user_name as username,
    password,
    age
    from user_t
    where id=#{id}
    </select>
</mapper>

创建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 resource="jdbc.properties"></properties>
    <!-- 创建User类的别名 -->
    <typeAliases>
        <typeAlias type="com.liangjidong.pojo.User" alias="User" />
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC">
            </transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${driverClassName}" />
                <property name="url" value="${jdbc_url}" />
                <property name="username" value="${jdbc_username}" />
                <property name="password" value="${jdbc_password}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/liangjidong/mapper/UserMapper.xml" />
    </mappers>
</configuration>

给大家免费分享一套资料,这套资料包含面试题,视频,简历模板,成长路径,核心总结文档,需要这份资料的小伙伴,点击这里即可免费领取,备注暗号 简书

创建测试程序

方式一:

String resource = "mybatis-config.xml";
        Reader reader = Resources.getResourceAsReader(resource);
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(reader);
        SqlSession session = factory.openSession();
        User user = session.selectOne(
                "com.liangjidong.mapper.UserMapper.selectById", 1);
        System.out.println(user);

方式二: 对xml文件中的sql语句使用接口方式调用

前面调用sql语句的方式为

session.selectOne("com.liangjidong.mapper.UserMapper.selectById", 1);这种方式容易发生的字符串文字和转换的错误。通过使用接口的方式来调用既方便有不易出现错误

首先定义接口UserMapper.java

package com.liangjidong.mapper;

import com.liangjidong.pojo.User;

public interface UserMapper {

     public User selectById(int id);

}

请注意,这里面有一个方法名 selectById 必须与 User.xml 里面配置的 select 的 id 对应(<select id=" selectById")

这种方式,要注意的一个地方就是。在UserMapper.xml 的配置文件中,mapper namespace="com.liangjidong.mapper.UserMapper " ,命名空间非常重要,不能有错,必须与我们定义的package 和接口一致。

测试代码如下:

UserMapper userMapper = session.getMapper(UserMapper.class);

User user = userMapper.selectById(1);

对数据库的增,删,该和前面类似


注意:在update时,遇到整形时,且对象中没有添加该数据,则默认会以0为结果更新到数据库中,解决办法:在判断的时候加上and age!=''"

<if test="age!=null and age!=''">

           age=#{age},

</if>

但是调用结束后要提交事务(不然数据是不会更新到数据库中的)

session.commit();

总结:mybatis中调用增,删,改,查接口应该返回的数据分别是:

insert,返回值是:新插入行的主键(primary key);需要包含<selectKey>语句,才会返回主键,否则返回值为null。
update/delete,返回值是:更新或删除的行数;无需指明resultClass;但如果有约束异常而删除失败,只能去捕捉异常。
queryForObject,返回的是:一个实例对象或null;需要包含<select>语句,并且指明resultMap;
queryForList,返回的是:实例对象的列表;需要包含<select>语句,并且指明resultMap;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335