1.简介

框架: 是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。它是一个半成品,一个框架是在一个给定的问题领域内,一个应用程序的一部分设计与实现。

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

整体项目框架图:

2.导包

3.在src下新建全局配置文件( 编写JDBC四个变量)

在全局配置文件中引入DTD或schema

Window->preferences->XML->XMLcatlog

新建xml文件为mybatis.xml,配置jdbc变量

<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- default引用当前环境的id --><environments default="default"><environment id="default"><!-- 使用事物进行配置jdbc四个变量 --><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/likui"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments></configuration>

4.新建以mapper结尾的包:在里面新建mapper.xml配置数据库sql语句

编写需要执行的SQL命令,相当于实现类

<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.likui.mapper"><!-- id:方法名parameterType:定义参数类型如果方法返回时list,在resultType中写list的类型,因为mybatis对jdbc封装,一行一行读取数据--><select id="selAll" resultType="com.likui.pojo.Flower">select * from flower</select></mapper>

对应的Flower类:

package com.likui.pojo;public class Flower {private int id;private String name;private double price;private String production;public Flower(int id, String name, double price, String production) {super();this.id = id;this.name = name;this.price = price;this.production = production;}public Flower() {super();}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getProduction() {return production;}public void setProduction(String production) {this.production = production;}}

数据库表结构:

5.测试结果(只有在单独使用mybatis时使用,最后在ssm中不需要)

mybatis可以自动映射,将数据库表中字段值名称和类中实体名写成一致形式

package com.likui.pojo;public class Mybatis {public static void main(String[] args) throws IOException {InputStream is = Resources.getResourceAsStream("mybatis.xml");//使用工厂设计模式SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);//生产SqlSessionSqlSession session=factory.openSession();List<Flower> list = session.selectList("a.b.selAll");System.out.println("id\t\tname\t\tprice\t\tproduction");for (Flower flower : list) {System.out.println(flower.getId()+"\t\t"+flower.getName()+"\t\t"+flower.getPrice()+"\t\t"+flower.getProduction());}session.close();}}

6.实现JDBC tomcat Pool步骤

UNPOOLED– 这个数据源的实现只是每次被请求时打开和关闭连接。虽然有点慢,但对于在数据库连接可用性方面没有太高要求的简单应用程序来说,是一个很好的选择。 不同的数据库在性能方面的表现也是不一样的,对于某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形。UNPOOLED 类型的数据源仅仅需要配置以下 5 种属性:

  • driver – 这是 JDBC 驱动的 Java 类的完全限定名(并不是 JDBC 驱动中可能包含的数据源类)。
  • url – 这是数据库的 JDBC URL 地址。
  • username – 登录数据库的用户名。
  • password – 登录数据库的密码。
  • defaultTransactionIsolationLevel – 默认的连接事务隔离级别。
  • 作为可选项,你也可以传递属性给数据库驱动。要这样做,属性的前缀为“driver.”,例如:
  • driver.encoding=UTF8
  • 这将通过 DriverManager.getConnection(url,driverProperties) 方法传递值为 UTF8 的 encoding 属性给数据库驱动。

POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。

JNDI – 这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。这种数据源配置只需要两个属性:

  • initial_context – 这个属性用来在 InitialContext 中寻找上下文(即,initialContext.lookup(initial_context))。这是个可选属性,如果忽略,那么 data_source 属性将会直接从 InitialContext 中寻找。
  • data_source – 这是引用数据源实例位置的上下文的路径。提供了 initial_context 配置时会在其返回的上下文中进行查找,没有提供时则直接在 InitialContext 中查找。

7.全局配置文件

<transactionManager/>

type属性可选值 :

  • JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
  • MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。

数据源(dataSource)

dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。

许多 MyBatis 的应用程序会按示例中的例子来配置数据源。虽然这是可选的,但为了使用延迟加载,数据源是必须配置的。

有三种内建的数据源类型(也就是 type=”[UNPOOLED|POOLED|JNDI]”):

*8.使用数据库连接池:在内存中开辟一块空间,存放多个数据库连接对象。JDBC Tomcat Pool,直接由tomacat产生数据库连接池,有active、idle状态,使用数据库连接池的目的,在高频率访问数据库时,使用数据库连接池可以降低服务器系统压力,提升程序运行效率,适用于大型项目。

条件:lib下有数据库驱动文件、META-INF下context.xml文件、src下有serverlet文件

(1)在context.xml中设置数据连接的相关信息

<Context><Resource driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/likui"username="root" password="123456" maxActive="50" maxIdle="20" name="test"auth="Container" maxWait="10000"  type="javax.sql.DataSource"/></Context>

(2)在src下新建serverlet文件,用于获取数据库连接信息并执行

@WebServlet("/pool")public class Demoserverlet 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");  //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();}}}

效果图如下所示:

*9.三种查询方式

(1)selectList():返回值为一个list类型,适用于遍历查询所有结果的需求

xmll配置文件 中:

<select id="selAll" resultType="com.likui.pojo.Flower">select * from flower</select>

java文件中:

List<Flower> list = session.selectList("a.b.selAll");System.out.println("id\t\tname\t\tprice\t\tproduction");for (Flower flower : list) {System.out.println(flower.getId()+"\t\t"+flower.getName()+"\t\t"+flower.getPrice()+"\t\t"+flower.getProduction());}

(2)selectOne(),:返回值为一个object对象,适用于返回结果只是一个变量或一行数据时

xml配置文件中:

  <select id="selById" resultType="int">select count(*) from flower where id=1</select>

java文件中:

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

(3)selectMap():返回值时Map,适用于需求在查询结果中通过某列值取得相应值

xml配置文件 中:

 <select id="c" resultType="com.likui.pojo.Flower">select * from flower</select>

Java文件中:

Map<Object,Object> map=session.selectMap("a.b.c", "name");System.out.println(map);

注:带*号为可选操作

JavaWeb学习之路——SSM框架之Mybatis(二)相关推荐

  1. JavaWeb学习之路——SSM框架之Mybatis(三)

    数据库配置和相关类创建看上篇:JavaWeb学习之路--SSM框架之Mybatis(二) https://blog.csdn.net/kuishao1314aa/article/details/832 ...

  2. JavaWeb学习之路——SSM框架之Spring(五)

    前情提要请看JavaWeb学习之路--SSM框架之Spring(四)                                         整合Spring和Mybatis框架 1.在项目的 ...

  3. JavaWeb学习之路——SSM框架之SpringMVC(八)

    SpringMVC参数传递:把内容写到方法(HandlerMethod)参数中,SpringMVC只要有这个内容,则会注入,在这里使用注解的方式来传递参数 前提使用springmvc注解功能,相应配置 ...

  4. JavaWeb学习之路——SSM框架之Spring(四)

    SSM框架学习-Spring01 1,.Spring介绍 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同 ...

  5. JavaWeb学习之路——SSM框架之SpringMVC(七)

    Spring MVC: 简介:SpringMVC是一种基于Java,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦.基于请求驱动指的 ...

  6. JavaWeb学习之路——SSM框架之SpringMVC(九)

    SpringMVC跳转.视图解析器和@ResponseBody的用法 1.跳转方式 (1)默认方式字符串内容来转发 (2)设置返回值内容转发 添加redirect:资源路径·  重定向 添加forwa ...

  7. JavaWeb学习之路——SSM框架之Spring(六)

    AOP:面向切面编程 1.介绍--AOP:面向切面编程.正常程序都是从上到下执行相关代码,aop是在纵向执行流程中添加横切面, 从左到右的关系.不需要修改成语原有代码,它将代码动态的切入到类的指定方法 ...

  8. SSM框架——使用MyBatis Generator自动创建代码

    SSM框架--使用MyBatis Generator自动创建代码 这是通过命令行, 不用ide插件. 若在IDEA中通过插件generator, 还可以参考另一篇: IDEA搭建Spring+Spri ...

  9. alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组)

    alin的学习之路(数据库篇:二)(select查询,where条件查询,order by排序,单行函数,多行函数,group by分组) 1. SQL语句 1.1 sql语言类型 sql是一门独立的 ...

最新文章

  1. 3个步骤,4大平台,完成大规模数据处理
  2. 通讯录排序 (20分)_算法入门篇:简单的排序算法
  3. idea部署maven+javaweb项目到jboss
  4. Python3.6 deep learning first step
  5. mysql系统搭建互备DB(双主)记录
  6. java设计连连看心得_基于Java的连连看游戏的设计与实现
  7. ae预览不了多次_AE不能预览全部视频的原因分析及解决方案
  8. linux磁盘阵列扩容,linux raid1扩容的方法
  9. MKS 在线编译工具使用说明书
  10. 频谱泄漏 matlab,关于MATLAB FFT频谱泄露和加窗
  11. Configuration file contains invalid cp936 characters in C:\Users\YWX\pip\pip.ini. 已解决!
  12. Flutter Dart 数字转成中文金额大写
  13. python和pyqt5入门之简易汇率转换器
  14. php设计验证码图片,PHP图片验证码制作实现分享(全)
  15. ubuntu 14.04 分辨率调整 -- xrandr命令
  16. Windows7截图教学
  17. linux load averages 和 cpu 使用率
  18. 5月6日地图下载。同学们要练习!
  19. java_枚举类型(支付方式枚举)
  20. IAAS云计算产品畅想-云主机的产品定位

热门文章

  1. java编程赋值运算符_(24)赋值运算符
  2. java求s a aa aaa_Java求s=a+aa+aaa+aaaa+aa...a的值
  3. 八十八、Python | 十大排序算法系列(下篇)
  4. 十二、深入Java的循环语句
  5. 用状态空间法(卡尔曼滤波)解决深度高斯过程问题
  6. 代码+实例:深度学习中的“轴”全解
  7. HDU 1069 Monkey and Banana 最长上升子序列进阶(动态规划)
  8. 终于不会看不懂LSTM了
  9. mysql unescape解码_PHP解密Unicode及Escape加密字符串
  10. ElasticSearch下载安装教程详解【7.10版本】