Java实训(4) -- MyBatis初学习 -- 2018-06-07

Mysql 复习

1.Mysql 安装

  1. 设置 Mysql 编码为 UTF-8
  2. 端口设置为 3306
  3. 服务名设置为 Mysql
  4. root 账号密码设置为 123456
  5. 安装 Navicat Premium
  6. 连接Mysql,创建一个新用户
  用户名:javauser
  密码:123456

2.小型书店系统数据库设计

    DROP TABLE IF EXISTS `book`;
    CREATE TABLE `book` (
      `isbn` varchar(50) NOT NULL,
      `book_name` varchar(80) NOT NULL,
      `price` double NOT NULL,
      `publish_date` datetime NOT NULL,
      `publisher` varchar(255) NOT NULL,
      `category_id` int(11) DEFAULT NULL,
      PRIMARY KEY (`isbn`),
      KEY `FK_book_category` (`category_id`),
      CONSTRAINT `FK_book_category` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    DROP TABLE IF EXISTS `cart`;
    CREATE TABLE `cart` (
      `cart_id` int(11) NOT NULL AUTO_INCREMENT,
      `user_id` int(11) DEFAULT NULL,
      `create_date` datetime DEFAULT NULL,
      PRIMARY KEY (`cart_id`),
      KEY `FK_cart_customer` (`user_id`),
      CONSTRAINT `FK_cart_customer` FOREIGN KEY (`user_id`) REFERENCES `customer` (`user_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    DROP TABLE IF EXISTS `cart_item`;
    CREATE TABLE `cart_item` (
      `cart_item` int(255) NOT NULL AUTO_INCREMENT,
      `cart_id` int(11) NOT NULL,
      `book_id` varchar(50) NOT NULL,
      `count` int(11) DEFAULT NULL,
      `add_time` datetime DEFAULT NULL,
      PRIMARY KEY (`cart_item`),
      KEY `FK_cartitem_book` (`book_id`),
      KEY `FK_cartitem_cart` (`cart_id`),
      CONSTRAINT `FK_cartitem_book` FOREIGN KEY (`book_id`) REFERENCES `book` (`isbn`),
      CONSTRAINT `FK_cartitem_cart` FOREIGN KEY (`cart_id`) REFERENCES `cart` (`cart_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    DROP TABLE IF EXISTS `category`;
    CREATE TABLE `category` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `uq_category_name` (`name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    DROP TABLE IF EXISTS `customer`;
    CREATE TABLE `customer` (
      `user_id` int(11) NOT NULL AUTO_INCREMENT,
      `account` varchar(20) NOT NULL,
      `password` varchar(32) NOT NULL,
      `balance` double NOT NULL,
      PRIMARY KEY (`user_id`),
      UNIQUE KEY `UQ_user_account` (`account`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


MyBatis 初学习

MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.

3W1H

What - 什么是 MyBatis?

Why - 为什么要学 MyBatis?

When - 在什么时候该适应 MyBatis?(Where - 在哪里使用MyBatis?)

How - 如何使用 MyBatis

mybatis 开发步骤

  1. 下载mybatis及其依赖包

  2. 新建Java工程,导入 mybatis 的 jar 包到项目工程中

  3. 编写一个数据操作映射接口

  4. 编写 mybatis 配置文件

  5. 编写数据操作映射文件

  6. 编写测试代码或业务代码,构造 mybatis 运行环境,并测试数据操作接口


  1. 下载mybatis及其依赖包

  2. 新建Java工程,导入 mybatis 的jar包

    项目结构图
  1. 编写一个数据操作映射接口 CategoryMapper.java
package com.neuedu.bookstore.mapper;

import java.util.List;
import com.neuedu.bookstore.bean.Category;

public interface CategoryMapper {
    public int addCategory(Category category);
    public List<Category> searchByName(Category category);
}
  1. 编写mybatis 配置接口 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>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdvc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/ssmdb"/>
        <property name="username" value="javauser"/>
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/neuedu/bookstore/mapper/CategoryMapper.xml"/>
  </mappers>
</configuration>
  1. 编写数据操作映射文件 CategoryMapper.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">

<!-- namespace 用于配置映射的数据操作接口,内容是接口的名称 -->
<mapper namespace="com.neuedu.bookstore.mapper.CategoryMapper">
    <!-- 接口映射文件用于配置接口的方法 -->
    <!-- 
        1. 使用 insert对应sql的insert语句,update对应update语句,delete对应delete语句,select对应select语句
        2. 适应标签的id属性配置接口方法的名称
                            使用 parameterType配置方法的类型
     -->

    <insert id="addCategory" parameterType="com.neuedu.bookstore.bean.Category">
        insert into category(name) values(#{name})
    </insert>

</mapper>

  1. 编写测试代码或业务代码,构造 mybatis 运行环境,并测试数据操作接口
package test;

import java.io.IOException;
import java.io.InputStream;

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 com.neuedu.bookstore.bean.Category;
import com.neuedu.bookstore.mapper.CategoryMapper;

public class TestMybatis {
    public static void main(String[] args) {
       
        try {
            //1. 加载 mybatis 运行环境
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session = sqlSessionFactory.openSession();
            
            // 2. 通过 mybatis 代理实例化Mapper 数据操作接口
            CategoryMapper mapper = session.getMapper(CategoryMapper.class);
            
            // 3. 调用接口对象进行数据操作
            Category category = new Category(0, "计算机");
            int count = mapper.addCategory(category);
            session.commit();
            
            // 4.对数据操作结果进行处理、
            if(count == 1) {
                System.out.println("新增成功.");
            }else {
                System.out.println("新增失败.");
            }
            
            // 5. 关闭数据库连接
            session.close();
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
}

Mybatis 模糊查询

    <select id="searchByName"  parameterType="com.neuedu.bookstore.bean.Category" 
         resultType="com.neuedu.bookstore.bean.Category">
       <!-- 
          方法一:直接获取参数的名称作为查询的条件,此时是一个精确查询;java代码传参时需要对参数进行构造,在参数两端加上百分号%
          category = new Category(0, "%计算%");           
          select id,name from category where name like #{name}
        -->

      <!--
        方法二:编写sql时,在查询条件两端加上百分号
        category = new Category(0, "计算");
       select id,name from category where name like  "%"#{name}"%" 
       -->
        
        
      <!-- 
       方法三:编写sql时,在查询条件两端使用concat单行函数加上百分号
       select id,name from category where name like concat(concat("%",#{name}),"%")
       -->
       
      <!-- 
      方法四:编写sql时,在查询条件两端使用bind标签加上百分号
      select id,name from category where name 
      <bind name="pattern" value="'%'+name+'%'"/> 
      like #{pattern} 
      -->
    </select>

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

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,510评论 0 4
  • by孤鸟差鱼 装在套里 不敢呼吸外面的空气 很怕有一天 就这样悄无声息的死去 不知不觉
    孤鸟差鱼阅读 245评论 0 2
  • 「每日三件事」 1,关于英语学习:1,读英语流利说3小时,并开始做笔记。昨天已经有伙伴完成任务并分享了学习经验,非...
    Sabrina和向日葵阅读 157评论 0 0
  • 当一朵荷花想起陈年的往事年轻的莲叶蔽日遮天你在夏日的回眸中醒来不见荡舟的女子划出一圈圈的涟漪只有白云蓝天和一个干净...
    游向上游的鱼阅读 197评论 0 0
  • 明言板阅读 143评论 0 0