MyBatis框架学习一

1,什么是Mybatis?

MyBatis是一款优秀的持久层框架java

MyBatis避免了几乎全部的JDBC代码和手动设置参数以及获取结果集。MyBatis可使用简单的XML或者注解来配置和映射原生类型,接口和Java的POJO(Plain Old Java Objects,普通老式Java对象)为数据库中的记录。mysql

什么是持久层

持久化就是数据在瞬时撞=状态和持久状态之间转化的一个过程面试

内存:断电即失。咱们没法用技术层面来保存内存不断电,将内存中的数据持久化的存储;磁盘,硬盘等sql

持久层对应咱们代码架构的那一层:--Dao层数据库

dao层,专一于处理数据库的操做,可是咱们写一大堆JDBC的重复代码。apache

咱们应该专一sql语句的编写,获取sql的返回值便可session

持久层为啥不能叫持久化模块mybatis

咱们的系统中,应该有一个单独的层面来处理这个数据库链接问题。架构

解耦,这个层面就应该有较为清晰的逻辑边界;app

面试题:hibernate和mybatis的区别

hibernate是全自动的ORM框架,不用编写sql语句,黑箱操做

mybatis半自动的ORM框架,咱们能够自定义sql语句,更加灵活,白箱操做

MyBatis的优势

  • 不用再去编写一些JDBC代码
  • 简单易学,不依赖第三方的程序或者框架。官方文档强大,开源,咱们能够随时分析源码;
  • 实现解耦,低耦合,高内聚
  • ORM;脆响关系映射
  • 提供XML标签

2.第一个Mybatis程序

1搭建实验环境

在数据库中添加一个数据库

 1 CREATE DATABASE /*!32312 IF NOT EXISTS*/`mybatis` /*!40100 DEFAULT CHARACTER SET utf8 */;
 2 
 3 USE `mybatis`;
 4 
 5 DROP TABLE IF EXISTS `user`;
 6 
 7 CREATE TABLE `user` (
 8   `id` INT(20) NOT NULL,
 9   `name` VARCHAR(30) DEFAULT NULL,
10   `pwd` VARCHAR(30) DEFAULT NULL,
11   PRIMARY KEY (`id`)
12 ) ENGINE=INNODB DEFAULT CHARSET=utf8;
13 
14 INSERT  INTO `user`(`id`,`name`,`pwd`) VALUES (1,'狂神','123456'),(2,'张三','abcdef'),(3,'李四','987654');

2,建立项目

建立一个普通的maven项目

修改pom.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>com.like</groupId>
 8     <artifactId>20190723mybatisstudy</artifactId>
 9     <packaging>pom</packaging>
10     <version>1.0-SNAPSHOT</version>
11     <dependencies>
12         <!--单元测试-->
13         <dependency>
14             <groupId>junit</groupId>
15             <artifactId>junit</artifactId>
16             <version>4.11</version>
17         </dependency>
18 
19         <!--mybatis的包-->
20         <dependency>
21             <groupId>org.mybatis</groupId>
22             <artifactId>mybatis</artifactId>
23             <version>3.5.1</version>
24         </dependency>
25         <!--链接数据库的驱动包-->
26         <dependency>
27             <groupId>mysql</groupId>
28             <artifactId>mysql-connector-java</artifactId>
29             <version>5.1.47</version>
30         </dependency>
31     </dependencies>
32     <build>
33         <!--但愿maven在导出项目的时候,可以将咱们的配置及资源导出-->
34         <resources>
35             <resource>
36                 <directory>src/main/java</directory>
37                 <includes>
38                     <include>**/*.properties</include>
39                     <include>**/*.xml</include>
40                 </includes>
41                 <filtering>false</filtering>
42             </resource>
43             <resource>
44                 <directory>src/main/resources</directory>
45                 <includes>
46                     <include>**/*.properties</include>
47                     <include>**/*.xml</include>
48                 </includes>
49                 <filtering>false</filtering>
50             </resource>
51         </resources>
52     </build>

3.删除src目录,建立一个maven项目

3.1建立一个poji实体类

 1 package pojo;
 2 
 3 public class User {
 4     private int id;
 5     private String name;
 6     private String pwd;
 7 
 8     public User() {
 9     }
10 
11     public User(int id, String name, String pwd) {
12         this.id = id;
13         this.name = name;
14         this.pwd = pwd;
15     }
16 
17     public int getId() {
18         return id;
19     }
20 
21     public void setId(int id) {
22         this.id = id;
23     }
24 
25     public String getName() {
26         return name;
27     }
28 
29     public void setName(String name) {
30         this.name = name;
31     }
32 
33     public String getPwd() {
34         return pwd;
35     }
36 
37     public void setPwd(String pwd) {
38         this.pwd = pwd;
39     }
40 
41     @Override
42     public String toString() {
43         return "User{" +
44                 "id=" + id +
45                 ", name='" + name + '\'' +
46                 ", pwd='" + pwd + '\'' +
47                 '}';
48     }
49 }

3.2编写mybatis配置文件

 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     <!--配置环境,这里能够有多套环境 default表明默认的是那一套-->
 7     <environments default="development">
 8         <!--配置一套环境 id .环境的名字-->
 9         <environment id="development">
10             <!--transactionManager:事务管理,type:jdbc-->
11             <transactionManager type="JDBC"/>
12             <!--dataSource 数据源-->
13             <dataSource type="POOLED">
14                 <property name="driver" value="com.mysql.jdbc.Driver"/>
15                 <!--xml中不容许&符号直接出现,咱们须要使用 &amp; 代替-->
16                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;charsetEncoding=UTF-8"/>
17                 <property name="username" value="root"/>
18                 <property name="password" value="123456"/>
19 
20             </dataSource>
21         </environment>
22     </environments>
23 </configuration>

3.3,建立工具类

目的,获的SqlSessionFactory

 1 package utils;
 2 import org.apache.ibatis.io.Resources;
 3 import org.apache.ibatis.session.SqlSessionFactory;
 4 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7 
 8 //mybatis的工具类,重复的代码的提纯
 9 public class MyBatisUtils {
10     //类变量不须要设置默认值;
11     private static SqlSessionFactory sqlSessionFactory;
12     static {
13 
14         //在maven中,全部的资源文件通常都放在resources目录下,咱们能够直接拿到。
15         try {
16             String resource = "mybatis-config.xml";
17             InputStream inputStream = Resources.getResourceAsStream(resource);
18             sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
19         } catch (IOException e) {
20             e.printStackTrace();
21         }
22     }
23     //设置SqlSessionFactory公共的方法
24     public static SqlSessionFactory getSqlSessionFactory(){
25         return sqlSessionFactory;
26     }
27 }

3.4,映射文件的接口,对应原来的dao接口   增删改查数据库只需修改3.4,3.5

 1 package dao;
 2 import pojo.User;
 3 import java.util.List;
 4 
 5 public interface UserMapper {
 6     //获取所有的用户
 7     List<User> selectUser();
 8     //增长用户
 9     int addUser (User user);
10     //删除用户
11     int delUser (int id);
12     //修改
13     int  UpdetUser (User user);
14 }

3.5,编写对应的mapper映射文件

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <!--mapper标签的namespace对应Mapper接口的类-->
 6 <mapper namespace="dao.UserMapper">
 7     <!--select标签的id对应映射接口的方法名字  resultType:返回结果的类型  中间就编写sql语句-->
 8     <select id="selectUser" resultType="pojo.User">
 9         select * from user
10     </select>
11     <insert id="addUser" parameterType="pojo.User">
12         insert into user(id,name,pwd)value (#{id},#{name},#{pwd});
13     </insert>
14     <insert id="delUser">
15         delete from user where id #{id}
16     </insert>
17     <update id="UpdateUser" parameterType="pojo.User">
18         update user set name =#{name},pwd=#{pwd} where id=#{id}
19     </update>
20 
21 </mapper>

3.6,在mybatis配置文件中绑定编写映射文件

在3.2后加上映射文件

    </environments>
    <!--关联映射文件-->
    <mappers>
        <mapper resource="dao/userMapper.xml"/>
    </mappers>
</configuration>

4测试一下

在maven的test文件夹下编写对应的测试类

 1 import dao.UserMapper;
 2 import org.apache.ibatis.session.SqlSession;
 3 import org.apache.ibatis.session.SqlSessionFactory;
 4 import org.junit.Test;
 5 import pojo.User;
 6 import utils.MyBatisUtils;
 7 import java.util.List;
 8 public class UserMapperTest {
 9     @Test
10     public void selectUser(){
11         //1.拿到sqlSessionFactory对象
12         SqlSessionFactory sqlSessionFactory = MyBatisUtils.getSqlSessionFactory();
13         //2.经过sqlSessionFactory对象openSession()建立一个sqlSession。
14         SqlSession sqlSession = sqlSessionFactory.openSession();
15         //3.经过sqlSession得到mapper对象 , 参数为映射文件对应的接口类的class对象
16         UserMapper mapper = sqlSession.getMapper(UserMapper.class);
17         //4.经过mapper对象来执行操做;
18         List<User> users = mapper.selectUser();
19 
20         //得到结果集
21         for (User user : users) {
22             System.out.println(user);
23         }
24     }
25 }

5,结果展现

 6,项目结构

相关文章
相关标签/搜索