博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis自学(2):MyBatis初识
阅读量:5037 次
发布时间:2019-06-12

本文共 6646 字,大约阅读时间需要 22 分钟。

 什么是MyBatis

   简单来说,MyBatis是一个实现了数据库持久化的开源框架,支持三种语言:Java、.Net以及Ruby。当然我们只关心Java的使用,所以可以将MyBatis理解为一个JDBC的封装框架。

  我们知道Java开发经常使用到的JDBC封装框架就是Hibernate和MyBtis,那么他们有什么区别和共同点?

  MyBatis和Hibernate都是ORM(Object Relational Mapping 对象关系映射)框架。

  MyBatis是“半自动化”的ORM实现,这里的半自动化是相对于Hibernate提供的全面数据库封装机制的“全自动化”ORM实现而言,“全自动化”实现了POJO和数据库表之间的映射,以及sql的自动生成和执行。

  而MyBatis的关注点,在于POJO和sql之间的映射关系。

  MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索。MyBatis可以使用简单的xml或者注解用于配置和原始映射。通过接口将JavaBean映射成数据库中的记录。

  MyBatis框架的优点:

  1.  与JDBC相比,减少了50%的代码量。
  2.  MyBatis是最简单的持久化框架,小巧并且简单易学。
  3.  MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在xml中,从程序代码中彻底分离,降低耦合度,便以统一管理和优化,并可重用。
  4.  提供xml标签,支持编写动态sql语句。
  5.  提供映射标签,支持对象与数据库的ORM字段关系映射。

  MyBatis框架的缺点:

  1.  SQL语句编写工作量大,尤其是字段对、表关联多的时候,对开发人员的SQL语句功底有一定要求。
  2.  因为都是SQL语句编写,SQL语句依赖数据库,导致移植性比较差,不能随便更换数据库。

  MyBatis框架使用场景:

  MyBatis专注与SQL本身,是一个足够灵活的DAO层解决方案。对性能要求很高,或者需求变化比较多的项目,如互联网项目,MyBatis是一个不错的选择。

 快速入门

  1:搭建环境,maven配置MyBatis依赖jar包。

1 
2
org.mybatis
3
mybatis
4
3.4.5
5
6
7
mysql
8
mysql-connector-java
9

 

  2:新建数据表

1 CREATE TABLE `t_user` (2   `id` int(11) NOT NULL DEFAULT '0',3   `username` varchar(50) DEFAULT NULL,4   `password` varchar(50) DEFAULT NULL,5   PRIMARY KEY (`id`)6 ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

  3:创建对应的实体类User

1 package com.yulei.mybaits.model; 2  3 /** 4  * 实体类User 5  * @author 码农小菜鸡 6  * 7  */ 8 public class User { 9 10     private int id;11     private String username;12     private String password;13     14     public int getId() {15         return id;16     }17     public void setId(int id) {18         this.id = id;19     }20     public String getUsername() {21         return username;22     }23     public void setUsername(String username) {24         this.username = username;25     }26     public String getPassword() {27         return password;28     }29     public void setPassword(String password) {30         this.password = password;31     }32     33 }

  4:添加MyBatis的配置文件config.xml(文件名可自定义)。

1 
2 4
5
6
7
8
9
10
11
12
13
14
15
16

  5:MyBatis开发有两种方式:

  • 使用原生接口,Mapper代理实现自定义接口。

    (1):创建Mapper文件UserMapper.xml。

      出于规范,namespcae通常设置为 包名 + 文件名。

      parameterType为参数的数据类型。

      resultType为返回值数据类型。

1 
2 5
6 7
10 11

    (2):在全局配置文件 config.xml 中注册userMapper.xml。

1 
2 4
5
6
7
8
9
10
11
12
13
14
15
16 17
18
19
20

  (3):测试类调用原生接口执行SQL语句获取结果。

1 public class Test { 2  3     @org.junit.Test 4     public void TestMyBatis() { 5         String resource = "config.xml"; 6         try { 7             InputStream inputStream = Resources.getResourceAsStream(resource); 8             SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); 9             SqlSessionFactory sqlSessionFactory = builder.build(inputStream);10             //获取sqlsession11             SqlSession session = sqlSessionFactory.openSession();12             //调用MyBatis原生接口执行sql13             //statemt为userMapper.xml多的 namespcae值 + “.” + select标签的id值14             String statemt = "com.yulei.mybatis.model.mapper.userMapper.getUserById";15             User user = session.selectOne(statemt, 1);16             System.out.println(user);17         } catch (IOException e) {18             e.printStackTrace();19         }20     }21 }

  执行结果为:

User{id=1, username='yulei', password='123456'}
  • 在实际开发中,我们推荐使用第二种方式:自定义接口,但是不需要实现该接口,通过Mapper代理来实现。  

    (1):自定义接口

1 public interface UserDao { 2  3         /** 4          * 新增用户 5          * @param user 6          * @return 7          */ 8         public int addUser(User user); 9 10         /**11          * 删除用户12          * @param id13          * @return14          */15         public int deleteUser(int id);16 17         /**18          * 修改用户19          * @param user20          * @return21          */22         public int updateUser(User user);23 24         /**25          * 根据id查找用户26          * @param id27          * @return28          */29         public User selectUserById(int id);30 31 }

  (2):创建userDao.xml,定义接口方法对应的SQL语句。

    MyBatis会根据规则自动创建UserDao接口实现类的代理对象,规则如下:

      1)userDao.xml 中 namespace为接口的全类名。

      2)userDao.xml 中 statement 的 id 为接口中对应的方法明。

      3)userDao.xml 中 statement 的 parameterType 和接口中对应方法的参数类型一致。

      4)userDao.xml 中 statement 的resultTypte 和接口中对应方法的返回值类型一致。

    

1 
2 5 6
7 8
9 insert into t_user (username, password) values (#{username}, #{password})10
11 12
13 delete from t_user where id = #{id}14
15 16
17 update t_user set username=#{username}, password=#{password} where id = #{id}18
19 20
23 24

  (3):在config.xml中注册userDao.xml。

   (4):测试:

1 public class Test2 { 2  3     @org.junit.Test 4     public void TestMyBatis2() { 5         String resource = "config.xml"; 6         try { 7             InputStream inputStream = Resources.getResourceAsStream(resource); 8             SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); 9             SqlSessionFactory sqlSessionFactory = builder.build(inputStream);10             //获取sqlsession11             SqlSession session = sqlSessionFactory.openSession();12             UserDao userDao = session.getMapper(UserDao.class);13 14             //新增15             User user = new User();16             user.setUsername("yudian");17             user.setPassword("111111");18             System.out.println(userDao.addUser(user));19             session.commit();20 21             //删除22             System.out.println(userDao.deleteUser(2));23             session.commit();24 25             //修改26             User user2 = userDao.selectUserById(1);27             user2.setUsername("yulei222");28             userDao.updateUser(user2);29             session.commit();30 31             //查询用户32             User user3 = userDao.selectUserById(1);33             System.out.println(user3);34 35         } catch (IOException e) {36             e.printStackTrace();37         }38     }39 40 }

转载于:https://www.cnblogs.com/yaokaizhi/p/9560230.html

你可能感兴趣的文章
Linux常用命令总结
查看>>
KRPano动态热点专用素材图50多个,加动态热点使用方法
查看>>
yii模型ar中备忘
查看>>
C#线程入门
查看>>
CSS清除浮动方法
查看>>
JVM内存回收机制简述
查看>>
洛咕 P2480 [SDOI2010]古代猪文
查看>>
js-创建对象的几种方式
查看>>
JDK JRE Java虚拟机的关系
查看>>
2018.11.20
查看>>
word20161215
查看>>
12th week blog
查看>>
dijkstra (模板)
查看>>
python小记(3)
查看>>
编译Linux驱动程序 遇到的问题
查看>>
大型分布式网站架构技术总结
查看>>
HDU 1017[A Mathematical Curiosity]暴力,格式
查看>>
[算法之美] KMP算法的直观理解
查看>>
EntityFramework 性能优化
查看>>
基于LBS功能,Geohash在PHP中运用实例
查看>>