Java实训(4) -- MyBatis初学习 -- 2018-
2018-06-08 本文已影响0人
空心老竹
Mysql 复习
1.Mysql 安装
- 设置 Mysql 编码为 UTF-8
- 端口设置为 3306
- 服务名设置为 Mysql
- root 账号密码设置为 123456
- 安装 Navicat Premium
- 连接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 开发步骤
下载mybatis及其依赖包
新建Java工程,导入 mybatis 的 jar 包到项目工程中
编写一个数据操作映射接口
编写 mybatis 配置文件
编写数据操作映射文件
编写测试代码或业务代码,构造 mybatis 运行环境,并测试数据操作接口
-
下载mybatis及其依赖包
-
新建Java工程,导入 mybatis 的jar包
项目结构图
- 编写一个数据操作映射接口 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);
}
- 编写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>
- 编写数据操作映射文件 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>
- 编写测试代码或业务代码,构造 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>