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变量
4.新建以mapper结尾的包:在里面新建mapper.xml配置数据库sql语句
编写需要执行的SQL命令,相当于实现类
对应的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);
//生产SqlSession
SqlSession session=factory.openSession();
List 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 种属性:
POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。
JNDI – 这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。这种数据源配置只需要两个属性:
7.全局配置文件
<transactionManager/>
type属性可选值 :
数据源(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中设置数据连接的相关信息
(2)在src下新建serverlet文件,用于获取数据库连接信息并执行
@WebServlet("/pool")
public class Demoserverlet extends HttpServlet {
@Override
protected 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)+" "+rs.getString(2)+"
");
}
out.flush();
out.close();
rs.close();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
效果图如下所示:
*9.三种查询方式
(1)selectList():返回值为一个list类型,适用于遍历查询所有结果的需求
xmll配置文件 中:
java文件中:
List 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配置文件中:
java文件中:
int count=session.selectOne("a.b.selById");
System.out.println(count);
(3)selectMap():返回值时Map,适用于需求在查询结果中通过某列值取得相应值
xml配置文件 中:
Java文件中:
Map
注:带*号为可选操作