一、引言

1.1、框架就是一个软件的半成品,用来解决软件开发过程中的普适性问题,从而简化开发步骤,提高开发效率。

1.2、ORM(Objecct Relational Mapping)框架提供了持久化类与表的映射关系,通过它可以将一个个实体对象持久化到数据库中保存。(用于实现面向对象编程语言里不同类型系统的数据之间的转换)

1.3、JDBC是一套后端连接数据库并对其中数据进行操作的流程,使用JDBC完成ORM操作会有如下缺点:

  • 存在大量的冗余代码。

  • 手工创建 Connection、Statement 等。

  • 手工将结果集封装成实体对象。

  • 查询效率低,没有对数据访问进行过优化(Not Cache)

二、Mybatis框架

2.1 Mybatis到底是什么?

  • MyBatis本是Apache软件基金会的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了Google Code,并且改名为MyBatis 。2013年11月迁移到Github。

  • MyBatis是一个优秀的基于Java的持久层框架,支持自定义SQL,存储过程和高级映射。

  • MyBatis对原有JDBC操作进行了封装,几乎消除了所有JDBC代码,使开发者只需关注 SQL 本身。

  • MyBatis可以使用简单的XML或Annotation来配置执行SQL,并自动完成ORM操作,将执行结果返回。

2.2 、访问、下载网址

官方网站:http://www.mybatis.org/mybatis-3/

下载地址:https://github.com/mybatis/mybatis-3/releases/tag/mybatis-3.5.1

三、Mybatis环境搭建

3.1、在Maven项目的pom文件中引入Mybatis的核心依赖

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 <project xmlns="http://maven.apache.org/POM/4.0.0"     
 4          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5          xsi:schemaLocation=
 6          "http://maven.apache.org/POM/4.0.0 
 7           http://maven.apache.org/xsd/maven-4.0.0.xsd">
 8     
 9     <modelVersion>4.0.0</modelVersion>
10 
11     <!--项目配置-->
12     <groupId>com.qf</groupId>
13     <artifactId>hello-mybatis</artifactId>
14     <version>1.0-SNAPSHOT</version>
15 
16     <!--依赖-->
17     <dependencies>
18         <!--MyBatis核心依赖-->
19         <dependency>
20             <groupId>org.mybatis</groupId>
21             <artifactId>mybatis</artifactId>
22             <version>3.4.6</version>
23         </dependency>
24 
25         <!--MySql驱动依赖-->
26         <dependency>
27             <groupId>mysql</groupId>
28             <artifactId>mysql-connector-java</artifactId>
29             <version>5.1.47</version>
30         </dependency>
31         
32         <!--日志依赖-->
33         <dependency>
34             <groupId>log4j</groupId>
35             <artifactId>log4j</artifactId>
36             <version>1.2.17</version>
37         </dependency>
38       </dependencies>
39 </project>

3.2、创建Mybatis配置文件(存放在resources中)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">

<!--MyBatis配置-->
<configuration>
    <!--JDBC环境配置、选中默认环境-->
    <environments default="MySqlDB">
        <!--MySql数据库环境配置-->
        <environment id="MySqlDB">
            <!--事务管理-->
            <transactionManager type="JDBC"/>
            <!--连接池-->
            <dataSource type="org.apache.ibatis.datasource.pooled.PooledDataSourceFactory">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!-- &转义&amp; -->
                <property name="url" value="jdbc:mysql://localhost:3306/x?useUnicode=true&amp;characterEncoding=utf8"/>
                <property name="username" value="xxx"/>
                <property name="password" value="xxx"/>
            </dataSource>
        </environment>
    </environments>

    <!--Mapper注册-->
    <mappers>
        <!--注册Mapper文件的所在位置-->
        <mapper resource="xxxMapper.xml"/>
    </mappers>
</configuration>

四、Mybatis开发

4.1、首先我们需要一张数据库表

1 create table t_users(
2   id int primary key auto_increment,
3   name varchar(50),
4   password varchar(50),
5   sex varchar(1),
6   birthday datetime,
7   registTime datetime
8 )default charset = utf8;

4.2、接下来需要与之对应的实体类

 1 package com.qf.mybatis.part1.basic;
 2 import java.util.Date;
 3 import lombok.*;
 4 @Data
 5 @AllArgsConstructor
 6 @NoArgsConstructor
 7 public class User {
 8     private Integer id;
 9     private String name;
10     private String password;
11     private String sex;
12     private Date birthday;
13     private Date registTime;
14     }
15 }

4.3、然后定义DAO接口以及方法

 1 package dao;
 2 
 3 import entity.User;
 4 import org.apache.ibatis.annotations.Param;
 5 
 6 import java.util.List;
 7 
 8 public interface UserDao {
 9     User queryUserById(@Param("id")Integer id);
10     int updateUser(User user);
11     void addUser(User user);
12     List<User> queryLike(@Param("key")String key);
13     int insertProduct(User user);
14 }

4.4、正常我们现在需要编写DAO接口的实现类了,但是在Mybatis框架中,我们需要编写相应的Mapper.xml 文件(如果不在resources文件夹中创建则需要在pom中配置路径通配)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--namespace = 所需实现的接口全限定名-->
<mapper namespace="com.qf.mybatis.part1.basic.UserDao">
    <!--id = 所需重写的接口抽象方法,resultType = 查询后所需返回的对象类型-->
    <select id="selectUserById" resultType="com.qf.mybatis.part1.basic.User">
        <!--#{arg0} = 方法的第一个形参-->
          SELECT * FROM t_users WHERE id = #{arg0}
    </select>
</mapper>

这里面就可以写上各个接口所需要的SQL语句

4.5、写好Mapper文件就需要对它进行注册,使得Mybatis能认识并找到我们所写的文件了。

1 <!--Mapper文件注册位置-->
2 <mappers>
3     <!--注册Mapper文件-->
4     <mapper resource="UserDaoMapper.xml"/>
5 </mappers>

4.6、之后我们就可以在测试目录中编写相应的测试代码来测试这些功能了。

 1 import dao.UserDao;
 2 import entity.User;
 3 import org.apache.ibatis.io.Resources;
 4 import org.apache.ibatis.session.SqlSession;
 5 import org.apache.ibatis.session.SqlSessionFactory;
 6 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 7 import org.junit.Test;
 8 import utils.MybatisUtils;
 9 
10 
11 import java.io.IOException;
12 import java.io.InputStream;
13 import java.util.Date;
14 import java.util.List;
15 
16 /**
17  * Author:ysx
18  * Date:2020/7/7/00711:36
19  * FileName:UserTest
20  */
21 
22 
23 public class UserTest {
24     //通过ID查询
25     @Test
26     public void queryUser() throws IOException {
27         InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
28         SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(is);
29         SqlSession ss = sf.openSession();
30         UserDao userDao = ss.getMapper(UserDao.class);
31 
32         User user = new User();
33 
34         user = userDao.queryUserById(1);
35         System.out.println(user);
36     }
37     //模糊查询
38     @Test
39     public void queryLike(){
40         UserDao userDao = MybatisUtils.getMapper(UserDao.class);
41         List<User> users = userDao.queryLike("l");
42         for (User user : users) {
43             System.out.println(user);
44         }
45     }
46 
47     //更新用户
48     @Test
49     public  void updateUser(){
50         UserDao userDao = MybatisUtils.getMapper(UserDao.class);
51         User user = new User(1,"liuTao","123123","女",new Date());
52         userDao.updateUser(user);
53         MybatisUtils.commit();
54 
55     }
56 
57     //添加用户
58     @Test
59     public  void addUser(){
60         try {
61             UserDao userDao = MybatisUtils.getMapper(UserDao.class);
62             User user = new User(null,"刘涛","123456","男",new Date());
63             userDao.addUser(user);
64             MybatisUtils.commit();
65         }catch (Exception e) {
66             MybatisUtils.rollback();
67             throw  new RuntimeException("添加用户失败",e);
68         }
69 
70     }
71 
72     //主键回填
73     @Test
74     public  void backPr(){
75         UserDao userDao = MybatisUtils.getMapper(UserDao.class);
76         User user = new User(null,"吴会献","12345678","女",new Date());
77         userDao.insertProduct(user);
78         MybatisUtils.commit();
79         System.out.println(user.getId());
80     }
81 
82     //
83 
84 }

这样我们就完成Mybatis框架的使用了。

posted on 2020-07-07 21:02  奔跑的小一  阅读(120)  评论(0)    收藏  举报