【Mybatis框架】从零开始学Mybatis框架——使用示例
一、数据库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 使用
- 创建项目
选择target runtime,否则出现新建jsp 报错,如果忘记选择,右键项目–> build path中添加library - Eclipse 默认会自己下载所需tomcat 最简单结构。
三、框架是什么
- 框架:软件的半成品.未解决问题制定的一套约束,在提供功能基础上进行扩充。
- 框架中一些不能被封装的代码(变量),需要使用框架者新建一个 xml 文件,在文件中添加变量内容。
比如:需要建立特定位置和特定名称的配置文件;需要使用xml 解析技术和反射技术。 - 常用概念
类库:提供的类没有封装一定逻辑。(类库就是名言警句,写作文时引入名言警句)
框架:区别与类库,里面有一些约束。(框架是填空题)
四、MyBatis 简介
- Mybatis 开源免费框架。原名叫iBatis,2010 在google code,2013 年迁移到github。
- 作用: 数据访问层框架。
底层是对JDBC 的封装。 - mybatis 优点之一:
使用mybatis 时不需要编写实现类,只需要写需要执行的 sql 命令。
五、环境搭建
目录结构:
- 导入jar
- 在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>
- 新建以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>
- 测试结果(只有在单独使用 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 命名目录接口技术.
七、数据库连接池
- 在内存中开辟一块空间,存放多个数据库连接对象.
- JDBC Tomcat Pool,直接由tomcat 产生数据库连接池.
- 图示
active 状态:当前连接对象被应用程序使用中
Idle 空闲状态:等待应用程序使用
- 使用数据库连接池的目的
在高频率访问数据库时,使用数据库连接池可以降低服务器系统压力,提升程序运行效率.
小型项目不适用数据库连接池。 - 实现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>
- 可以在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)+" "+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框架——使用示例相关推荐
- php yii2框架仿站教程,从零开始学YII2框架(六)高级应用程序模板,yii2框架
从零开始学YII2框架(六)高级应用程序模板,yii2框架 高级应用程序模板 这个模板用在大型的团队开发项目中,而且后台从前台独立分离出来以便于部署在多个服务器中.由于YIi2.0的一些新的特性,这个 ...
- python框架怎么学_Python框架学习
Python框架学习 基于flask框架的MySql数据库交互系统. 1.开发环境 #系统:win10 #python版本:PY3.6 #MySQL版本:MySQL5.6 #开发工具:Pycharm ...
- 从零开始学java 框架_从零开始学 Java - 搭建 Spring MVC 框架
如果创建一个 Spring 项目 Spring MVC 框架在 Java 的 Web 项目中应该是无人不知的吧,你不会搭建一个 Spring 框架?作为身为一个刚刚学习Java的我都会,如果你不会的话 ...
- ajax框架怎么学,Ajax框架之DWR学习(文件上传案例)
DWR文件上传起来 还是挺方便的,直接就是咔咔的上传 ,实现了静态的文件上传,老爽了,需要依赖commons-fileupload 这个上传包. 目录结构 环境搭建 pom.xml commons-f ...
- 剖析如何自己写框架Struts和Mybatis,学其原理而非重复造轮子
Java写框架必会几个技术点 关于学习架构,必须会的几点技术 1. java反射技术 2. xml文件处理 3. properties属性文件处理 4. 线程安全机制 5. annocation注解 ...
- java day53【 Mybatis框架概述 、 Mybatis 框架快速入门、自定义 Mybatis 框架 】
第1章 框架概述 1.1 什么是框架 1.1.1 什么是框架 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种 定义认为,框架是可被应用开发者定 ...
- 《Spring+Spring MVC+MyBatis从零开始学》傻瓜式学习笔记
前言:买这本书主要是为了学MyBatis.所以着重记一下第六章以及后面的. 目的:学习大量开发知识,早日跳槽去更好的单位.[2019年09月02日] 错误更改:第六章 6.2.3 第73页 示例6-4 ...
- 基于javaweb框架的springboot mybatis宠物商城源码含论文设计文档
在互联网高速发展.信息技术步入人类生活的情况下,电子贸易也得到了空前发展.网购几乎成为了人人都会进行的活动.近几年来,养宠物更是成为人们生活中重要的娱乐内容之一, 人们越来越多的讲感情也寄托给了宠物, ...
- MyBatis 如何兼容所有日志框架?
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:blog.csdn.net/zwx900102/ar ...
最新文章
- iOS 中二维码扫描
- Spring的quartz定时器重复执行二次的问题解决
- java之前后端交互原理
- 妙到巅峰的8个简洁数学证明(文科生都能看懂),隐隐触摸到一丝只属于神的智慧气息……...
- 我眼中的GaussDB——参加华为合伙伙伴赋能会有感
- 福泉服务器维修,欢迎访问##福泉小松挖掘机维修服务##实业集团
- 蓝桥杯 ALGO-92 算法训练 前缀表达式
- 多电压等级计算机潮流计算,第三章简单电力系统的潮流计算
- 误差分析(python)
- 中国计算机学会推荐国际学术会议和期刊目录
- Postman 发包工具详解
- 说话人识别ALIZE工具包的编译
- 项目中报Assign array to a variable before exporting as module default 这个错
- python花瓣长度和花瓣宽度散点图鸢尾花_鸢尾花
- 哪里可以买到苹果手机原装电池?
- AtCoder Regular Contest 071 C - 怪文書 / Dubious Document
- 数据库优化,分表分库
- shell统计网卡流量
- 【Unity3D 问题总结】Unity报错提示:Asset database transaction committed twice
- MQ消息队列的使用场景
热门文章
- bms中soh计算方式_BMS电池管理系统由浅入深全方位解析
- NEFU394 素数价值
- 高级数据结构与算法 | 二叉搜索树(Binary Search Tree)
- 深入理解netfilter框架|经典PDF
- 简历上的“熟练掌握 RPC”,到底是个什么水平?
- 超清晰的 DNS 原理入门指南
- 总结缓存使用过程中的几种策略以及优缺点组合分析
- Linux(CentOS)中常用软件安装,使用及异常——Zookeeper, Kafka
- LiveVideoStack Meet回归北京站:未来会更卷吧?
- 5G实时直播至关重要的4个原因