JavaWeb学习之路——SSM框架之Mybatis(二)

1.简介

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

 

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

整体项目框架图:

JavaWeb学习之路——SSM框架之Mybatis(二)_第1张图片

2.导包

JavaWeb学习之路——SSM框架之Mybatis(二)_第2张图片

 

 

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

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

Window->preferences->XML->XMLcatlog

JavaWeb学习之路——SSM框架之Mybatis(二)_第3张图片

新建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;
	}
	
}

数据库表结构:

JavaWeb学习之路——SSM框架之Mybatis(二)_第4张图片

 

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 种属性:

  • 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中设置数据连接的相关信息





 

(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();            }      } }

效果图如下所示:

JavaWeb学习之路——SSM框架之Mybatis(二)_第5张图片

*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 map=session.selectMap("a.b.c", "name");

System.out.println(map);

注:带*号为可选操作

 

你可能感兴趣的:(ssm,JavaWeb)