mybatis的基础用法(一)

一、什么是MyBatis(SQL Mapping Framework)

  • MyBatis是对JDBC的封装,
  • 将SQL语句放在了映射文件中,
  • 并且能够自动的将输入参数映射到SQL语句的动态参数上
  • 能够将SQL语句执行的结果集自动的映射成Java对象

底层原理:

利用dom4j对xml映射文件进行解析,利用java的反射机制以及动态代理模式生成动态的java类和代理对象,实现对jdbc的封装

 

MyBatis的核心要素:

1、映射文件(相当于原来的dao类,每个子节点相当于dao中的一个方法)

2、配置文件(配置数据库连接信息、事务和映射文件)

 

二、MyBatis入门示例

1、java项目:引入jar包

mybatis.jar包

jdbc包

log4j包

junit包

 

2、maven项目:jar形式,pom.xml

<dependencies>
    <!-- 日志 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    <!-- 单元测试 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>

    <!-- mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.5</version>
    </dependency>

    <!-- MySql -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.45</version>
    </dependency>
</dependencies>

 

3、创建数据库表

执行 blog.sql(先创建库再执行)

 

4、创建实体类pojo

Blog.java

public class Blog {
    private Integer id;
    private String title;
    private Integer authorId;
    private String state;
    private Boolean featured;
    private String style;
}

5、创建配置文件

5.1、log4j.properties日志文件

5.2、db.properties数据库

5.3、mybatis-config.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 resource="db.properties"></properties>

    <!-- 定义类型别名 -->
    <typeAliases>
        <!-- <typeAlias type="name.yaohuan.mybatis.pojo.Blog" alias="Blog"/> -->
        <package name="name.yaohuan.mybatis.pojo"/>
    </typeAliases>
    
    <!-- 定义数据源 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    
    <!-- 定义映射文件 -->
    <mappers>
        <!-- <mapper resource="name/yaohuan/mybatis/dao/BlogMapper.xml"/> -->
        <package name="name.yaohuan.mybatis.dao" />
    </mappers>
</configuration>

说明:

<properties>数据库参数配置

<typeAliases>类型别名:也可以批量定义别名

<environments>数据库环境配置,包含事务管理和数据库连接池配置

<mappers>包含映射文件列表:也可以批量定义映射文件

注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下;

 

5.4、BlogMapper.xml

namespace对应接口的名字

<?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="name.yaohuan.mybatis.dao.BlogMapper" >
   
</mapper>

说明:

mapper:namespace属性定义完全名,相当于类的全名(包名+类名)

select:id属性定义了一个名为“selectBlog”的映射语句

使用 namespace + id 调用映射语句

6、在映射文件中编写SQL

  <!-- statment -->
    <select id="selectBlogById" parameterType="int" resultType="Blog">
        SELECT * FROM blog WHERE id = #{id}
    </select>

7、创建接口类和接口方法

package name.yaohuan.mybatis.dao;
import java.util.List;
import name.yaohuan.mybatis.pojo.Blog;
public interface BlogMapper {
    Blog selectBlogById(Integer id);
}

8、写工具类MyBatisUtil.java

package name.yaohuan.mybatis.utils;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
    private static SqlSessionFactory sqlSessionFactory = null;
    
    static{
        
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    private MyBatisUtil(){}
    
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

补充:

 

02-数据库表的列名和实体类的属性名不一致的情况

一、方案一

sql语句中定义别名

 <!-- 使用别名处理列名不一致 -->
    <select id="selectBlogById" parameterType="int" resultType="Blog">
        SELECT 
        id,
        title,
        author_id AS authorId,
        state,
        featured,
        style
        FROM blog WHERE id = #{id}
    </select>

 

二、方案二

使用resultMap

在resultMap中至少要定义一个主键列<id>,使用<result>定义其他列,

cloumn表示表中的列名,property表示实体类中的字段

jdbcType是可选的参数,mybatis可以自动识别,可以省略

mapper:

 <resultMap type="Blog" id="blogResultMap">
        <id column="id" property="id" />
        <result column="author_id" property="authorId" />
    </resultMap>
 <!-- 使用resultMap处理列名不一致 -->
    <select id="selectBlogById2" parameterType="int" resultMap="blogResultMap">
        SELECT *
        FROM blog WHERE id = #{id}
    </select>

接口:

 Blog selectBlogById2(Integer id);

测试用例:

 @Test
    public void testSelectBlogById(){
        
        SqlSession session = MyBatisUtil.getSqlSession();
        
        BlogMapper blogDao = session.getMapper(BlogMapper.class);
        Blog blog = blogDao.selectBlogById2(1);
        session.close();
        System.out.println(blog);
    }

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值