SSM框架系列学习总结4之Mybatis入门程序与JDBC

JDBC总结

数据库连接.png

数据库连接的第二个参数: JDBC URL
JDBC URL.jpeg

如果是本机, 可直接简写为
jdbc:mysql:///cloud_study

JDBC常用API
常用API.jpeg
连接步骤.jpeg

ResultSet:


ResultSet.jpeg

get方法.jpeg
JDBC的游标
游标.png

开启游标:


开启游标.jpeg

游标使用.jpeg
字符集设置避免中文乱码
字符集.jpeg

命令行输入:
show variables like '%character%';

variables .png

show create table goods;
表.png

所有设置编码对象.png

URL设置.jpeg

解决SQL注入
占位符.jpeg

PreparedStatement.png
注意事项
权限管理.jpeg

数据库错误.jpeg

密文存储.jpeg

Mybatis入门程序

ORM.png

ORM.png

对应关系.jpeg
引入Mybatis

Mybatis是作用在持久层的轻量级的框架,该框架要求程序员将大部分的精力放在sql语句的编写上面, 是一种半自动的sql编写方式。主要适用于需求变化比较多的项目。

为什么要用框架:
1.在jdbc中很多地方有用到硬编码,比如sql语句 ,在mybatis中将sql语句编写在xml文件中
2.在jdbc中对于映射关系处理的不好。对于查询 jdbc返回的就是一个ResultSet对象,mybatis提供了多种映射关系,可以直接获得我们想要的各种类型的结果
3.对于dao层编写, 必须在dao层的实现类编写jdbc代码, 但是mybatis提供了一种方式叫做Mapper代理开发模式,在这种模式下, 对于dao层 我们只需要编写接口, 不需要编写实现类!

导入jar包:


jar包.png

整个项目结构:


结构.png

整个配置文件的配置:
创建mybatis的全局配置文件SqlMapConfig.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>
    <!-- 在控制台输出日志信息 -->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>

    <!-- environments 里面的内容在mybatis和spring整合以后, 就全部没了 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis_day01"/>
                <property name="username" value="root"/>
                <property name="password" value="lxy"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- 将映射文件加载到全局配置文件 -->
        <mapper resource="mybatis/user.xml"/>
    </mappers>
</configuration>

创建mybatis的映射文件user.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="demo">
    <!--
        id:代表这条sql语句, 在SqlSession调用方法的时候, 需要该id作为参数进行传递, 在整个文件中不能重复
        parameterType: 参数的类型
        resultType:User
        #{}:这是个占位符, 如果参数是简单类型(基本类型+String), 那么里面可以随便写.
     -->
    <select id="findUserById" parameterType="int" resultType="com.wtu.mybatis.User">
        select * from `user` where id = #{id}
    </select>
</mapper>

创建日志配置文件log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

根据用户表, 创建User实体类

package com.wtu.mybatis;

import java.util.Date;

/**
 * @Author menglanyingfei
 * @Created on 2018.01.18 16:28
 */
public class User {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    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 Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", birthday="
                + birthday + ", sex=" + sex + ", address=" + address + "]";
    }
}

测试类:
操作步骤:
1.怎样获得SqlSession对象 <-- SqlSessionFactory <--SqlSessionFactoryBuilder

SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
builder.read(in);
  1. 为了让我们能够看清楚执行过程,我们使用log4j的配置文件用来输出日志信息
package com.wtu.mybatis;

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 org.junit.Test;

import java.io.InputStream;

/**
 * @Author menglanyingfei
 * @Created on 2018.01.18 16:29
 */
public class MybatisDemo {

    @Test
    public void findUserById() throws Exception {
        // 得到MyBatis全局配置文件的输入流对象
        InputStream in = Resources.getResourceAsStream("mybatis/sqlMapConfig.xml");
        // 得到SqlSessionFactory对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        // 得到SqlSession对象
        SqlSession session = factory.openSession();
        // 根据id查询用户
        /*
            param1: 映射文件中的sql id 格式是命名空间.sqlID
            param2: 查询语句需要带的参数
         */
        User user = session.selectOne("demo.findUserById", 10);
        System.out.println(user);
    }
}

测试成功结果:


JUnit.png

完整代码见Github地址

https://github.com/menglanyingfei/SSMLearning/tree/master/mybatis_day01

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

推荐阅读更多精彩内容