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

2018-06-08  本文已影响0人  空心老竹

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>

上一篇下一篇

猜你喜欢

热点阅读