mybatis概念

MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到GithubGitHub - mybatis/mybatis-3: MyBatis SQL mapper framework for Java

iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

mybatis基本应用

1:mybatis.jar和mysql.jar

添加jar包到构建路径中

2:MybatisConfig.xml

要求:会改即可。mybatisConfig.xml:mybatis核心配置文件    定义了数据源与实体映射配置文件(定义sql语句的xml,StuMapper.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>    
    <environments default="d1">        
        <environment id="d1">            
            <!-- 配置事务管理,采用JDBC的事物管理 -->            
            <transactionManager type="JDBC"/>            
            <!-- POOLED:mybatis自带的数据源 JNDI:基于tomcat的数据源 -->           
            <dataSource type="POOLED">                
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>                
                <property name="url" value="jdbc:mysql://localhost:3306/abc2?serverTimezone=Asia/Shanghai"/>          
                <property name="username" value="root"/>               
                <property name="password" value="123456"/>            
            </dataSource>            
        </environment>        
    
    </environments>    
    <mappers>        
        <mapper resource="com/mapper/StuMapper.xml"/>    
    </mappers>
</configuration>

3:引入DAO映射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="com.mapper.DeptDAO">
    <select id="findAll" resultType="com.entity.Dept">
        select * from dept
    </select>
​
</mapper>

4:接口与实体映射文件中定义方法

package com.dao;
​
import java.util.List;
​
import com.entity.Dept;
​
public interface DeptDAO {
    List<Dept> findAll();
}

5:调用类方法,实现功能。

新建main函数测试:
public static void main(String[] args) {        
    SqlSession sqlSession = null;       
    try {            
        //1:将MyBatisConfig.xml加载到流中           
        InputStream in = Test.class.getResourceAsStream("/MyBatisConfig.xml");            
        //2:调用方法读取流中的xml文件中定义的数据源封装在SqlSessionFactory类中            
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);            
        //3:调用方法获得Sqlsession对象,封装数据库连接对象            
        sqlSession = sqlSessionFactory.openSession();            
        //4:调用方法,获得StuMapper接口的代理对象            
        StuMapper stuMapper = sqlSession.getMapper(StuMapper.class);           
        List<Stu> list1 = stuMapper.selAll();            
        Stu stu = stuMapper.selOne();            
        System.out.println(list1);            
        System.out.println(stu);            
        sqlSession.commit();        
    } catch (Exception e) {            
        e.printStackTrace();            
        sqlSession.rollback();        
    }finally {            
        sqlSession.close();        
    }    
}

注意:

1:流中加载MyBatisConfig文件名经常写错,必须放在src根目录 InputStream in = Test.class.getResourceAsStream("/MyBatisConfig.xml");

2:MyBatisConfig.xml忘记加载XXXXDAO.xml或者路径错误 3:DAO.xml要实现接口 <mapper namespace="com.mapper.StuMapper"> 4:DAO.xml文件中的语法错误

返回类型

查询方法:    
查询一行数据返回一个实体对象:使用resultType="com.entity.Stu"    
查询多行数据返回一个集合:依然使用resultType="com.entity.Stu",来定义集合的泛型    
<!-- 查询方法,查询一行,返回实体对象,查询多行,返回集合,需要定义泛型 -->    
<select id="selAll" resultType="com.entity.Stu">        
    select * from stu    
</select>    
<select id="selOne" resultType="com.entity.Stu">        
    select * from stu where sid=#{arg0}    
</select>
增删改的方法:    默认返回全是boolean,可以不用定义返回类型    
<update id="updateStuBySid" parameterType="com.entity.Stu">        
    update stu set sname=#{sname},sbir=#{sbir},ssex=#{ssex},saddress=#{saddress} where sid=#{sid}    
</update>

参数类型

参数为实体类:
parameterType="com.entity.Stu"    
update stu set sname=#{sname},sbir=#{sbir},ssex=#{ssex},saddress=#{saddress} where sid=#{sid}    
#{属性名}:从实参中获得该属性值    
<update id="updateStuBySid" parameterType="com.entity.Stu">        
    update stu set sname=#{sname},sbir=#{sbir},ssex=#{ssex},saddress=#{saddress} where sid=#{sid}    
</update>
参数类型可以不用定义:使用#{arg0}、#{arg1}、#{arg2}的方式给sql语句赋值    #{arg0}:下标为0的实参    
<delete id="delStuBySid2">        
    delete from stu where sid=#{arg0}    
</delete>    
<delete id="delStuBySid3">       
    delete from stu where sname=#{arg1} and saddress=#{arg0}    
</delete>

mybatis封装

现在:每个方法的代码都是在main函数,要封装起来,在main函数中随时调用。新建一个包:com.service:业务层包,封装具体工具,且提供事务处理(提交、回滚、关闭),新建StuService类,定义多个方法,每个方法中调用StuMapper中的方法,实现功能。问题:service每个方法中的大量代码重复,明天来继续封装。作业    新建项目,完成商品表中带商品类型id信息的增、删、查、改

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值