mybatis入门demo

1、mybatis的优点:

1.不屏蔽SQL,自己写SQL语句,可以优化性能
2.动态SQL,自己根据不同条件组装SQL,可读性和可维护性高
3.Mapper接口编程,一个接口和一个XML创建映射器。

2、四个核心组件:

①、SqlSessionFactoryBuilder 根据配置器生成SqlsessionFactory
②、SqlSessionFactory 是一个工厂接口,其有两个实现子类,第一个是SqlSessionManager通常使用在多线程中,第二个是DefaultSqlSession,一般会使用第二个。因为这个接口的唯一作用就是生产SqlSession,所以是以单例模式来实现这个接口。
注意:SqlSessionFactory 可以通过XML和JAVA代码的形式创建,推荐XML,有利于后期的维护和修改。创建代码在配置加密过的数据库用户需要解密成明文的时候用到
③、Sqlsession:发送SQL语句执行,并返回结果。
④、SQL Mapper 映射器:作用同③,以一个接口和一个XML文件(或者注解)组成,推荐XML文件配置的方式。
配置如下内容:描述映射规则,提供SQL语句,配置缓存,提供动态SQL。
主要作用,把SQL返回的结果映射成一个POJO(数据表对应的JAVA类),或者把POJO的数据插入数据库。

3、mybatis的xml文件分为两类,一类是配置文件,配置基础的运行环境;另外一类是映射文件,配置映射关系

①、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>
  <typeAliases><!-- 别名 -->
      <typeAlias alias="role" type="com.POJO.Role"/>
  </typeAliases>
  <!-- 数据库环境 -->
  <environments default="development">
    <environment id="development">
      <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/chapter3"/>
        <property name="username" value="root"/>
        <property name="password" value="1234567"/>
      </dataSource>
    </environment>
  </environments>
  <!-- 映射文件 -->
  <mappers>
    <mapper resource="com/MapperInf/RoleMapper.xml"/>
    <!--  <mapper class="com.learn.ssm.chapter3.mapper.RoleMapper2"/> -->
  </mappers>
</configuration>

a.其中元素为一个类定义一个别名,然后可以一直使用这个别名
b.配置环境,这里配置了数据库,配置的事务管理器,采用JDBC的管理器方式。
c.配置数据库,连接池类型
d.配置映射器。这里mapper引入一个xml文件,这个com/MapperInf/RoleMapper.xml文件,用这个XML文件配置映射器。

②、XML映射文件

<mapper namespace="com.mapper.MessageMapper">
    <select id="getMessge" parameterType="int" resultType="Message">
        select ID,
        COMMAND, DESCRIPTION, CONTENT from message where id = #{id}
    </select>
</mapper>

a.通过namespace找到接口
b.id映射接口的某个方法,parameterType是这个方法的参数,resultType映射返回结果的类型,SQL语句中 #{id}是方法的参数。
比如这里通过namespace找到下面的接口,然后映射它的方法MessageMapper。
public interface MessageMapper {
public Message getMessage(int id);
}

4、生命周期:每一个对象应该存活的时间,对象用完应该被JVM销毁。

①、SqlSessionFactoryBuilder 存活在创建SqlSessionFactory 的方法中,之外应该被销毁
②、SqlSessionFactory可以当做是一个数据库的连接池,用来创建Sqlsession,所以SqlSessionFactory的生命周期应该等同于整个MyBatis的生命周期。创建多个SqlSessionFactory,明显会浪费资源,所以应该让SqlSessionFactory以单例模式的形式存在。
③、Sqlsession可以当做一个数据库连接请求(connection对象),所以在业务请求完成后应该关闭这个对象。try…catch…finally
④、Mapper对象是连接中的一个SQL业务请求,完成了请求中的业务请求,就应该关闭这个对象

5、基于xml方式的mybatis入门实例:

JAVA项目结构:
这里写图片描述

①RoleMapper.java是一个映射接口
package com.MapperInf;

import java.util.List;
import com.POJO.Role;

public interface RoleMapper {
    public int insertRole(Role role);
    public int deleteRole(Long id);
    public int updateRole(Role role);
    public Role getRole(Long id);
    public List<Role> findRoles(String roleName);
}

这段代码对应的是对Role的数据操作方法

②RoleMapper.xml是对应映射接口的具体数据操作方法SQL语句的配置
<?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.MapperInf.RoleMapper">

    <insert id="insertRole" parameterType="role">
        insert into t_role(role_name, note) values(#{roleName}, #{note})
    </insert>

    <delete id="deleteRole" parameterType="long">
        delete from t_role where id= #{id}
    </delete>

    <update id="updateRole" parameterType="role">
        update t_role set role_name = #{roleName}, note = #{note} where id= #{id}
    </update>

    <select id="getRole" parameterType="long" resultType="role">
        select id,
        role_name as roleName, note from t_role where id = #{id}
    </select>

    <select id="findRoles" parameterType="string" resultType="role">
        select id, role_name as roleName, note from t_role
        where role_name like concat('%', #{roleName}, '%')
    </select>
</mapper>

a.通过namespace找到接口
b.id映射接口的某个方法,parameterType是这个方法的参数,resultType映射返回结果的类型,SQL语句中 #{id}是方法的参数。
这里通过找到public interface RoleMapper这个接口,

    <insert id="insertRole" parameterType="role">
        insert into t_role(role_name, note) values(#{roleName}, #{note})
    </insert>

就映射了public int insertRole(Role role);这个方法。

③、SqlSessionFactoryUtils.java是一个单例模式的工厂类,输出sqlSessionFactory。
package com.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 SqlSessionFactoryUtils {
    private static SqlSessionFactory sqlSessionFactory= null;
    //私有化构造方法
    private SqlSessionFactoryUtils(){}

    /*单例模式*/
    public static SqlSessionFactory getSqlSessionFactory() {

        if (sqlSessionFactory==null) {
            synchronized (SqlSessionFactoryUtils.class) {
                if (sqlSessionFactory==null) {
                    String resource = "mybatis-config.xml";
                    InputStream inputStream;
                    try {
                        inputStream = Resources.getResourceAsStream(resource);
                        sqlSessionFactory = new SqlSessionFactoryBuilder().
                                build(inputStream);
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        return null;
                    }
                }
            }
        }
        System.out.println("返回sqlSessionFactory");
        return sqlSessionFactory;
    }

    public static SqlSession openSqlSession() {
        if (sqlSessionFactory==null) {
            getSqlSessionFactory();
        }
        System.out.println("返回SqlSession");
        return sqlSessionFactory.openSession();
    }
}
④、Role.java一个对应数据表内容的实体类
package com.POJO;


public class Role {
    private Long id;
    private String roleName;
    private String note;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getRoleName() {
        return roleName;
    }
    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }
    public String getNote() {
        return note;
    }
    public void setNote(String note) {
        this.note = note;
    }
}
⑤、mybatis-config.xml,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>
  <typeAliases><!-- 别名 -->
      <typeAlias alias="role" type="com.POJO.Role"/>
  </typeAliases>
  <!-- 数据库环境 -->
  <environments default="development">
    <environment id="development">
      <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/chapter3"/>
        <property name="username" value="root"/>
        <property name="password" value="1234567"/>
      </dataSource>
    </environment>
  </environments>
  <!-- 映射文件 -->
  <mappers>
    <mapper resource="com/MapperInf/RoleMapper.xml"/>
    <!--  <mapper class="com.learn.ssm.chapter3.mapper.RoleMapper2"/> -->
  </mappers>
</configuration>

a.其中元素为一个类定义一个别名,然后可以一直使用这个别名
b.配置环境,这里配置了数据库,配置的事务管理器,采用JDBC的管理器方式。
c.配置数据库,连接池类型
d.配置映射器。这里mapper引入一个xml文件,这个com/MapperInf/RoleMapper.xml文件,用这个XML文件配置映射器。

Demo地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

obession

觉得有用可以打赏咖啡一杯~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值