使用Mybatis框架

          mybatis是一个基于java得持久层框架。

          1、mybatis架构图:

          1)mybatis配置文件详解

                    SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

                    mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

          2)实现原理
                    a.通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂。

                    b.由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

                    c.mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

                    d.Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

                    e.Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

                    f.Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

 

2、使用mybatis框架

          1)搭建一个java项目,新建一个lib文件夹,存放mybatis所需要用到得jar包

          若要连接数据库,还需要一个连接驱动jar包,第一个是mysql的连接驱动,第二个是oracle的连接驱动

          2)添加配置文件

                    放置于src同级目录,log4j配置文件不用修改,SqlMapConfig.xml是连接数据库的配置文件,

                    在environments标签里配置数据库的连接信息,里面的environment可以配置多个数据库的连接信息,根据每个标签的id进行区分连接哪个数据库;

                    mappers标签配置的是具体的sql映射文件,将具体的mapper.xml进行加载,不在这个文件中进行加载,则不能使用mapper.xml文件。

          主配置文件:SqlMapConfig.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整合过后废除 -->
	<environments default="development">

		<environment id="development">

			<!-- 和jdbc的事物管理 -->
			<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/baby?characterEncoding=utf8" />
				<property name="username" value="root" />
				<property name="password" value="123456" />
			</dataSource>
		</environment>
	</environments>

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

          3)准备一个pojo:一张数据库表对应一个pojo文件

          User.java

package com.gxa.pojo;

import java.util.Date;

public class User {


    private Long id;

    private String username;

    private String password;

    private String salt;

    private String phone;

    private Date created;

    private Date lastLoginTime;

    private Integer status;


    public User(Long id, String username, String password, String salt, String phone, Date created, Date lastLoginTime, Integer status) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.salt = salt;
        this.phone = phone;
        this.created = created;
        this.lastLoginTime = lastLoginTime;
        this.status = status;
    }

    public User() {

    }

    /**
     * @return id
     */
    public Long getId() {
        return id;
    }

    /**
     * @param id
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * @return username
     */
    public String getUsername() {
        return username;
    }

    /**
     * @param username
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * @return password
     */
    public String getPassword() {
        return password;
    }

    /**
     * @param password
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * @return salt
     */
    public String getSalt() {
        return salt;
    }

    /**
     * @param salt
     */
    public void setSalt(String salt) {
        this.salt = salt;
    }

    /**
     * @return phone
     */
    public String getPhone() {
        return phone;
    }

    /**
     * @param phone
     */
    public void setPhone(String phone) {
        this.phone = phone;
    }

    /**
     * @return created
     */
    public Date getCreated() {
        return created;
    }

    /**
     * @param created
     */
    public void setCreated(Date created) {
        this.created = created;
    }

    /**
     * @return last_login_time
     */
    public Date getLastLoginTime() {
        return lastLoginTime;
    }

    /**
     * @param lastLoginTime
     */
    public void setLastLoginTime(Date lastLoginTime) {
        this.lastLoginTime = lastLoginTime;
    }

    /**
     * @return status
     */
    public Integer getStatus() {
        return status;
    }

    /**
     * @param status
     */
    public void setStatus(Integer status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", salt='" + salt + '\'' +
                ", phone='" + phone + '\'' +
                ", created=" + created +
                ", lastLoginTime=" + lastLoginTime +
                ", status=" + status +
                '}';
    }
}

          4)准备sql映射文件,写sql语句

User.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">
<!-- 命名空间,用于隔离sql,后面还有一个很重要的作用 -->
<mapper namespace="test">
    
</mapper>

  
   

          5)在主配置文件中加载映射文件:

          6)使用单元测试根据id查找用户信息

          在User.xml中编写sql语句:

          id:statement的id,或者是区别sql的id;

          parameterType:声明输入参数的类型;

          resultType:接收结果集的类型;

<?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">
<!-- 命名空间,用于隔离sql,后面还有一个很重要的作用 -->
<mapper namespace="test">
    <!--id:statement的id,或者是区别sql的id
    parameterType:声明输入参数的类型
    resultType:接收结果集的类型
     -->
<!--    查询数据-->
    <select id="queryUserById" parameterType="int" resultType="com.gxa.pojo.User">
        select * from user where id = #{id}
    </select>

</mapper>

  
   

          写一个测试类TestDemo.java

package com.gxa.test;

import com.gxa.pojo.User;
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 org.junit.Test;

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

public class TeseDemo {

    @Test
    public void testQueryUserById() throws IOException {

        //1、加载主配置文件
        //创建一个SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

        //2、加载mybatis主配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");

        //3、加载配置文件创建SqlSession工厂
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(in);

        //4、获得SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        
        //使用SqlSession对象的selectOne方法,第一个参数是mapper中的sqlid,第二个参数是输入参数,查询根据id查找用户信息
        User user = sqlSession.selectOne("queryUserById", 1);
        System.out.println(user);
        
    }
}

          以上是一个最基础的使用mybatis框架测试案例,在SSM开发中,上面的代码会进行一些简化。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值