mybatis框架之入门(代码片段)

qingmuchuanqi48 qingmuchuanqi48     2022-12-03     461

关键词:

什么是框架

  框架就是一个架子,表演节目,舞台已经搭建好,表演什么节目,看自己的需求了。

  框架是一个半成品,对于Java语言来说,框架就是封装了别人的代码。在框架的基础上我们在进一步开发,拿来主义

框架解决什么问题

解决的是技术整合问题。软件开发环境和规模都很大,不可能任何一个项目的代码都从零开始,此时就需要一个非常优秀的框架把基础技术整合完毕,我们在他的基础上进一步开发。提高性能,易扩展,易维护,最终提高整个团队的开发效率。

什么时候使用框架

企业级大型项目开发,避免大炮打蚊子。

怎么使用框架

Java的框架是具有一些共性

  • 导入jar包

  • 框架运行细节定义,也就是编写配置文件(xml)

  • 调用框架中的api

原生JDBC案例

  • 查询user表

  • 以List集合形式返回

  • 编写pojo类 (User)

  • domain,pojo本质都是相同的

技术图片

domain中的User类

package com.qingmu.domain;

/**
 * @Auther:qingmu
 * @Description:脚踏实地,只为出人头地
 * @Date:Created in 19:53 2019/3/21
 */
public class User 
    private int id;

    private String username;

    private String sex;

    private String birthday;

    private String address;
    @Override
    public String toString() 
        return "User" +
                "id=" + id +
                ", username=‘" + username + \\‘ +
                ", sex=‘" + sex + \\‘ +
                ", birthday=‘" + birthday + \\‘ +
                ", address=‘" + address + \\‘ +
                ;
    

    public int getId() 
        return id;
    

    public void setId(int id) 
        this.id = id;
    

    public String getUsername() 
        return username;
    

    public void setUsername(String username) 
        this.username = username;
    

    public String getSex() 
        return sex;
    

    public void setSex(String sex) 
        this.sex = sex;
    

    public String getBirthday() 
        return birthday;
    

    public void setBirthday(String birthday) 
        this.birthday = birthday;
    

    public String getAddress() 
        return address;
    

    public void setAddress(String address) 
        this.address = address;
    


数据库的结构为:
技术图片

Dao层的接口

package com.qingmu.Dao;

import com.qingmu.domain.User;

import java.sql.SQLException;
import java.util.List;

/**
 * @Auther:qingmu
 * @Description:脚踏实地,只为出人头地
 * @Date:Created in 19:55 2019/3/21
 */
public interface UserDao 
    List<User> userList() throws ClassNotFoundException, SQLException;

Dao层的实现类

package com.qingmu.Dao.Iml;

import com.qingmu.Dao.UserDao;
import com.qingmu.domain.User;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @Auther:qingmu
 * @Description:脚踏实地,只为出人头地
 * @Date:Created in 19:56 2019/3/21
 */

/**
 * 原生的jdbc的开发步骤为:
 * 1.获取驱动
 * 2.获取连接
 * 3.获取操作sql语句的对象
 * 4.获取结果集
 * 5.处理结果集
 * 6.释放资源
 */
public class UserDaoImpl implements UserDao 

    //    将driverClass,url,username,password作为这个类的成员变量
    private String driverClass = "com.mysql.jdbc.Driver";
    private String url = "jdbc:mysql://localhost:3306/mybatis?CharacterEncoding=utf-8";
    private String username = "root";
    private String password = "root";

    /**
     * 查询数据中的所有数据
     *
     * @return
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    @Override
    public List<User> userList() throws ClassNotFoundException, SQLException 
//        创建一个集合,将所有的结果集存储在list集合中,
        List<User> list = new ArrayList<User>();
//        注册驱动,使用反射进行加载
        Class.forName(driverClass);
//        获取连接
        Connection connection = DriverManager.getConnection(url, username, password);
//        获取执行sql语句的对象
        String sql = "select * from user";
        PreparedStatement psmt = connection.prepareStatement(sql);
//        获取结果集
        ResultSet rs = psmt.executeQuery();
        User user = null;
//        处理结果集
        while (rs.next()) 
            user = new User();
//            将结果集中的数据通过getObject()的方法取出来,存到javaBean中
            user.setId(rs.getInt("id"));
            user.setUsername(rs.getString("username"));
            user.setBirthday(rs.getString("birthday"));
            user.setSex(rs.getString("sex"));
            user.setAddress(rs.getString("address"));
            list.add(user);
        
//        释放资源.
        rs.close();
        psmt.close();
        connection.close();
//        返回集合
        return list;
    

Test类:

package com.qingmu;

import com.qingmu.Dao.Iml.UserDaoImpl;
import com.qingmu.Dao.UserDao;
import com.qingmu.domain.User;
import org.junit.Test;

import java.sql.SQLException;
import java.util.List;

/**
 * @Auther:qingmu
 * @Description:脚踏实地,只为出人头地
 * @Date:Created in 20:06 2019/3/21
 */
public class MainTest 

    @Test
    public void testJdbc() throws SQLException, ClassNotFoundException 
        UserDao userDao = new UserDaoImpl();
        List<User> users = userDao.userList();
        for (User user : users) 
            System.out.println(user);
        
    

原生JDBC案例的问题

  频繁连接,释放数据库资源,

  降低系统性能SQL语句硬编码,

  难以维护参数和占位符对应问题

  结果集解析复杂,列名硬编码


MyBatis框架

 

Mybatis原本是Apache软件基金会的一个开源项目叫做iBatis,2010年这个项目由
Apache迁移到了goole code管理才改名为Mybatis,2013年又迁移到了GitHub。
Mybatis是一个优秀的持久层框架(Dao层框架)它是对JDBC的封装,使得开发者只需
要关注Sql语句(业务)本身即可,无需开发者处理加载驱动、获取连接、创建
Statement等繁琐的过程。


Mybatis最大的特点是把Sql语句写在XML配置文件当中。而且Mybatis执行完Sql语句之
后可以以对象形式返回(POJO/POJO集合等)


Mybatis是一个实现了ORM思想的持久层框架。
ORM:Object/Relation Mapping 对象/关系映射。


ORM思想:将数据库中的关系数据表映射为JAVA中的对象,把对数据表的操作转换为对
对象的操作,实现面向对象编程。因此ORM的目的是使得开发人员以面向对象的思想来
操作数据库。
比如:原来insert使用的是insert into…,如果使用实现了ORM思想的持久层框架,就可
以在Java程序中直接调用api,比如insert(User),达到操作对象即操作数据库的效果。
Hibernate框架是一个全自动的ORM持久层框架,只需要编写POJO,在xml中定义好
Pojo属性和数据表字段的映射/对应关系,就可以在java中实现类似 insert(User)的操
作。Sql语句都不用写。但是因为性能等问题,市场占有率越来越低
Mybatis框架是一个半自动的ORM持久层框架,也可以在Java中实现类似 insert(User)的
操作最终操作数据库,但是需要我们自己写Sql语句。Mybatis是目前比较流行的Dao层框
架。

 

 

 

 

自定义MyBatis框架:

    完整性和严谨性不能和真实的相比,只是自己按照MyBatis框架的思想,将这个过程进行的一个简单的拼接.

技术图片

上图为实现MyBatis时候的结构思路图:

这是代码的结构图

技术图片

 

 开始上代码:

 pom.xml的依赖为

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.qingmu</groupId>
  <artifactId>mybatis_qingmu_328</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>mybatis_qingmu_328</name>
  <!-- FIXME change it to the project‘s website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <!--使用xpath引入-->
    <dependency>
      <groupId>jaxen</groupId>
      <artifactId>jaxen</artifactId>
      <version>1.1.6</version>
    </dependency>
    <!--使用dom4j解析-->
    <dependency>
      <groupId>dom4j</groupId>
      <artifactId>dom4j</artifactId>
      <version>1.6.1</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.26</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

pojo包下的三个类:

配置文件类

Configuration 
package com.qingmu.pojo;

import java.util.HashMap;
import java.util.Map;

/**
 * @Auther:qingmu
 * @Description:脚踏实地,只为出人头地
 * @Date:Created in 16:21 2019/3/28
 */
public class Configuration 
    private String driver;
    private String url;
    private String username;
    private String password;

    /**
     *   * Map集合键,通过namespace+"."+id 锁定唯一SQL语句
     *   * Map集合值,Mapper对象,封装结果集pojo和SQL语句
     *   
     */
    private Map<String, Mapper> map = new HashMap<String, Mapper>();

    public String getDriver() 
        return driver;
    

    public void setDriver(String driver) 
        this.driver = driver;
    

    public String getUrl() 
        return url;
    

    public void setUrl(String url) 
        this.url = url;
    

    public String getUsername() 
        return username;
    

    public void setUsername(String username) 
        this.username = username;
    

    public String getPassword() 
        return password;
    

    public void setPassword(String password) 
        this.password = password;
    
    @Override
    public String toString() 
        return "Configuration" +
                "driver=‘" + driver + ‘\\‘‘ +
                ", url=‘" + url + ‘\\‘‘ +
                ", username=‘" + username + ‘\\‘‘ +
                ", password=‘" + password + ‘\\‘‘ +
                ", map=" + map +
                ‘‘;
    

    public Map<String, Mapper> getMap() 
        return map;
    

    public void setMap(Map<String, Mapper> map) 
        this.map = map;
    

User类

package com.qingmu.pojo;

import java.util.Date;

/**
 * @Auther:qingmu
 * @Description:脚踏实地,只为出人头地
 * @Date:Created in 21:10 2019/3/28
 */
public class User 
    private int id;
    private String username;
    private String sex;
    private Date birthday;
    private String address;

    public int getId() 
        return id;
    

    public void setId(int id) 
        this.id = id;
    

    public String getUsername() 
        return username;
    

    public void setUsername(String username) 
        this.username = username;
    

    public String getSex() 
        return sex;
    

    public void setSex(String sex) 
        this.sex = sex;
    

    public Date getBirthday() 
        return birthday;
    

    public void setBirthday(Date birthday) 
        this.birthday = birthday;
    

    public String getAddress() 
        return address;
    

    public void setAddress(String address) 
        this.address = address;
    

    @Override
    public String toString() 
        return "User" +
                "id=" + id +
                ", username=‘" + username + ‘\\‘‘ +
                ", sex=‘" + sex + ‘\\‘‘ +
                ", birthday=‘" + birthday + ‘\\‘‘ +
                ", address=‘" + address + ‘\\‘‘ +
                ‘‘;
    

Mapper类:

package com.qingmu.pojo;

/**
 * @Auther:qingmu
 * @Description:脚踏实地,只为出人头地
 * @Date:Created in 16:47 2019/3/28
 */
public class Mapper 
    private String sql;
    private String resultType;

    @Override
    public String toString() 
        return "Mapper" +
                "sql=‘" + sql + ‘\\‘‘ +
                ", resultType=‘" + resultType + ‘\\‘‘ +
                ‘‘;
    

    public String getSql() 
        return sql;
    

    public void setSql(String sql) 
        this.sql = sql;
    

    public String getResultType() 
        return resultType;
    

    public void setResultType(String resultType) 
        this.resultType = resultType;
    

resource包中的两个配置文件

SqlMapConfig文件

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="UserMapper.xml"></mapper>
    </mappers>
</configuration>

UserMapper文件

<?xml version="1.0" encoding="utf-8" ?>

<mapper namespace="test">
    <select id="queryUserList" resultType="com.qingmu.pojo.User">
        select * from user
    </select>
</mapper>

fram包下的三个类

sqlsessionFactoryBuilder类

package com.qingmu.fram;

/**
 * @Auther:qingmu
 * @Description:脚踏实地,只为出人头地
 * @Date:Created in 16:20 2019/3/28
 */

import com.qingmu.pojo.Configuration;
import com.qingmu.pojo.Mapper;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.InputStream;
import java.util.List;

/**
 * sqlSessionFactory工厂构建者
 * 读取xml文件
 */
public class SqlSesisonFactoryBuilder 
    /**
     * 返回sqlsessionFactory工厂
     * 接收一个字节输入流
     * 用户携带流
     */
    public SqlSessionFactory builder(InputStream inputStream) 
//        创建一个工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactory();
//    获取配置文件对象,读取sqlMapperConfig.xml文件
        Configuration configuration = loadXmlconfig(inputStream);
//        将配置文件对象,传入到sqlSessionFactory中
        sqlSessionFactory.setConfiguration(configuration);
        return sqlSessionFactory;
    

    /**
     * 解析xml文件用来装配配置对象
     *
     * @param inputStream
     * @return
     */
    private Configuration loadXmlconfig(InputStream inputStream) 
//        获取配置文件对象
        Configuration configuration = new Configuration();
//        使用dom4j读取文件
        SAXReader saxReader = new SAXReader();
        try 
//            读取xml文件,获取到document对象
            Document document = saxReader.read(inputStream);
//            获取根标签
            Element rootElement = document.getRootElement();
//            使用xpath表达式读取文件(可以读取节点)
            List<Element> list = rootElement.selectNodes("//property");
            if (list != null && list.size() > 0) 
                for (Element element : list) 
//                    属性值
                    String name = element.attributeValue("name");
                    String value = element.attributeValue("value");
                    if ("driver".equals(name)) 
                        configuration.setDriver(value);
                     else if ("url".equals(name)) 
                        configuration.setUrl(value);
                     else if ("password".equals(name)) 
                        configuration.setUsername(value);
                     else if ("username".equals(name)) 
                        configuration.setPassword(value);
                    
                
            
//            解析mapper标签
            List<Element> list1 = rootElement.selectNodes("//mapper");
            if (list1 != null && list1.size() > 0) 
                for (Element element : list1) 
//                    获取出来xml文件名字,用来绑定流对象,用来读取文件
                    String resource = element.attributeValue("resource");
//                    解析UserMapper文件的方法
                    loadSqlConfig(resource, configuration);
                
            
         catch (Exception e) 
            e.printStackTrace();
        
        return configuration;
    

    /**
     * 解析UserMapper文件的方法
     * @param resource
     * @param configuration
     */
    private void loadSqlConfig(String resource, Configuration configuration) 
//       用来绑定流对象,用来读取文件
        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(resource);
        SAXReader saxReader = new SAXReader();
        try 
//            获取出来doucument对象
            Document document = saxReader.read(inputStream);
//            获取根标签
            Element rootElement = document.getRootElement();
//            使用根标签获取出来namespace属性
            String namespace = rootElement.attributeValue("namespace");
//            获取节点
            List<Element> list = rootElement.selectNodes("//select");
            if (list != null && list.size() > 0) 
                for (Element element : list) 
//                    获取标签内的文本(sql)
                    String sql = element.getText();
//                    获取结果类型
                    String resultType = element.attributeValue("resultType");
//                    获取出来id
                    String id = element.attributeValue("id");
                    Mapper mapper = new Mapper();
                    mapper.setSql(sql);
                    mapper.setResultType(resultType);
                    configuration.getMap().put(namespace + "." + id, mapper);
                
            

         catch (Exception ex) 
            ex.printStackTrace();
        
    

sqlSessionFacyory类

package com.qingmu.fram;

import com.qingmu.pojo.Configuration;

/**
 * @Auther:qingmu
 * @Description:脚踏实地,只为出人头地
 * @Date:Created in 16:19 2019/3/28
 */
public class SqlSessionFactory 

    private Configuration configuration;

    public void setConfiguration(Configuration configuration) 
        this.configuration = configuration;
    

    /**
     * 获取出来sqlSession对象
     */
    public SqlSession openSession()
        return  new SqlSessionImpl(configuration);
    


sqlSession接口

package com.qingmu.fram;

import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.List;

/**
 * @Auther:qingmu
 * @Description:脚踏实地,只为出人头地
 * @Date:Created in 16:58 2019/3/28
 */
public interface SqlSession 
    public <T> List<T> selectList(String sqlId) throws ClassNotFoundException, SQLException, IllegalAccessException, InstantiationException, InvocationTargetException;

sqlSession实现类

package com.qingmu.fram;

import com.qingmu.pojo.Configuration;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @Auther:qingmu
 * @Description:脚踏实地,只为出人头地
 * @Date:Created in 16:57 2019/3/28
 */
public class SqlSessionImpl implements SqlSession 
    //    xml文件配置对象
    private Configuration configuration;
    private String driverClass ;
    private String url ;
    private String username ;
    private String password ;
//使用构造方法进行初始化
    public SqlSessionImpl(Configuration configuration) 
        this.configuration = configuration;
        driverClass = configuration.getDriver();
        url = configuration.getUrl();
        username = configuration.getUsername();
        password = configuration.getPassword();
    

    @Override
    public <T> List<T> selectList(String sqlId) throws ClassNotFoundException, SQLException, IllegalAccessException, InstantiationException, InvocationTargetException 
//       创建一个空的集合,用来存储需要存放的元素
        List<T> arrayList = new ArrayList<T>();
//        使用反射获取驱动
        Class.forName(driverClass);
//        获取连接
        Connection connection = DriverManager.getConnection(url, username, password);
//        获取到sql语句
        String sql = configuration.getMap().get(sqlId).getSql();
//        创建操作sql语句的对象
        PreparedStatement psmt = connection.prepareStatement(sql);
//        获取结果集
        ResultSet resultSet = psmt.executeQuery();
//        获取出来元数据
        ResultSetMetaData metaData = resultSet.getMetaData();
//        创建一个集合用来存储列名
        ArrayList<String> cloumnNamelist = new ArrayList<>();
//        如果小于的话,会少最好一列(获取到列的总数为metaData.getColumnCount())
        for(int i=1;i<=metaData.getColumnCount();i++)
//            获取出来列名,并存储到集合中
            cloumnNamelist.add(metaData.getColumnName(i));
        
        Object obj = null;
//        配置文件,获取结果集封装的pojo对象的全限定名
        String resultType = configuration.getMap().get(sqlId).getResultType();
//        使用反射获取出来User类
        Class<?> clazz = Class.forName(resultType);
//        通过反射获取到方法(表示类或者接口声明的所有方法.)
        Method[] methods = clazz.getDeclaredMethods();
//        处理结果集
        while(resultSet.next())
//            反射创建对象
             obj = clazz.newInstance();
//             遍历集合,获取列名
            for (String cloumnName : cloumnNamelist) 
//                通过列名,获取到列中所对应的值
                Object columvalue = resultSet.getObject(cloumnName);
                System.out.println(columvalue);
//                遍历方法数组
                for (Method method : methods) 
//                    获取到方法名
                    String methodName = method.getName();
//                    判断列名是否和set+方法名相同
                    if(methodName.equalsIgnoreCase("set"+cloumnName))
//                        调用方法,并进行传参
                        method.invoke(obj,columvalue);
                    
                
            
//           对象存储到集合
            arrayList.add((T)obj);
        
        return arrayList;
    

Test类

package com.qingmu;

import com.qingmu.fram.SqlSesisonFactoryBuilder;
import com.qingmu.fram.SqlSession;
import com.qingmu.fram.SqlSessionFactory;
import com.qingmu.pojo.User;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.List;

/**
 * @Auther:qingmu
 * @Description:脚踏实地,只为出人头地
 * @Date:Created in 21:13 2019/3/28
 */
public class ATest 
    @Test
    public void mybatisTest() throws ClassNotFoundException, SQLException, InvocationTargetException, InstantiationException, IllegalAccessException, IOException 
//       创建工厂创建者对象
        SqlSesisonFactoryBuilder sqlSesisonFactoryBuilder = new SqlSesisonFactoryBuilder();
//        使用本类,类加载器获取流,并且绑定 读取sqlMapConfig.xml文件
        InputStream inputStream = ATest.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
//        使用工厂创建者对象,传入流,创建工厂对象
        SqlSessionFactory sqlSessionFactory = sqlSesisonFactoryBuilder.builder(inputStream);
//        调用对象,创建sqlsession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
//        使用selectList方法,传入唯一标识,获取到一个集合.
        List<User> userList = sqlSession.selectList("test.queryUserList");
        if(userList != null && userList.size() > 0)
            for(User user : userList)
                System.out.println(user);
            
        
        inputStream.close();
    

最后的结果为:

技术图片

 

java之springboot入门到精通idea版springboot整合其他框架junit,redis,mybatis(一篇文章精通系列)中(代码片段)

SpringBoot整合其他框架【Junit,Redis,MyBatis】一、SpringBoot整合Junit①搭建SpringBoot工程②引入starter-test起步依赖③编写测试类(1)在启动类傍边其他类④添加测试相关注解⑤编写测试方法二、SpringBoot整合Redis1、搭建SpringBoot工... 查看详情

mybatis框架理解与快速入门详解(代码片段)

文章目录0.引言:软件框架技术简介1.MyBatis简介1.1.ORM思想的提出1.2.MyBatis框架1.3原始jdbc操作(查询数据)1.4原始jdbc操作(插入数据)1.5原始jdbc操作的分析1.6Mybatis是什么操作?1.7Mybatis的快速入门1.7.1环境搭... 查看详情

ssm框架快速整合实例--学生查询(代码片段)

一、快速准备SSM框架即Spring框架、SpringMVC框架、MyBatis框架,关于这几个框架的基础和入门程序,我前面已经写过几篇文章作为基础和入门介绍了。对于这3个框架还不熟悉的同学,可以参考一下几篇文章:【SSH框架】之Spring系列... 查看详情

史上最全mybatis框架入门教程,从零开始带你深入♂学习——mybatis入门(代码片段)

Mybatis框架(一)mybatis入门mybatis的使用mybatis中文文档:https://mybatis.org/mybatis-3/zh/index.html如果使用Maven来构建项目,则需将下面的依赖代码置于pom.xml文件中:<dependency><groupId>org.mybatis</groupI 查看详情

mybatis进阶之自定义mybatis框架(代码片段)

MyBatis进阶之自定义MyBatis框架1.自定义MyBatis框架流程分析2.自定义框架原理介绍3.准备工作:1)创建maven工程Groupid:com.itheimaArtifactId:custom-mybatisPacking:jar2)添加pom依赖:<dependency><groupId>mysql</groupId&g 查看详情

mybatis(代码片段)

...述 1.什么是框架 2.三层架构 3.持久层技术解决方案 4.mybatis概述 5.mybatis的环境搭建 6.mybatis入门案例自定义Mybatis框架Mybatis框架快速入门框架概述 1.什么是框架    它是我们软件开发中的一套解决方案,不同的框架解决... 查看详情

java持久层框架mybatis入门(代码片段)

MyBatis是什么MyBatis是Java的持久层框架,GitHub的star数高达15.8k,是Java技术栈中最热门的ORM框架之一。它支持自定义SQL、存储过程以及高级映射,可以通过XML或注解来配置和映射原始类型、接口和JavaPOJOs为数据库中的记录。POJOs,Pla... 查看详情

ssm框架快速整合的实例-学生查询(代码片段)

...学生查询一、快速准备SSM框架即Spring框架、SpringMVC框架、MyBatis框架,关于这几个框架的基础和入门程序,我前面已经写过几篇文章作为基础和入门介绍了。对于这3个框架还不熟悉的同学,可以参考一下几篇文章:【SSH框架】之S... 查看详情

mybatis从入门到精通—源码剖析之二级缓存细节(代码片段)

⼆级缓存构建在⼀级缓存之上,在收到查询请求时,MyBatis⾸先会查询⼆级缓存,若⼆级缓存未命中,再去查询⼀级缓存,⼀级缓存没有,再查询数据库。⼆级缓存------》⼀级缓存------》数据库与⼀级缓存不同,⼆级缓存和具体... 查看详情

mybatisjava持久层框架入门与实践|学习笔记(代码片段)

...框架入门与实践|学习笔记导读本篇文章将带领读者学习MyBatis框架。开始文章简述MyBatis。之后将手把手的搭建一个简单的MyBatis框架的测试,先跑起来。随后将基于该测试讲解MyBatis框架中重要的几个配置文件。然后对于数据... 查看详情

mybatis入门(代码片段)

MyBatis入门注意:此处JavaWeb项目只涉及普通Maven项目,未整合SSM、SpringBoot等1、MyBatis概述MyBatis官网:https://mybatis.org/mybatis-3/zh/index.html什么是MyBatis?MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis... 查看详情

mybatis框架之注解开发(代码片段)

MyBatis注解开发@Insert注解注解属性value:写入SQL语句@Options注解实现添加新数据的主键封装注解属性useGeneratedKeys:使用生成的主键,配置为truekeyProperty:主键封装的pojo对象属性@SelectKey注解实现添加新数据的主键封装注解属性statemen... 查看详情

深入浅出mybatis之快速入门!

简介MyBatis的前身叫iBatis,本是apache的一个开源项目,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis。MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参... 查看详情

深入浅出mybatis之快速入门!

简介MyBatis的前身叫iBatis,本是apache的一个开源项目,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis。MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参... 查看详情

javaee框架——mybatis入门和和使用(增删改查,缓存)(代码片段)

一、简介:MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框... 查看详情

ssm框架专题-mybatis框架从零入门老杜版笔记(上)(代码片段)

MyBatis框架从零入门老杜版笔记(上)一、MyBatis概述1.1框架framework1.2MyBatis和JDBC的关系1.3JDBC不足1.4了解MyBatis1.5了解ORM二、MyBatis入门程序2.1建数据库表2.2加载mybatis的五个步骤2.3MyBatis中的事务2.4编写MyBatis代码2.5在MyBatis中引... 查看详情

mybatis入门(代码片段)

一、什么是mybatis  mybatis是一个持久层的框架。持久层就是操作硬盘中的数据mybatis是操作数据库中的数据(实际上数据库中的的数据也是硬盘中的数据)操作数据技术有原生的JDBC、HIbernate和Mybatis二、回顾原生JDBCpublicstaticvoidma... 查看详情

mybatis-plus入门之activerecord模式(代码片段)

ActiveRecord介绍每一个数据库表对应创建一个类,类的每一个对象实例对应于数据库中表的一行记录;通常表的每个字段在类中都有相应的Field;ActiveRecord负责把自己持久化.在ActiveRecord中封装了对数据库的访问,通过对象自己... 查看详情