初谈Mybatis

Mybatis简介

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。是一个基于Java的持久层框架,本身就是基于JDBC封装的,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。可以使用简单的XML或者注解来配置和映射原生类型、接口和java的POJO为数据库中记录。

JDBC原始方法查询数据库

           // 1.加载数据库驱动
           Class.forName("com.mysql.jdbc.Driver");
           // 2.创建并获取数据库连接
           Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis", "root", "root");
           // 3.使用Connection创建一个PrepareStatement对象。需要sql语句。
           PreparedStatement prepareStatement = connection.prepareStatement("select * from user where id = ?");
           // 4.设置参数
           prepareStatement.setInt(1, 10);
           // 5.执行查询
           ResultSet resultSet = prepareStatement.executeQuery();
           // 6.获取查询结果
           while(resultSet.next()){
                System.out.println(resultSet.getString("id")+"..."+resultSet.getString("username"));
           }
           // 7.释放资源
           resultSet.close();
           prepareStatement.close();
           connection.close();
     }

存在的问题:

  • 数据库驱动加载存在硬编码问题
  • 数据库连接串、用户名、密码存在硬编码问题
  • sql语句存在硬编码问题
  • 设置参数硬编码
  • 最好是把结果封装到java对象中。
  • 应该使用数据库连接池

MyBatis入门程序

1.创建工程,创建依赖(maven)

 <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
	<version>3.5.1</version>
 </dependency>

2.创建jdbc.properties配置文件
    代码如下:

jdbc.url=jdbc:mysql://localhost:3306/mybatis
dbc.driver=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=root
jdbc.characterEncoding=utf8

3.创建mybatis_conf.xml配置文件
    代码如下:

<?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>
<!--引入properties文件 -->
    <properties resource="jdbc.properties" />
    <typeAliases>
        <typeAlias type="com.xxx.mybatis.bean.Student" alias="Student" />
    </typeAliases>
     <!-- 和spring整合后 environments配置将废除-->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理-->
            <transactionManager type="JDBC"/>
            <!-- 数据库连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.user}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

    mybatis_conf.xml是mybatis核心配置文件,上边文件的配置内容为数据源、事务管理。
4.创建pojo类

@Getter
@Setter
public class Student {
    private String cname;
    private Integer id;

    public Student() {}

    public Student(String cname, Integer id) {
        this.cname = cname;
        this.id = id;
    }

    @Override
    public String toString() {
        return "{" +
                "cname='" + cname + '\'' +
                ", id='" + id + '\'' +
                "}\n";
    }
}

5.sql映射文件(Mapper.xml)

<?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对应空Dao接口的全名 -->
<mapper namespace="com.xxx.mybatis.dao.StudentDao">
    <!-- 此处的id是查询语句的名称,对应接口中的方法名 -->
    <select id="queryAll" resultType="Student ">
     select * from user;
  </select>
</mapper>

6.加载映射文件
mybatis框架需要加载映射文件,将下面的代码加到mybatis_conf.xml中:

 <mappers>
        <mapper resource="mapper/Mapper.xml" />
    </mappers>

7.测试
    读入配置文件后,构建一个SqlSessionFactory获取sqlSession随后获取Mapper调用dao层中的方法查询数据库信息,代码如下:

         // 1. 读入配置文件
        String confPath = "mybatis_conf.xml";
        InputStream in = Resources.getResourceAsStream(confPath);

        // 2. 构建SqlSessionFactory(用于获取sqlSession)
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);

        // 3. 获取sqlSession对象(用于具体的CRUD)
        SqlSession sqlSession = sessionFactory.openSession();

        StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
        List<Student> studentList = studentDao.queryAll();
        log.info("studentList: " +studentList);//需要添加@slf4j

    获取sqlSession有两种方法一种是上面所讲通过sessionFactory中获取,另一种则是通过mybatis的SqlSessionFactory托管给Spring容器后,通过配置spring xml文件和注解来获取。
8.其他
    sql语句若是动态的where条件后是?我们则需要在sql语句后面添加#{}和 来 获 取 但 是 这 两 种 占 位 符 也 有 区 别 : {}来获取但是这两种占位符也有区别: {}:作用是字符串拼接,如果参数是简单数据类型那么括号中必须是value,如果参数是实现类类型,括号中应该是实现类的属性。
    #{}是预编译处理(PreparedStatement),相当于原来的?,而KaTeX parse error: Expected 'EOF', got '#' at position 20: …符串替换。Mybatis在处理#̲时,会调用PreparedSt…时,就是把KaTeX parse error: Expected 'EOF', got '#' at position 11: {}替换成变量的值。#̲方式能够很大程度防止sql注入…方式一般用于传入数据库对象,例如传入表名,一般能用#的就别用$。
    至此简单的mybatis基本知识解释得差不多了,更深的知识等以后再次探讨。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值