一、数据库SQL 命令

1、创建数据库,并指定编码

Create database ssm default character set utf8

2.创建表

Create table 表名(列名类型约束auto_increment comment ‘备注’,
);


3、添加数据

INSERT INTO `ssm`.`flower` (`id`, `name`, `price`, `production`) VALUES ('2', '栀子花', '5.1', '山东');

二、Eclipse 使用

  1. 创建项目
    选择target runtime,否则出现新建jsp 报错,如果忘记选择,右键项目–> build path中添加library
  2. Eclipse 默认会自己下载所需tomcat 最简单结构。

三、框架是什么

  1. 框架:软件的半成品.未解决问题制定的一套约束,在提供功能基础上进行扩充。
  2. 框架中一些不能被封装的代码(变量),需要使用框架者新建一个 xml 文件,在文件中添加变量内容。
    比如:需要建立特定位置和特定名称的配置文件;需要使用xml 解析技术和反射技术。
  3. 常用概念
    类库:提供的类没有封装一定逻辑。(类库就是名言警句,写作文时引入名言警句)
    框架:区别与类库,里面有一些约束。(框架是填空题)

四、MyBatis 简介

  1. Mybatis 开源免费框架。原名叫iBatis,2010 在google code,2013 年迁移到github。
  2. 作用: 数据访问层框架。
    底层是对JDBC 的封装。
  3. mybatis 优点之一:
    使用mybatis 时不需要编写实现类,只需要写需要执行的 sql 命令。

五、环境搭建

目录结构:

  1. 导入jar
  2. 在src 下新建全局配置文件(编写JDBC 四个变量)
    2.1 没有名称和地址要求例如,路径/mybatis0(项目名)/src/myabtis.xml即可
    2.2 在全局配置文件中引入DTD 或schema
    2.2.1 如果导入dtd 后没有提示:
    点击Window--> preference --> XML --> XMl catalog --> add 按钮(课件资料中,包含所有需要用到的dtd文件)

    2.3 全局配置文件内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- default引用environment的id,当前所使用的环境 --><environments default="default"><!-- 声明可以使用的环境 --><environment id="default"><!-- 使用原生JDBC事务 --><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="com/bjsxt/mapper/FlowerMapper.xml"/></mappers>
</configuration>
  1. 新建以mapper 结尾的包,在包下新建:实体类名+Mapper.xml例如FlowerMapper.xml
    3.1 文件作用:编写需要执行的SQL 命令
    3.2 把xml 文件理解成实现类.
    3.3 xml 文件内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namesapce:理解成实现类的全路径(包名+类名) -->
<mapper namespace="a.b" ><!-- id:方法名 parameterType:定义参数类型resultType:返回值类型.如果方法返回值是list,在resultType中写List的泛型,因为mybatis对jdbc封装,一行一行读取数据--><select id="selAll" resultType="com.bjsxt.pojo.Flower">select id,name name123,price,production from flower</select><select id="selById" resultType="int">select count(*) from flower</select><select id="c" resultType="com.bjsxt.pojo.Flower">select id,name name123,price,production from flower</select></mapper>
  1. 测试结果(只有在单独使用 mybatis 时使用,最后 ssm 整合时,下面代码不需要编写)
package com.bjsxt.test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;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.bjsxt.pojo.Flower;public class Test {public static void main(String[] args) throws IOException {InputStream is = Resources.getResourceAsStream("myabtis.xml");// 使用工厂设计模式SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);// 生产SqlSessionSqlSession sqlSession = factory.openSession();List<Flower> list = sqlSession.selectList("a.b.selAll");for (Flower flower : list) {System.out.println(flower.toString());}int count = sqlSession.selectOne("a.b.selById");System.out.println(count);// 把数据库中哪个列的值当作map的keyMap<Object, Object> map = sqlSession.selectMap("a.b.c", "name123");System.out.println(map);sqlSession.close();}
}

输出

Flower [id=1, name=向日葵, price=2.05, production=江西]
Flower [id=2, name=栀子花, price=5.1, production=山东]
2
{栀子花=Flower [id=2, name=栀子花, price=5.1, production=山东], 向日葵=Flower [id=1, name=向日葵, price=2.05, production=江西]}

六、环境搭建详解

1.全局配置文件中内容

(1) <transactionManager/> type 属性的可取值包括:
JDBC,事务管理使用JDBC 原生事务管理方式
MANAGED 把事务管理转交给其他容器.原生JDBC 事务setAutoMapping(false)

(2) <dataSouce/>type属性
POOLED 使用数据库连接池
UNPOOLED 不实用数据库连接池,和直接使用JDBC 一样
JNDI :java 命名目录接口技术.


七、数据库连接池

  1. 在内存中开辟一块空间,存放多个数据库连接对象.
  2. JDBC Tomcat Pool,直接由tomcat 产生数据库连接池.
  3. 图示
    active 状态:当前连接对象被应用程序使用中
    Idle 空闲状态:等待应用程序使用
  4. 使用数据库连接池的目的
    在高频率访问数据库时,使用数据库连接池可以降低服务器系统压力,提升程序运行效率.
    小型项目不适用数据库连接池。
  5. 实现JDBC tomcat Pool 的步骤.
    在web 项目的META-INF 中存放context.xml,在context.xml 编写数据库连接池相关属性。把项目发布到tomcat 中,数据库连接池产生了。
<?xml version="1.0" encoding="UTF-8"?>
<Context><ResourcedriverClassName="com.mysql.cj.jdbc.Driver"url="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"username="root"password="123456"maxActive="50"maxIdle="20"name="test"auth="Container"maxWait="10000"type="javax.sql.DataSource"/>
</Context>
  1. 可以在java 中使用jndi 获取数据库连接池中对象
    Context:上下文接口.context.xml 文件对象类型
    当关闭连接对象时,把连接对象归还给数据库连接池,把状态改变成Idle
    代码示例:
package com.bjsxt.servlet;import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;@WebServlet("/pool")
public class DemoServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {try {Context cxt = new InitialContext();DataSource ds = (DataSource) cxt.lookup("java:comp/env/test");Connection conn = ds.getConnection();PreparedStatement ps = conn.prepareStatement("select * from flower");ResultSet rs = ps.executeQuery();res.setContentType("text/html;charset=utf-8");PrintWriter out = res.getWriter();while(rs.next()){out.print(rs.getInt(1)+"&nbsp;&nbsp;&nbsp;&nbsp;"+rs.getString(2)+"<br/>");}out.flush();out.close();rs.close();} catch (NamingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

八、三种查询方式

1.selectList() 返回值为List<resultType 属性控制>
适用于查询结果都需要遍历的需求

List<Flower> list = sqlSession.selectList("a.b.selAll");for (Flower flower : list) {System.out.println(flower.toString());}

2.selectOne() 返回值Object
适用于返回结果只是变量或一行数据时

int count = sqlSession.selectOne("a.b.selById");System.out.println(count);

3.selectMap() 返回值Map
适用于需要在查询结果中通过某列的值取到这行数据的需求.
Map<key,resultType 控制>

     // 把数据库中哪个列的值当作map的keyMap<Object, Object> map = sqlSession.selectMap("a.b.c", "name123");System.out.println(map);

4.三种查询方式的完整代码示例

package com.bjsxt.test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;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.bjsxt.pojo.Flower;public class Test {public static void main(String[] args) throws IOException {InputStream is = Resources.getResourceAsStream("myabtis.xml");// 使用工厂设计模式SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);// 生产SqlSessionSqlSession sqlSession = factory.openSession();List<Flower> list = sqlSession.selectList("a.b.selAll");for (Flower flower : list) {System.out.println(flower.toString());}int count = sqlSession.selectOne("a.b.selById");System.out.println(count);// 把数据库中哪个列的值当作map的keyMap<Object, Object> map = sqlSession.selectMap("a.b.c", "name123");System.out.println(map);sqlSession.close();}
}

【Mybatis框架】从零开始学Mybatis框架——使用示例相关推荐

  1. php yii2框架仿站教程,从零开始学YII2框架(六)高级应用程序模板,yii2框架

    从零开始学YII2框架(六)高级应用程序模板,yii2框架 高级应用程序模板 这个模板用在大型的团队开发项目中,而且后台从前台独立分离出来以便于部署在多个服务器中.由于YIi2.0的一些新的特性,这个 ...

  2. python框架怎么学_Python框架学习

    Python框架学习 基于flask框架的MySql数据库交互系统. 1.开发环境 #系统:win10 #python版本:PY3.6 #MySQL版本:MySQL5.6 #开发工具:Pycharm ...

  3. 从零开始学java 框架_从零开始学 Java - 搭建 Spring MVC 框架

    如果创建一个 Spring 项目 Spring MVC 框架在 Java 的 Web 项目中应该是无人不知的吧,你不会搭建一个 Spring 框架?作为身为一个刚刚学习Java的我都会,如果你不会的话 ...

  4. ajax框架怎么学,Ajax框架之DWR学习(文件上传案例)

    DWR文件上传起来 还是挺方便的,直接就是咔咔的上传 ,实现了静态的文件上传,老爽了,需要依赖commons-fileupload 这个上传包. 目录结构 环境搭建 pom.xml commons-f ...

  5. 剖析如何自己写框架Struts和Mybatis,学其原理而非重复造轮子

    Java写框架必会几个技术点 关于学习架构,必须会的几点技术 1. java反射技术 2. xml文件处理 3. properties属性文件处理 4. 线程安全机制 5. annocation注解 ...

  6. java day53【 Mybatis框架概述 、 Mybatis 框架快速入门、自定义 Mybatis 框架 】

    第1章 框架概述 1.1 什么是框架 1.1.1 什么是框架 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种 定义认为,框架是可被应用开发者定 ...

  7. 《Spring+Spring MVC+MyBatis从零开始学》傻瓜式学习笔记

    前言:买这本书主要是为了学MyBatis.所以着重记一下第六章以及后面的. 目的:学习大量开发知识,早日跳槽去更好的单位.[2019年09月02日] 错误更改:第六章 6.2.3 第73页 示例6-4 ...

  8. 基于javaweb框架的springboot mybatis宠物商城源码含论文设计文档

    在互联网高速发展.信息技术步入人类生活的情况下,电子贸易也得到了空前发展.网购几乎成为了人人都会进行的活动.近几年来,养宠物更是成为人们生活中重要的娱乐内容之一, 人们越来越多的讲感情也寄托给了宠物, ...

  9. MyBatis 如何兼容所有日志框架?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:blog.csdn.net/zwx900102/ar ...

最新文章

  1. iOS 中二维码扫描
  2. Spring的quartz定时器重复执行二次的问题解决
  3. java之前后端交互原理
  4. 妙到巅峰的8个简洁数学证明(文科生都能看懂),隐隐触摸到一丝只属于神的智慧气息……...
  5. 我眼中的GaussDB——参加华为合伙伙伴赋能会有感
  6. 福泉服务器维修,欢迎访问##福泉小松挖掘机维修服务##实业集团
  7. 蓝桥杯 ALGO-92 算法训练 前缀表达式
  8. 多电压等级计算机潮流计算,第三章简单电力系统的潮流计算
  9. 误差分析(python)
  10. 中国计算机学会推荐国际学术会议和期刊目录
  11. Postman 发包工具详解
  12. 说话人识别ALIZE工具包的编译
  13. 项目中报Assign array to a variable before exporting as module default 这个错
  14. python花瓣长度和花瓣宽度散点图鸢尾花_鸢尾花
  15. 哪里可以买到苹果手机原装电池?
  16. AtCoder Regular Contest 071 C - 怪文書 / Dubious Document
  17. 数据库优化,分表分库
  18. shell统计网卡流量
  19. 【Unity3D 问题总结】Unity报错提示:Asset database transaction committed twice
  20. MQ消息队列的使用场景

热门文章

  1. bms中soh计算方式_BMS电池管理系统由浅入深全方位解析
  2. NEFU394 素数价值
  3. 高级数据结构与算法 | 二叉搜索树(Binary Search Tree)
  4. 深入理解netfilter框架|经典PDF
  5. 简历上的“熟练掌握 RPC”,到底是个什么水平?
  6. 超清晰的 DNS 原理入门指南
  7. 总结缓存使用过程中的几种策略以及优缺点组合分析
  8. Linux(CentOS)中常用软件安装,使用及异常——Zookeeper, Kafka
  9. LiveVideoStack Meet回归北京站:未来会更卷吧?
  10. 5G实时直播至关重要的4个原因