码迷,mamicode.com
首页 > 其他好文 > 详细

1-----Mybatis简介

时间:2020-06-16 14:56:52      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:--   creates   ati   映射   简单   路径加载   serve   复杂   通过   

没有mybatis

建表

技术图片

技术图片

 查询

import java.sql.*;

public class DatabaseTest {

    public static void main(String[] args) throws SQLException, ClassNotFoundException {

        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8", "root", "123456");
        Statement statement = conn.createStatement();
        String sql = "select * from user where id = ?";
        PreparedStatement preparedStatement = conn.prepareStatement(sql);
        preparedStatement.setInt(1, 2);
        ResultSet resultSet = preparedStatement.executeQuery();
//        ResultSet resultSet = statement.executeQuery(sql);
        while (resultSet.next()){
            System.out.println(resultSet.getInt(1));
            System.out.println(resultSet.getString(2));
            System.out.println(resultSet.getString(3));
        }
    }
}

 

直接给你整懵!

技术图片

statement与preparedment

个人总结:就是一个端茶送水的店小二。。。将sql语句提交给mysql;并将结果集拿回来。

preparedment是比较高级的店小二,会预编译,而且可以自定义查询值,不像statement每次sql语句都得拼接。

快就完事了preparedment

反正很复杂。

mybatis

简介

  1. 一款优秀的持久层框架。----------------------------就是数据库
  2. 避免几乎所有的JDBC代码和手动设置参数以及获取结果集的过程------------------------------就是全自动呗,不用再自己配statement和preparedment
  3. mybatis可以使用简单的XML或者注解来配置映射原生信息,将接口和Java的实力类相互映射。---------------------------------------数据库中有一个表叫作user,那么java中有一个类叫作user,字段间都相互对应。
  4. 以前叫作ibatis
  5. 现在再github上也有

持久化

数据可以保持很久,就是保存在磁盘中呗。

持久层

完成持久化工作的代码块------->dao(data access object) 数据访问对象

为什么需要mybatis

  • 帮助存数据、取数据

  • 传统太繁琐
  • 半自动的ORM框架(Object Relationship Mapping)----->对象关系映射

优点:简单、灵活、解除sql语句与程序代码的耦合

简单的mybatis程序

mybatis的执行流程

技术图片

 

 

 

技术图片

 

 

 实体类-----Lombok插件有问题,导不进去

package com.sicheng.entity;


public class User {

    private int id;
    private String name;
    private String pwd;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public User(int id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }

    public User() {
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name=‘" + name + ‘\‘‘ +
                ", pwd=‘" + pwd + ‘\‘‘ +
                ‘}‘;
    }
}

 

 

查找类---也就是dao类

就是通过各种姿势查找访问数据库的类

例如:通过主键查找、名字查找、、、、、

package com.sicheng.dao;

import com.sicheng.entity.User;

import java.util.List;

public interface UserMapper {

    List<User> selectUser();
}

Mybatis的配置文件

应该看的懂吧

<?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">
<configuration>
    <!-- 这里写配置内容 -->
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=GMT%2B8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/sicheng/dao/userMapper.xml"/>
    </mappers>
</configuration>

 

与dao类相互映射的,mapper文件

<?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">

<mapper namespace="com.sicheng.dao.UserMapper">
    <select id="selectUser" resultType="com.sicheng.entity.User">
        select * from user;
    </select>
</mapper> 

MybatisUtils

用于生产session

package com.sicheng.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MybatisUtils {

    private static SqlSessionFactory sqlSessionFactory;

    static{
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = null;
            inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSession(){
        return sqlSessionFactory.openSession();
    }
}

Test

import com.sicheng.dao.UserMapper;
import com.sicheng.entity.User;
import com.sicheng.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class MybatisTest {

    @Test
    public void selectUser(){
        SqlSession session = MybatisUtils.getSession();
        UserMapper userMapper = session.getMapper(UserMapper.class);
        List<User> users = userMapper.selectUser();
        for (User user :users) {
            System.out.println(user);
        }
    }
}

 

注意事项

  • Mapper文件当中,一定要写namespace,指明这是哪个dao类的映射文件
  • mapper文件中 id 一定是那个dao类的方法。

技术图片

 

 

 补充知识

xml中的   &amp;   是个啥?

xml当中不能显示的符号 以及 如何进行转义

&lt; < 小于号
&gt > 大于号
&amp &
&apos 单引号
&quot " 双引号

 

 

 

 

 

 

第二种方法:

<![CDATA[
   内部的所有内容都会被解析器忽略
]]>

 

数据库连接中

jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=GMT%2B8

 

要写时间区间的,保证安全性?

Resources类

Resources 类为从类路径中加载资源,提供了易于使用的方法。

技术图片

 

技术图片

 

所以才在加载时,直接使用mybatis-config.xml这个路径名

技术图片

 

Resources类的常用情况

  • 从类路径下加载SQL Map配置文件
  • 从类路径加载DAO Manager配置文件
  • 从类路径机在各种.properties文件

Resources类加载一个资源的方式

  • 对于简单的只读文本数据,加载为Reader
  • 对于简单的只读二进制或者文本数据,加载为Stream;
  • 对于读写二进制或文本文件,加载为File.
  • 对于只读的配置文件,加载为Properties
  • 对于只读的通用资源,加载为URL

根据加载方式不同,加载资源的方法如下

Reader getResoutceAsReader(String resource)

Stream getResourceAsStream(String resource)

File getResourceAsFile(String resource)

Properties getResourceAsProperties(String resource);

Url getResourceAsUrl(String resource)

 

技术图片

 

1-----Mybatis简介

标签:--   creates   ati   映射   简单   路径加载   serve   复杂   通过   

原文地址:https://www.cnblogs.com/sicheng-li/p/13140705.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!