MyBatis的基本使用

MyBatis的基本使用

使用步骤:

  • 第一步,添加所需jar包,mybatis-3.5.7.jar

  • 第二步,配置文件,(具体配置后面说明) XML 配置文件包含对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源和决定事务范围和控制的事务管理器。

  • 第三步,映射文件(具体配置后面说明)

    CRUD操作,配置了每一个sql,以及sql的封装规则等。

  • 第四步,调用过程

1、从xml配置文件中构建SqlSessionFactory

			InputStream stream = Resources.getResourceAsStream("mybatis-config.xml");
        	SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);

2、从 SqlSessionFactory 中获取 SqlSession

SqlSession session = sqlSessionFactory.openSession();
session.selectOne("namespace.id",param);
session.close();

现在有更方便的方法,执行SQL语句

InterfaceDao dao = session.getMapper(InterfaceDao.class);
dao.method();

配置文件:

<?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"></properties>
<!--    开启驼峰命名法-->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
<!--    给类名起别名-->
    <typeAliases>
        <typeAlias type="com.liujiawei.bean.GoodsType" alias="goodsType"></typeAlias>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${pwd}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
<!--        <mapper resource="com/liujiawei/dao/GoodsTypeDao.xml"></mapper>-->
        <package name="com.liujiawei.dao"/>
    </mappers>
</configuration>

映射文件:
mapper标签中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="com.liujiawei.dao.GoodsDao">

下来我们做一个简单的测试:
根据typeId查询所有商品

  • dao中的方法:

    public interface GoodsDao {
        //根据typeId获取所有商品
        public List<Goods> selectAllByTypeId(int typeId); } ```
    
  • 方法的映射:

     <select id="selectAllByTypeId"
    resultType="com.liujiawei.bean.Goods">
             select *
        	 from goods 
            where type_id = #{id}
      </select> 
    
  • 测试:

public class GoodsTest {
    SqlSession session;
    GoodsDao goodsDao;
    @Before
    public void beforeMethod(){
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
            session = factory.openSession();
            goodsDao = session.getMapper(GoodsDao.class);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @After
    public void afterMethod(){
        session.close();
    }
    @Test
    public void selectAllByTypeId(){
        List<Goods> list = goodsDao.selectAllByTypeId(4);
        for (Goods goods:list) {
            System.out.println(goods.getGoodId()+"\t"+goods.getGoodName()+"\t"+goods.getTypeId());
        }
    }

小结

  • 接口式编程
    ​ 原生:Dao ===> DaoImpl
    mybatis: Dao映射 ===> xxx.xml
  • SqlSession代表和数据库的一次会话,用完必须关闭;
  • SqlSession和connection一样都是非线程安全。每次使用都应该去获取新的对象。不能定义为成员变量
  • mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。(将接口和xml进行绑定)getMapper()这个方法
  • 配置文件中,不会对每个一映射文件做映射,通常使用package标签映射到某个包下
  • 接口中的方法名必须是xml文件中的每个statement的id
  • 事务是手动提交的,session.commit();或者factory.openSession(true);

两个重要的配置文件

  • mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息等…系统运行环境信息
  • sql映射文件:保存了每一个sql语句的映射信息,将sql抽取出来。

注意:约定大于配置
在实际开发中,会有dao接口。使用mybatis,不用创建实现类,而是每个接口对应xml文件
1、接口与xml放在同一包下,且名字必须相同
2、映射文件中的namespace的值必须和接口的完全限定名保持一致
3、定义的映射文件中的每个statement的id值必须和接口中的方法名保持一致

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值