加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

一起学MyBatis之入门篇

发布时间:2020-12-14 18:05:10 所属栏目:大数据 来源:网络整理
导读:概述 本文以一个简单的小例子,简述在Java项目开发中MyBatis的基本用法,属于入门级文章,仅供学习分享使用,如有不足之处,还请指正。 什么是MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的

概述

本文以一个简单的小例子,简述在Java项目开发中MyBatis的基本用法,属于入门级文章,仅供学习分享使用,如有不足之处,还请指正。

什么是MyBatis?

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

MyBatis环境的搭建

环境搭建步骤:

1. 新建一个Java Project,并引入需要的Jar包。

MyBatis需要的Jar包,共2个,如下所示:

1 //MyBatis包
2 mybatis-3.5.3.jar
3 MySql数据库连接驱动包
4 mysql-connector-java-5.1.6.jar

2. 新增MyBatis配置文件

在src目录下,新增一个MyBatis的配置文件【mybatis-config.xml】,主要配置数据库连接相关环境信息和Mapper信息,具体内容如下:

  • environments 节点配置数据库环境,可以有多个配置,default表示默认连接哪个环境。
  • mappers配置引入的映射文件,采用相对路径的方式。
 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration 6     <!-- 加载配置文件db.properties -->
 7     properties resource="db.properties"></properties 8      通过指定environments的default值和 environment的id,指定mybatis运行的数据库环境 9     environments default="development"10         environment id11             transactionManager type="JDBC" />
12              dataSource数据源类型:
13                 UNPOOLED:不采用连接池,默认采用JDBC的方式,需要没有连接打开关闭
14                 POOLED:采用连接池进行数据库连接
15                 JNDI:从Tomcat中获一个内置的数据库连接池
16              17             dataSource ="POOLED"18                 property name="driver" value="${jdbc.driver}" 19                 ="url"="${jdbc.url}" 20                 ="username"="${jdbc.username}" 21                 ="password"="${jdbc.password}" 22             </dataSource23         environment24     environments25     mappers26         mapper ="com/hex/mybatis/ProductMapper.xml" 27     28 >

3. 新增加一个模型类

本例中新增加一个Product类,包含三个属性,代码如下:

package com.hex.mybatis;
 2 
 3 /**
 4  * 产品类模型
 * @author Administrator
 6  *
 7  */
 8 public class Product {
 9     
10     private String pid; 产品ID
11     private String pname; 产品name
12     private float price; 产品价格
13     
14     public Product() {
15         
16     }
17     
18     public Product(String pid,String pname,float price) {
19         this.pid = pid;
20         this.pname = pname;
21         this.price = price;
22 23     
 String getPid() {
25         return26 void setPid(String pid) {
28         29 30      String getPname() {
31         32 33      setPname(String pname) {
34         35 36      getPrice() {
37         38 39     void setPrice(40         41 42     
43     @Override
44      String toString() {
45          TODO Auto-generated method stub
46         return "PID="+this.pid+",PNAME="+this.pname+",PRICE="+this.price;
47 48 }

4. 新增加Mapper文件

增加ProductMapper.xml文件,用于操作数据库,包含数据表Products的CRUD操作。如下所示:

  • mapper节点的namespace属性表示此映射文件的唯一标识。
  • 标签的id属性,表示文件内唯一值,用于查找对应的语句。
  • parameterType表示参数的数据类型。
  • resultType表示返回的数据类型,如果是类对象,必须为全名称。
  • sql语句中的占位符,以 #{属性名} 格式,不可以乱写。
  • 注意:namespace+id,在整个项目中必须唯一。
DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd" namespace 是mapper文件的唯一标识符 namespace="com.hex.mybatis.ProductMapper"<!-- 
    id:唯一标识符
 9     parameterType:标识输入参数类型  
10     resultType:返回对象的类型
select ="queryProductById" resultType="com.hex.mybatis.Product"
13         parameterType="String"        select * from Products where pid = #{id}
15     select16     
17      查询,注意:返回一个值和多个值,resultType一样 ="queryProductAll"="com.hex.mybatis.Product"19         select * from Products where 1=1 
20     21     
22      插入:parameterType:输入参数类型,在形式上只能有一个,可以是简单类型,也可以是对象类型。
23     如果是对象类型,以 #{属性名} 格式,不可以乱写
24      insert ="addProduct" parameterType="com.hex.mybatis.Product"         insert into Products(pid,pname,price)values(#{pid},#{pname},#{price})
insert28     
29      更新 update ="updateProductById"  parameterType31         update products set pname=#{pname},price=#{price} where pid=#{pid} 
32     update33     
34      删除 35     delete ="deleteProductById"36         delete from products where pid=#{pid}
37     deletemapper4. 使用方法

具体代码,如下所示:

  1. 首先以输入流的形式加载配置文件。
  2. 通过数据流创建SqlSessionFactory对象
  3. 打开SqlSession
  4. 执行相关操作
  5. 关闭会话对象
 1     以输入流的方式加载配置文件
 2     String resource = "mybatis-config.xml";
 3     InputStream inputStream = Resources.getResourceAsStream(resource);
 4     创建SqlSessionFactory对象,build第二个参数指定environment的id,,如果不写,默认配置default.
 5     SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
创建会话对象
 7     SqlSession session = sqlSessionFactory.openSession();
-------------------查询单个对象---------------------
执行操作,如果queryProductById有相同的名称,则需要使用完全限定名,即:namespace+id
10     Product product = session.selectOne("queryProductById","A-002");
11     System.out.println(product.toString());
---------------------End-------------------------
13     关闭会话对象
14     session.close();

CRUD操作对象

关于数据表的增删改查,如下所示:

-------------------新增单个对象---------------------
 2     Product product =new Product("A-006","康师傅绿茶",3.5f 3     int count = session.insert("addProduct",product);
    session.commit();
 5     System.out.println("新增加了 "+count+" 个产品!!!"-------------------修改单个对象---------------------
 8     Product product =new Product("A-004","茉莉花茶",3.2fint count = session.update("updateProductById"11     System.out.println("修改了 "+count+" 个产品!!!"-------------------删除单个对象---------------------
int count = session.delete("deleteProductById",1)">16     System.out.println("删除了 "+count+" 个产品!!!"-------------------查询个对象---------------------
19     List<Product> lstProduct =  session.selectList("queryProductAll"for(Product p : lstProduct){
21         System.out.println(p);
23     ---------------------End-------------------------    

动态代理

除了以上基础的写法,MyBatis还提供了动态代理的模式,具体步骤如下所示:

1. 新增一个接口ProductMapper

接口约定如下:

  1. 包名+接口名与ProudctMapper.xml中的namespace保持一致。
  2. 函数名称和Mapper文件中标签的ID一致。
  3. 函数参数类型和Mapper文件中配置的parameterType一致。
  4. 函数返回类型和Mapper文件中配置的resultType一致,如果没有resultType,则返回void。
import java.util.List;
 4 
 * 接口名称和ProductMapper.xml的namespace一致
 7  * 
10  interface ProductMapper {
     * 通过ID查询:动态代理 1. 函数名称和Mapper标签ID一致 2. 参数类型和parameterType对应的一致 3.
     * 返回值和resultType一致
     * 
     * @param pid
17 @return
18          Product queryProductById(String pid);
20 
21          * 查询列表
24 25      26     List<Product> queryProductAll();
27 
28          * 新增
30  product
32       addProduct(Product product);
34 
     * 修改
37 39      40      updateProductById(Product product);
41 
42          * 删除
44 45 46      47      deleteProductById(String pid);
48 
49 }

2. 动态代理调用方式

如下所示:

  1. 首先以输入流的形式加载配置文件。
  2. 通过数据流创建SqlSessionFactory对象
  3. 打开SqlSession
  4. 获取ProudctMapper接口对象。
  5. 调用接口方法执行操作。
  6. 关闭会话对象
-------------------动态代理---------------------
 9     ProductMapper productMapper = session.getMapper(ProductMapper.查询一个
11     Product product=productMapper.queryProductById("A-001"12     System.out.println(product);
14     session.close();

3. 其他CRUD操作

通过动态代理的增删改查方式,如下所示:

查询列表
 2     List<Product> lstProduct= productMapper.queryProductAll();
新增
 7     Product product =new Product("A-007","棒棒花茶",1)">    productMapper.addProduct(product);
10     System.out.println("插入成功!!!"修改
12     Product product =    productMapper.updateProductById(product);
15     System.out.println("修改成功!!!"16     删除
17     productMapper.deleteProductById("A-005"18 19     System.out.println("删除成功"---------------------End-------------------------

关于MyBatis操作手册?,每天学习一小步,坚持跨越一大步。

备注

定风波·三月七日??

作者:苏轼 (宋)

三月七日,沙湖道中遇雨。雨具先去,同行皆狼狈,余独不觉。已而遂晴,故作此。

莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。

料峭春风吹酒醒,微冷,山头斜照却相迎。回首向来潇瑟处,归去,也无风雨也无晴。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读