MyBatis

mybatis:

Mybatis就是一个封装来jdbc的持久层框架,它和hibernate都属于ORM框架,但是具体的说,hibernate是一个完全的orm框架,而mybatis是一个不完全的orm框架。

Mybatis让程序员只关注sql本身,而不需要去关注如连接的创建、statement的创建等操作。

Mybatis会将输入参数、输出结果进行映射。

原生的操作数据库JDBC:

public static void main(String[] args) {
            Connection connection = null;
            PreparedStatement preparedStatement = null;
            ResultSet resultSet = null;

            try {
                //1、加载数据库驱动
                Class.forName("com.mysql.jdbc.Driver");
                //2、通过驱动管理类获取数据库链接
                connection =  DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");
                //3、定义sql语句 ?表示占位符
            String sql = "select * from user where username = ?";
                //4、获取预处理statement
                preparedStatement = connection.prepareStatement(sql);
                //5、设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
                preparedStatement.setString(1, "王五");
                //6、向数据库发出sql执行查询,查询出结果集
                resultSet =  preparedStatement.executeQuery();
                //7、遍历查询结果集
                while(resultSet.next()){
                    User user 
                    System.out.println(resultSet.getString("id")+"  "+resultSet.getString("username"));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                //8、释放资源
                if(resultSet!=null){
                    try {
                        resultSet.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(preparedStatement!=null){
                    try {
                        preparedStatement.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if(connection!=null){
                    try {
                        connection.close();
                    } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }

问题总结

1、  在创建连接时,存在硬编码
配置文件(全局配置文件)
2、  在执行statement时存在硬编码
配置文件(映射文件)
3、  频繁的开启和关闭数据库连接,会造成数据库性能下降。
数据库连接池(全局配置文件)

Mybatis的框架原理

这里写图片描述

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

这里写图片描述

工程搭建

1.Mybatis的核心包和依赖包
2.MySQl的驱动包
3.Junit(非必须)

这里写图片描述

MyBtis的简单案例:
新建一个Javabean,

package mybatis_Test.response;

public class User {

    private int id;
    private String username;
    private String money;

    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 getMoney() {
        return money;
    }
    public void setMoney(String money) {
        this.money = money;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", money=" + money
                + "]";
    }

}

在创建一个MyBatis的xml配置,MyBatisConfig.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>

    <!-- 配置mybatis的环境信息,与spring整合,该信息由spring来管理 -->
    <environments default="development">
        <environment id="development">
            <!-- 配置JDBC事务控制,由mybatis进行管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源,采用mybatis连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/transaction1" />
                <property name="username" value="root" />
                <property name="password" value="123" />
            </dataSource>
        </environment>
    </environments>

    <!-- 加载映射文件 -->
    <mappers>
        <mapper resource="mybatis_Test/invoke/query_user_dao_invoke.xml"/>
    </mappers>
</configuration>

创建一个根据id查询用户的接口:

package mybatis_Test.invoke;

import java.io.IOException;

import mybatis_Test.response.User;

public interface QueryUserDaoInvoke {

    User findUserById(int id) throws IOException;
}

创建这个接口对应的xml文件,query_user_dao_invoke.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">

<mapper namespace="mybatis_Test.invoke.QueryUserDaoInvoke">

    <select id="findUserById" parameterType="int" resultType="mybatis_Test.response.User">
        select * from account where id=#{id}
    </select>
</mapper>

最后写一个测试类:

package test;

import java.io.IOException;
import java.io.InputStream;
import mybatis_Test.invoke.QueryUserDaoInvoke;
import mybatis_Test.response.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

public class DemoTest {

    @Test
    public void test() throws IOException{
//      QueryUserApi api = new QueryUserApi();
//      User user = api.findUserById(1);
//      System.out.println(user);

        //mybatis的配置文件
        String resource = "config/MyBatisConfig.xml";
        //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
        InputStream is = DemoTest.class.getClassLoader().getResourceAsStream(resource);
        //构建sqlSession的工厂
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
        //Reader reader = Resources.getResourceAsReader(resource);
        //构建sqlSession的工厂
        //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //创建能执行映射文件中sql的sqlSession
        SqlSession session = sessionFactory.openSession();
        /**
         * 映射sql的标识字符串,
         * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
         * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
         */
//        String statement = "com.company.User.getUser";//映射sql的标识字符串

        QueryUserDaoInvoke userMapper = session.getMapper(QueryUserDaoInvoke.class);

        //执行查询返回一个唯一user对象的sql
        User user = userMapper.findUserById(1);
        System.out.println(user);

        session.close();
    }
}

打印结果:

log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
User [id=1, username=fly, money=60]

所有的路径都是src下面的路径。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值